import typing

import android.content
import android.graphics
import android.graphics.drawable
import android.location
import android.os
import java
import java.io
import java.lang
import java.util
import org.osmdroid
import org.osmdroid.api
import org.osmdroid.tileprovider
import org.osmdroid.util.constants
import org.osmdroid.views.util.constants

class BoundingBoxE6(android.os.Parcelable, java.io.Serializable, org.osmdroid.views.util.constants.MapViewConstants):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[BoundingBoxE6]] = ...
    mLatNorthE6: int = ...
    mLatSouthE6: int = ...
    mLonEastE6: int = ...
    mLonWestE6: int = ...
    @typing.overload
    def __init__(self, north: float | java.jdouble | java.lang.Double, east: float | java.jdouble | java.lang.Double, south: float | java.jdouble | java.lang.Double, west: float | java.jdouble | java.lang.Double, /) -> None: ...
    @typing.overload
    def __init__(self, northE6: int | java.jint | java.lang.Integer, eastE6: int | java.jint | java.lang.Integer, southE6: int | java.jint | java.lang.Integer, westE6: int | java.jint | java.lang.Integer, /) -> None: ...
    def bringToBoundingBox(self, aLatitudeE6: int | java.jint | java.lang.Integer, aLongitudeE6: int | java.jint | java.lang.Integer, /) -> GeoPoint: ...
    @typing.overload
    def contains(self, pGeoPoint: org.osmdroid.api.IGeoPoint, /) -> bool: ...
    @typing.overload
    def contains(self, aLatitudeE6: int | java.jint | java.lang.Integer, aLongitudeE6: int | java.jint | java.lang.Integer, /) -> bool: ...
    def describeContents(self) -> int: ...
    @staticmethod
    def fromGeoPoints(partialPolyLine: java.util.ArrayList[GeoPoint], /) -> BoundingBoxE6: ...
    def getCenter(self) -> GeoPoint: ...
    def getDiagonalLengthInMeters(self) -> int: ...
    def getGeoPointOfRelativePositionWithExactGudermannInterpolation(self, relX: float | java.jfloat | java.lang.Float, relY: float | java.jfloat | java.lang.Float, /) -> GeoPoint: ...
    def getGeoPointOfRelativePositionWithLinearInterpolation(self, relX: float | java.jfloat | java.lang.Float, relY: float | java.jfloat | java.lang.Float, /) -> GeoPoint: ...
    def getLatNorthE6(self) -> int: ...
    def getLatSouthE6(self) -> int: ...
    def getLatitudeSpanE6(self) -> int: ...
    def getLonEastE6(self) -> int: ...
    def getLonWestE6(self) -> int: ...
    def getLongitudeSpanE6(self) -> int: ...
    def getRelativePositionOfGeoPointInBoundingBoxWithExactGudermannInterpolation(self, aLatitudeE6: int | java.jint | java.lang.Integer, aLongitudeE6: int | java.jint | java.lang.Integer, reuse: android.graphics.PointF, /) -> android.graphics.PointF: ...
    def getRelativePositionOfGeoPointInBoundingBoxWithLinearInterpolation(self, aLatitude: int | java.jint | java.lang.Integer, aLongitude: int | java.jint | java.lang.Integer, reuse: android.graphics.PointF, /) -> android.graphics.PointF: ...
    def increaseByScale(self, pBoundingboxPaddingRelativeScale: float | java.jfloat | java.lang.Float, /) -> BoundingBoxE6: ...
    def toString(self) -> str: ...
    def writeToParcel(self, out: android.os.Parcel, arg1: int | java.jint | java.lang.Integer, /) -> None: ...

class GEMFFile(java.lang.Object):
    @typing.overload
    def __init__(self, pLocation: java.io.File, /) -> None: ...
    @typing.overload
    def __init__(self, pLocation: str | java.lang.String, /) -> None: ...
    @typing.overload
    def __init__(self, pLocation: str | java.lang.String, pSourceFolders: java.util.List[java.io.File], /) -> None: ...
    def acceptAnySource(self) -> None: ...
    def close(self) -> None: ...
    def getInputStream(self, pX: int | java.jint | java.lang.Integer, pY: int | java.jint | java.lang.Integer, pZ: int | java.jint | java.lang.Integer, /) -> java.io.InputStream: ...
    def getName(self) -> str: ...
    def getSources(self) -> java.util.LinkedHashMap[java.lang.Integer, java.lang.String]: ...
    def getZoomLevels(self) -> java.util.Set[java.lang.Integer]: ...
    def selectSource(self, pSource: int | java.jint | java.lang.Integer, /) -> None: ...

