Skjölun / Kjarni / GeoPoint og mörk

GeoPoint og mörk

Það er nákvæmlega ein hnitagerð í MapConductor: GeoPoint. Þú snertir aldrei LatLng, CLLocationCoordinate2D eða LngLat frá einstökum þjónustuaðilum. GeoRectBounds sér um ferhyrnd mörk og lýsir þeim með tveimur punktum, suðvestri og norðaustri. Bæði hafa sömu meðlimi á öllum þremur vettvöngunum.

ANDROID
com.mapconductor.core.features
iOS
MapConductorCore
REACT
@mapconductor/js-sdk-core
Vettvangur

01 · GeoPoint

Óbreytanlegt gildi sem geymir breiddargráðu, lengdargráðu og hæð. Hæðin er valfrjáls og telst 0 sé henni sleppt. Jafngildi og hakk ráðast af innihaldinu, svo GeoPoint virkar beint sem lykill í vörpun eða við samanburð á breytingum.

Meðlimur
Type
Lýsing
latitude
Double
Breiddargráða í gráðum, −90…90.
longitude
Double
Lengdargráða í gráðum, −180…180.
altitude
Double · 0.0
Hæð í metrum; aðeins 3D-þjónustuaðilar túlka hana.
wrap()
GeoPoint
Skilar punktinum með lengdargráðuna vafða yfir daglínuna.
toUrlValue(precision)
String · 6
Strengur á forminu "breidd,lengd"; sex aukastafir sjálfgefið.

Þrjár leiðir eru til að búa einn til: smiðurinn, verksmiðjur sem stafa hnitaröðina út, og umbreyting úr öðru hnitalíku gildi. Röð breiddar og lengdar, sem auðvelt er að víxla, er aðgreind með heitinu.

GeoPoint · Kotlin
val tokyo = GeoPoint(35.6812, 139.7671)
val haneda = GeoPoint.fromLatLong(35.548852, 139.784086)
val fromLngLat = GeoPoint.fromLongLat(139.7671, 35.6812)

// Úr hvaða gildi sem útfærir GeoPointInterface
val copied = GeoPoint.from(anyPositionLike)

val url = tokyo.toUrlValue() // "35.681200,139.767100"

fromLatLng / fromLatLong og fromLngLat / fromLongLat eru samheiti — veldu það sem passar við nafngiftina í kóðanum þínum.

02 · Að staðla og sannreyna

Hnit úr utanaðkomandi gögnum eru oft utan marka, eða bera lengdargráðu yfir 360°. normalize klemmir þau inn fyrir mörkin og isValid segir þér hvort þau voru innan marka til að byrja með.

normalize()

Færa inn fyrir mörkin

Breiddargráðan er klemmd í −90…90 og lengdargráðan vafin inn í −180…180 — lengdargráðan 200 verður −160.

isValid()

Athuga mörkin

Satt aðeins þegar breiddargráðan liggur í −90…90 og lengdargráðan í −180…180. Notaðu það þegar gögn eru tekin inn.

Kotlin · viðbótarföll
// Veitt sem viðbótarfall á GeoPointInterface
val safe = raw.normalize()
if (!raw.isValid()) return

03 · GeoRectBounds

Rétthyrningur gefinn með suðvestur- og norðausturhorni sínu. Venjan er vaxandi kassi: gefðu honum punkta og hann þenst út til að umlykja þá alla. Nýbúinn kassi er tómur, með southWest og northEast ósett.

Meðlimur
Lýsing
southWest / northEast
Hornin tvö; ósett á meðan kassinn er tómur.
center
Miðjan — reiknuð rétt jafnvel fyrir kassa sem liggur yfir daglínuna.
isEmpty
Hvort enginn punktur hafi enn verið bætt við.
extend(point)
Stækkar kassann svo hann rúmi punktinn og þenst út styttri leiðina í lengdargráðu.
contains(point)
Hvort punktur falli innanborðs.
intersects(other)
Hvort tveir kassar skarist — notað fyrir ákvarðanir um flísar og sóknarsvæði.
union(other)
Nýr kassi sem umlykur báða.
expandedByDegrees(lat, lon)
Nýr kassi útvíkkaður í gráðum. Til að víkka í metrum, notaðu expandBounds úr landmælingahjálparföllunum.
toSpan()
Skilar mismuni breiddar og lengdar, pökkuðum sem GeoPoint.
toUrlValue(precision)
Strengur á forminu "sv,na"; sex aukastafir sjálfgefið.
GeoRectBounds · Kotlin
// Byggðu mörkin sem rúma alla leiðina og felldu myndavélina að þeim
val bounds = GeoRectBounds()
routePoints.forEach { bounds.extend(it) }

mapViewState.fitBounds(bounds = bounds, padding = 48)

// Sæktu ögn víðar en sýnilega svæðið
val fetchArea = bounds.expandedByDegrees(latPad = 0.05, lonPad = 0.05)

04 · Hvar mörk eru notuð

GeoRectBounds birtist út um allt API-ið og er alltaf sama gerðin — búðu til kassa einu sinni og endurnýttu hann.

fitBounds()

Færir myndavélina svo allur kassinn passi; padding er spássía á skjá í rökrænum pixlum.

GroundImageState

Að setja mynd á kortið er tjáð sem mörkin sem hún þekur.

CameraRestriction · restrictBounds

Kassinn sem myndavélin má ekki fara út fyrir (Android og React).

visibleRegion.bounds

MapCameraPosition sem onCameraMove afhendir ber sýnilega kassann, svo þú getur sótt aðeins gögnin innan hans.

expandBounds()

Metra-útgáfan; sjá landmælingasíðuna.

GeoJSON / flísar

intersects stýrir ákvörðunum um flísagerð og endursókn.

Það sem myndbandið sýnir · Android + MapLibreKotlin · Jetpack Compose
val spots = listOf(
    GeoPoint.fromLatLong(35.6586, 139.7454), // Tokyo Tower
    GeoPoint.fromLatLong(35.7101, 139.8107), // Skytree
    GeoPoint.fromLatLong(35.6852, 139.7528), // Imperial Palace
)

// Start from an empty rectangle and widen it one point at a time
val bounds = GeoRectBounds()
spots.forEach { bounds.extend(it) }

MapLibreMapView(state = mapViewState) {
    spots.forEachIndexed { i, point ->
        Marker(MarkerState(id = "spot-$i", position = point))
    }
}

Button(onClick = {
    // padding is screen margin in logical pixels; at 0 the outermost point hugs the edge
    if (!bounds.isEmpty) mapViewState.fitBounds(bounds, padding = 64)
}) {
    Text("Show all")
}
Sýnidæmi á myndbandi · fitBounds rammar inn punktasafn
Myndband ekki tekið upp ennMörkin utan um nokkur merki reiknuð og fitBounds látið færa myndavélina inn. Það sem skiptir máli er hreyfingin þar á milli.

Tengdar síður