Vörpun og aðdráttur
Vörpun fletur hnöttinn út á flatan skjá; aðdrátturinn segir hve nálægt þú ert. Þjónustuaðilar eru ósammála um hvort tveggja, svo MapConductor deilir einu safni fasta og formúla milli vettvanganna þriggja og fellir gildin sem birtast á einn kvarða. Notkun myndavélarinnar er á myndavélarsíðunni; hér fjöllum við um tölurnar undir henni.
01 · Fastar jarðar
Vörpun, landmælingar og flísareikningur lesa allt úr Earth.
02 · Varpanir
Vörpun hefur nákvæmlega tvær aðgerðir: project og unproject — að fletja hnit út í Offset á plani og taka það til baka aftur. Tvær útfærslur fylgja SDK-inu.
Web Mercator, í metrum
Varpar á planið ±20.037.508,34 m, það sama og EPSG:3857. Notað í reikning á flísamörkum og til að umreikna vegalengdir á skjá í metra.
256 pixla flísarými
Varpar inn í hnitarými einu flísarinnar á aðdrætti 0 (256×256). Þetta er rýmið sem flísateiknararnir vinna í.
interface ProjectionInterface {
fun project(position: GeoPointInterface): Offset
fun unproject(point: Offset): GeoPointInterface
}
val meters = WebMercator.project(tokyo) // x og y eru í metrum
val tile = WGS84.project(tokyo) // Flísahnit frá 0 upp í 256// Á iOS býr vörpunin inni í útfærslu flísa og rúmvísis. // Fyrir umreikning hnit ⇄ skjár úr forritinu, notaðu MapViewHolder. let offset = holder.toScreenOffset(position: tokyo) let point = holder.fromScreenOffsetSync(offset: tapLocation)
import { WebMercator, WGS84, Earth } from '@mapconductor/js-sdk-core';
const meters = WebMercator.project(tokyo); // { x, y } eru í metrum
const back = WebMercator.unproject(meters);
const tile = WGS84.project(tokyo); // Flísahnit frá 0 upp í 256Þegar þú þarft pixla frekar en plan, notaðu toScreenOffset / fromScreenOffset á MapViewHolder í stað vörpunar — þau taka tillit til halla og stefnu eins og þau eru raunverulega á skjánum.
03 · Aðdráttur og hæð
Flísabundnir 2D-þjónustuaðilar tjá kvarða sem aðdráttarstig; 3D-þjónustuaðilar sem hæð myndavélar eða fjarlægð. MapConductor umreiknar á milli svo forritið sjái alltaf einn aðdráttarkvarða. Hver þjónustuaðili útfærir einn umreiknara sem erfir frá sameiginlega óhlutbundna grunninum.
Breiddargráða og halli eru hluti af umreikningnum: Web Mercator stækkar í átt að pólunum, svo sama aðdráttarstig krefst margfalt annarrar hæðar myndavélar við miðbaug og á hárri breiddargráðu.
abstract class AbstractZoomAltitudeConverter(
protected val zoom0Altitude: Double,
) {
abstract fun zoomLevelToAltitude(zoomLevel: Double, latitude: Double, tilt: Double): Double
abstract fun altitudeToZoomLevel(altitude: Double, latitude: Double, tilt: Double): Double
}public protocol ZoomAltitudeConverterProtocol {
var zoom0Altitude: Double { get }
func zoomLevelToAltitude(zoomLevel: Double, latitude: Double, tilt: Double) -> Double
func altitudeToZoomLevel(altitude: Double, latitude: Double, tilt: Double) -> Double
}export abstract class AbstractZoomAltitudeConverter {
constructor(protected readonly zoom0Altitude: number =
AbstractZoomAltitudeConverter.DEFAULT_ZOOM0_ALTITUDE) {}
abstract zoomLevelToAltitude(params: { zoomLevel: number; latitude: number; tilt: number }): number;
abstract altitudeToZoomLevel(params: { altitude: number; latitude: number; tilt: number }): number;
}Hver pakki þjónustuaðila kemur með sinn eigin ZoomAltitudeConverter. Forritið þitt kallar hann yfirleitt ekki, en hann er til taks ef þú ert að smíða þína eigin 3D-framsetningu.
// The same camera position handed to both states
val shared = MapCameraPosition(
position = GeoPoint.fromLatLong(35.6812, 139.7671),
zoom = 14.0,
)
val maplibre = rememberMapLibreMapViewState(cameraPosition = shared)
val googlemaps = rememberGoogleMapViewState(cameraPosition = shared)
// Move one and the same value goes to the other
Row {
MapLibreMapView(
state = maplibre,
modifier = Modifier.weight(1f),
onCameraMoveEnd = { googlemaps.moveCameraTo(it) },
)
GoogleMapView(
state = googlemaps,
modifier = Modifier.weight(1f),
onCameraMoveEnd = { maplibre.moveCameraTo(it) },
)
}04 · Mörk
Þetta eru fastarnir sem umreikningurinn vinnur með. Neðri mörk á kósínusunum halda formúlunum frá því að springa nálægt pólunum eða þegar horft er beint niður.
Viðmiðunarhæðin fyrir aðdrátt 0 var ekki leidd út á blaði: hún er niðurstaða þess að mæla svæðið sem hver vél sýnir raunverulega við tiltekinn aðdrátt og stilla þar til þau stemmdu. Einu fastarnir eru það samband og að eitt aðdráttarþrep helmingi hæðina (ZOOM_FACTOR = 2).