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.
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.
Þ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.
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"
let tokyo = GeoPoint(latitude: 35.6812, longitude: 139.7671) let haneda = GeoPoint.fromLatLong(latitude: 35.548852, longitude: 139.784086) let fromLngLat = GeoPoint.fromLongLat(longitude: 139.7671, latitude: 35.6812) // Úr hvaða gildi sem uppfyllir GeoPointProtocol let copied = GeoPoint.from(position: anyPositionLike) let url = tokyo.toUrlValue() // "35.681200,139.767100"
import { createGeoPoint, fromLatLng, fromLngLat, GeoPoint } from '@mapconductor/js-sdk-core';
const tokyo = createGeoPoint({ latitude: 35.6812, longitude: 139.7671 });
const haneda = fromLatLng({ latitude: 35.548852, longitude: 139.784086 });
const fromLngLatPoint = fromLngLat({ longitude: 139.7671, latitude: 35.6812 });
// Það sama er aðgengilegt úr nafnrýminu
const same = GeoPoint.fromLatLong({ latitude: 35.6812, longitude: 139.7671 });
const url = tokyo.toUrlValue(6); // "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ð.
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.
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.
// Veitt sem viðbótarfall á GeoPointInterface val safe = raw.normalize() if (!raw.isValid()) return
let safe = raw.normalize()
guard raw.isValid() else { return }const 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.
// 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)let bounds = GeoRectBounds()
routePoints.forEach { bounds.extend(point: $0) }
mapState.fitBounds(bounds: bounds, padding: 48)
let fetchArea = bounds.expandedByDegrees(latPad: 0.05, lonPad: 0.05)import { createGeoRectBounds } from '@mapconductor/js-sdk-core';
const bounds = createGeoRectBounds();
routePoints.forEach(p => bounds.extend(p));
mapViewState.fitBounds(bounds, 48);
const fetchArea = bounds.expandedByDegrees(0.05, 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.
Færir myndavélina svo allur kassinn passi; padding er spássía á skjá í rökrænum pixlum.
Að setja mynd á kortið er tjáð sem mörkin sem hún þekur.
Kassinn sem myndavélin má ekki fara út fyrir (Android og React).
MapCameraPosition sem onCameraMove afhendir ber sýnilega kassann, svo þú getur sótt aðeins gögnin innan hans.
Metra-útgáfan; sjá landmælingasíðuna.
intersects stýrir ákvörðunum um flísagerð og endursókn.
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")
}