import typing, abc
from System import Attribute, Exception, ValueTuple_2, ValueTuple_3, Array_1
from System.Collections import IDictionary
from System.Reflection import MethodBase
from System.Collections.Generic import IList_1

class BulkElevationProviderAttribute(Attribute):
    def __init__(self) -> None: ...
    @property
    def TypeId(self) -> typing.Any: ...


class ElevationNotFoundException(Exception):
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def __init__(self, message: str) -> None: ...
    @typing.overload
    def __init__(self, message: str, inner: Exception) -> None: ...
    @property
    def Data(self) -> IDictionary: ...
    @property
    def HelpLink(self) -> str: ...
    @HelpLink.setter
    def HelpLink(self, value: str) -> str: ...
    @property
    def HResult(self) -> int: ...
    @HResult.setter
    def HResult(self, value: int) -> int: ...
    @property
    def InnerException(self) -> Exception: ...
    @property
    def Message(self) -> str: ...
    @property
    def Source(self) -> str: ...
    @Source.setter
    def Source(self, value: str) -> str: ...
    @property
    def StackTrace(self) -> str: ...
    @property
    def TargetSite(self) -> MethodBase: ...


class ElevationProviderAttribute(Attribute):
    def __init__(self) -> None: ...
    @property
    def TypeId(self) -> typing.Any: ...


class IBulkElevationProvider(IElevationProvider, typing.Protocol):
    @abc.abstractmethod
    def GetElevationAtPoints(self, coordinates: IList_1[ValueTuple_2[float, float]], zoomLevel: int = ...) -> IList_1[float]: ...
    @abc.abstractmethod
    def GetTileData(self, pointInTile: ValueTuple_2[float, float], zoomLevel: int = ...) -> ValueTuple_3[Array_1[float], int, int]: ...


class IElevationProvider(typing.Protocol):
    @property
    def MaxZoomLevel(self) -> int: ...
    @abc.abstractmethod
    def GetDisplayName(self) -> str: ...
    @abc.abstractmethod
    def GetElevationAtPoint(self, longitude: float, latitude: float, zoomLevel: int = ...) -> float: ...
    @abc.abstractmethod
    def GetZoomLevelForGridCellSize(self, gridCellSize: float) -> int: ...