class GeoPoint(android.os.Parcelable, java.io.Serializable, java.lang.Cloneable, org.osmdroid.api.IGeoPoint, org.osmdroid.util.constants.GeoConstants, org.osmdroid.views.util.constants.MathConstants):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[GeoPoint]] = ...
    @typing.overload
    def __init__(self, aLocation: android.location.Location, /) -> None: ...
    @typing.overload
    def __init__(self, aGeopoint: GeoPoint, /) -> None: ...
    @typing.overload
    def __init__(self, aLatitude: float | java.jdouble | java.lang.Double, aLongitude: float | java.jdouble | java.lang.Double, /) -> None: ...
    @typing.overload
    def __init__(self, aLatitudeE6: int | java.jint | java.lang.Integer, aLongitudeE6: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, aLatitude: float | java.jdouble | java.lang.Double, aLongitude: float | java.jdouble | java.lang.Double, aAltitude: float | java.jdouble | java.lang.Double, /) -> None: ...
    @typing.overload
    def __init__(self, aLatitudeE6: int | java.jint | java.lang.Integer, aLongitudeE6: int | java.jint | java.lang.Integer, aAltitude: int | java.jint | java.lang.Integer, /) -> None: ...
    def bearingTo(self, other: org.osmdroid.api.IGeoPoint, /) -> float: ...
    def clone(self) -> GeoPoint: ...
    def describeContents(self) -> int: ...
    def destinationPoint(self, aDistanceInMeters: float | java.jdouble | java.lang.Double, aBearingInDegrees: float | java.jfloat | java.lang.Float, /) -> GeoPoint: ...
    def distanceTo(self, other: org.osmdroid.api.IGeoPoint, /) -> int: ...
    def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
    @staticmethod
    def fromCenterBetween(geoPointA: GeoPoint, geoPointB: GeoPoint, /) -> GeoPoint: ...
    @staticmethod
    def fromDoubleString(s: str | java.lang.String, spacer: str | java.jchar | java.lang.Character, /) -> GeoPoint: ...
    @staticmethod
    def fromIntString(s: str | java.lang.String, /) -> GeoPoint: ...
    @staticmethod
    def fromInvertedDoubleString(s: str | java.lang.String, spacer: str | java.jchar | java.lang.Character, /) -> GeoPoint: ...
    def getAltitude(self) -> int: ...
    def getLatitude(self) -> float: ...
    def getLatitudeE6(self) -> int: ...
    def getLongitude(self) -> float: ...
    def getLongitudeE6(self) -> int: ...
    def hashCode(self) -> int: ...
    def setAltitude(self, aAltitude: int | java.jint | java.lang.Integer, /) -> None: ...
    def setCoordsE6(self, aLatitudeE6: int | java.jint | java.lang.Integer, aLongitudeE6: int | java.jint | java.lang.Integer, /) -> None: ...
    def setLatitudeE6(self, aLatitudeE6: int | java.jint | java.lang.Integer, /) -> None: ...
    def setLongitudeE6(self, aLongitudeE6: int | java.jint | java.lang.Integer, /) -> None: ...
    def toDoubleString(self) -> str: ...
    def toInvertedDoubleString(self) -> str: ...
    def toString(self) -> str: ...
    def writeToParcel(self, out: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

class GeometryMath(java.lang.Object):
    DEG2RAD: typing.ClassVar[float] = ...
    RAD2DEG: typing.ClassVar[float] = ...
    def __init__(self) -> None: ...
    @typing.overload
    @staticmethod
    def getBoundingBoxForRotatatedRectangle(rect: android.graphics.Rect, angle: float | java.jfloat | java.lang.Float, reuse: android.graphics.Rect, /) -> android.graphics.Rect: ...
    @typing.overload
    @staticmethod
    def getBoundingBoxForRotatatedRectangle(rect: android.graphics.Rect, centerPoint: android.graphics.Point, angle: float | java.jfloat | java.lang.Float, reuse: android.graphics.Rect, /) -> android.graphics.Rect: ...
    @typing.overload
    @staticmethod
    def getBoundingBoxForRotatatedRectangle(rect: android.graphics.Rect, centerX: int | java.jint | java.lang.Integer, centerY: int | java.jint | java.lang.Integer, angle: float | java.jfloat | java.lang.Float, reuse: android.graphics.Rect, /) -> android.graphics.Rect: ...

class LocationUtils(org.osmdroid.util.constants.UtilConstants):
    @staticmethod
    def getLastKnownLocation(pLocationManager: android.location.LocationManager, /) -> android.location.Location: ...

class MyMath(org.osmdroid.views.util.constants.MathConstants):
    @staticmethod
    def gudermann(y: float | java.jdouble | java.lang.Double, /) -> float: ...
    @staticmethod
    def gudermannInverse(aLatitude: float | java.jdouble | java.lang.Double, /) -> float: ...
    @staticmethod
    def mod(number: int | java.jint | java.lang.Integer, modulus: int | java.jint | java.lang.Integer, /) -> int: ...

class NetworkLocationIgnorer(org.osmdroid.util.constants.UtilConstants):
    def __init__(self) -> None: ...
    def shouldIgnore(self, pProvider: str | java.lang.String, pTime: int | java.jlong | java.lang.Long, /) -> bool: ...

class Position(org.osmdroid.api.IPosition):
    def __init__(self, aLatitude: float | java.jdouble | java.lang.Double, aLongitude: float | java.jdouble | java.lang.Double, /) -> None: ...
    def getBearing(self) -> float: ...
    def getLatitude(self) -> float: ...
    def getLongitude(self) -> float: ...
    def getZoomLevel(self) -> float: ...
    def hasBearing(self) -> bool: ...
    def hasZoomLevel(self) -> bool: ...
    def setBearing(self, aBearing: float | java.jfloat | java.lang.Float, /) -> None: ...
    def setZoomLevel(self, aZoomLevel: float | java.jfloat | java.lang.Float, /) -> None: ...

class ResourceProxyImpl(org.osmdroid.DefaultResourceProxyImpl):
    def __init__(self, aContext: android.content.Context, /) -> None: ...
    def getBitmap(self, pResId: org.osmdroid.ResourceProxy.bitmap, /) -> android.graphics.Bitmap: ...
    def getDrawable(self, pResId: org.osmdroid.ResourceProxy.bitmap, /) -> android.graphics.drawable.Drawable: ...
    @typing.overload
    def getString(self, pResId: org.osmdroid.ResourceProxy.string, /) -> str: ...
    @typing.overload
    def getString(self, pResId: org.osmdroid.ResourceProxy.string, /, *formatArgs: java.lang.Object) -> str: ...

class TileLooper(java.lang.Object):
    mLowerRight: android.graphics.Point = ...
    mUpperLeft: android.graphics.Point = ...
    def __init__(self) -> None: ...
    def finaliseLoop(self) -> None: ...
    def handleTile(self, arg1: android.graphics.Canvas, arg2: int | java.jint | java.lang.Integer, arg3: org.osmdroid.tileprovider.MapTile, arg4: int | java.jint | java.lang.Integer, arg5: int | java.jint | java.lang.Integer, /) -> None: ...
    def initialiseLoop(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jint | java.lang.Integer, /) -> None: ...
    def loop(self, pCanvas: android.graphics.Canvas, pZoomLevel: int | java.jint | java.lang.Integer, pTileSizePx: int | java.jint | java.lang.Integer, pViewPort: android.graphics.Rect, /) -> None: ...

class TileSystem(java.lang.Object):
    def __init__(self) -> None: ...
    @staticmethod
    def GroundResolution(latitude: float | java.jdouble | java.lang.Double, levelOfDetail: int | java.jint | java.lang.Integer, /) -> float: ...
    @staticmethod
    def LatLongToPixelXY(latitude: float | java.jdouble | java.lang.Double, longitude: float | java.jdouble | java.lang.Double, levelOfDetail: int | java.jint | java.lang.Integer, reuse: android.graphics.Point, /) -> android.graphics.Point: ...
    @staticmethod
    def MapScale(latitude: float | java.jdouble | java.lang.Double, levelOfDetail: int | java.jint | java.lang.Integer, screenDpi: int | java.jint | java.lang.Integer, /) -> float: ...
    @staticmethod
    def MapSize(levelOfDetail: int | java.jint | java.lang.Integer, /) -> int: ...
    @staticmethod
    def PixelXYToLatLong(pixelX: int | java.jint | java.lang.Integer, pixelY: int | java.jint | java.lang.Integer, levelOfDetail: int | java.jint | java.lang.Integer, reuse: GeoPoint, /) -> GeoPoint: ...
    @staticmethod
    def PixelXYToTileXY(pixelX: int | java.jint | java.lang.Integer, pixelY: int | java.jint | java.lang.Integer, reuse: android.graphics.Point, /) -> android.graphics.Point: ...
    @staticmethod
    def QuadKeyToTileXY(quadKey: str | java.lang.String, reuse: android.graphics.Point, /) -> android.graphics.Point: ...
    @staticmethod
    def TileXYToPixelXY(tileX: int | java.jint | java.lang.Integer, tileY: int | java.jint | java.lang.Integer, reuse: android.graphics.Point, /) -> android.graphics.Point: ...
    @staticmethod
    def TileXYToQuadKey(tileX: int | java.jint | java.lang.Integer, tileY: int | java.jint | java.lang.Integer, levelOfDetail: int | java.jint | java.lang.Integer, /) -> str: ...
    @staticmethod
    def getTileSize() -> int: ...
    @staticmethod
    def setTileSize(tileSize: int | java.jint | java.lang.Integer, /) -> None: ...
