प्रक्षेपण और ज़ूम
गोल पृथ्वी को समतल स्क्रीन पर प्रक्षेपित करना प्रक्षेपण है, और यह बताना कि कितना करीब ज़ूम किया गया है, वह ज़ूम है। प्रदाता के अनुसार दोनों की परिभाषाओं में भिन्नता होती है, लेकिन MapConductor 3 प्लेटफ़ॉर्म्स पर समान स्थिरांक और समान सूत्र साझा करता है और प्रकाशित मानों को एक ही पैमाने पर लाता है। कैमरे के उपयोग के लिए कैमरे के पृष्ठ को देखें, यहाँ उसके नीचे के मानों को संभाला जाता है।
01 · पृथ्वी के स्थिरांक
प्रक्षेपण, भौगोलिक गणना और टाइल गणना सभी Earth के स्थिरांकों का संदर्भ लेते हैं।
02 · प्रक्षेपण
प्रक्षेपण प्रकार में केवल project और unproject दो प्रकार होते हैं। निर्देशांकों को समतल निर्देशांकों (Offset) में गिराना और फिर वापस लाना एक सममित ऑपरेशन है। दो कार्यान्वयन उपलब्ध हैं।
मीटर में वेब मर्केटर
EPSG:3857 के समान, ±20,037,508.34 m के समतल पर प्रक्षेपित करता है। टाइल सीमाओं की गणना और स्क्रीन पर दूरी को मीटर में बदलने की प्रक्रिया में उपयोग होता है।
256 पिक्सेल टाइल निर्देशांक
ज़ूम 0 की एक टाइल (256×256) को इकाई के रूप में उपयोग करने वाले निर्देशांक में प्रक्षेपित करता है। टाइल छवियाँ उत्पन्न करने वाले रेंडरर द्वारा उपयोग किया जाने वाला निर्देशांक प्रणाली है।
interface ProjectionInterface {
fun project(position: GeoPointInterface): Offset
fun unproject(point: Offset): GeoPointInterface
}
val meters = WebMercator.project(tokyo) // x, y मीटर में हैं
val tile = WGS84.project(tokyo) // 0 से 256 तक के टाइल निर्देशांक// iOS पर प्रोजेक्शन टाइल और स्थानिक इंडेक्स के भीतर रहता है। // ऐप की ओर से निर्देशांक ⇄ स्क्रीन के रूपांतरण के लिए 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 } मीटर में हैं
const back = WebMercator.unproject(meters);
const tile = WGS84.project(tokyo); // 0 से 256 तक के टाइल निर्देशांकजब स्क्रीन पर पिक्सेल और निर्देशांकों के बीच परस्पर रूपांतरण की आवश्यकता होती है, तो प्रक्षेपण के बजाय MapViewHolder के toScreenOffset / fromScreenOffset का उपयोग करें। वास्तव में प्रदर्शित कैमरे का झुकाव और घुमाव इसमें दर्शाया जाता है।
03 · ज़ूम और ऊंचाई रूपांतरण
2D टाइल-आधारित प्रदाता ज़ूम स्तर से, और 3D आधारित प्रदाता कैमरा ऊंचाई या दृश्य दूरी से पैमाना व्यक्त करते हैं। MapConductor इन दोनों को परस्पर रूपांतरित करता है और ऐप को हमेशा समान ज़ूम पैमाने पर दिखाता है। रूपांतरण प्रत्येक प्रदाता के लिए एक वर्ग, एक सामान्य अमूर्त वर्ग को विरासत में लेने के रूप में लागू किया जाता है।
रूपांतरण में अक्षांश और झुकाव शामिल होता है। वेब मर्केटर उच्च अक्षांश पर मानचित्र को अधिक बड़ा करता है, इसलिए समान ज़ूम पर भी भूमध्य रेखा और उच्च अक्षांश पर आवश्यक कैमरा ऊंचाई में कई गुना अंतर होता है।
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;
}कन्वर्टर प्रत्येक प्रदाता के पैकेज में होता है (ZoomAltitudeConverter)। ऐप को सीधे कॉल करने की आवश्यकता नहीं है, लेकिन अपना स्वयं का 3D प्रतिनिधित्व बनाते समय इसका उपयोग किया जा सकता है।
// 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 · सीमा मान
रूपांतरण में उपयोग होने वाला स्थिरांक है। ध्रुवों के पास या सीधे ऊपर से नीचे देखने पर सूत्र अपसारित न हो, इसलिए cos की न्यूनतम सीमा भी स्थिरांक के रूप में तय की गई है।
zoom 0 का आधार ऊँचाई केवल सैद्धांतिक रूप से तय की गई वैल्यू नहीं है। एक ही ज़ूम निर्दिष्ट करते समय वास्तव में दिखाई देने वाली सीमा को प्रत्येक इंजन में व्यावहारिक रूप से मापा गया और क्षेत्रफल मेल खाए, इस प्रकार कैलिब्रेट करने का परिणाम है। ज़ूम 1 स्तर पर ऊँचाई आधी हो जाती है (ZOOM_FACTOR = 2) — यह संबंध और केवल यह आधार मान स्थिरांक हैं।