दस्तावेज़ / कोर / GeoPoint और रेंज

GeoPoint और रेंज (GeoRectBounds)

MapConductor का निर्देशांक प्रकार केवल GeoPoint है। प्रदाता-विशिष्ट LatLng, CLLocationCoordinate2D, LngLat के बारे में जानने की आवश्यकता नहीं है। आयताकार रेंज GeoRectBounds संभालता है, और इसे दक्षिण-पश्चिम और उत्तर-पूर्व के 2 बिंदुओं से व्यक्त किया जाता है। दोनों का सदस्य संरचना 3 प्लेटफ़ॉर्म पर समान है।

ANDROID
com.mapconductor.core.features
iOS
MapConductorCore
REACT
@mapconductor/js-sdk-core
प्लेटफ़ॉर्म

01 · GeoPoint

अक्षांश, देशांतर, और ऊंचाई — इन तीन के साथ एक अपरिवर्तनीय मान है। ऊंचाई वैकल्पिक है, और यदि छोड़ा जाता है तो इसे 0 के रूप में माना जाता है। समतुल्य तुलना और हैश अक्षांश-देशांतर (और ऊंचाई) की सामग्री पर निर्भर करते हैं, इसलिए आप इसे सीधे मैप की कुंजी या अंतर निर्धारण के लिए उपयोग कर सकते हैं।

सदस्य
Type
विवरण
latitude
Double
अक्षांश (डिग्री)। −90〜90।
longitude
Double
देशांतर (डिग्री)। −180〜180।
altitude
Double · 0.0
ऊंचाई (मीटर)। केवल 3D प्रदाता ही इसकी व्याख्या करते हैं।
wrap()
GeoPoint
अंतरराष्ट्रीय दिनांक रेखा को पार करके देशांतर को लपेटने वाला निर्देशांक लौटाता है।
toUrlValue(precision)
String · 6
"अक्षांश,देशांतर" स्ट्रिंग। डिफ़ॉल्ट 6 दशमलव स्थान हैं।

बनाने के 3 तरीके हैं। कंस्ट्रक्टर, अक्षांश-देशांतर के क्रम को स्पष्ट करने वाला फ़ैक्टरी, और अन्य निर्देशांक प्रकारों से रूपांतरण। देशांतर और अक्षांश की क्रम में गलती होने की संभावना को कम करने के लिए, उन्हें नाम से अलग किया गया है।

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)

// किसी भी ऐसे मान से जो GeoPointInterface लागू करता है
val copied = GeoPoint.from(anyPositionLike)

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

fromLatLng और fromLatLong, fromLngLat और fromLongLat एक ही चीज़ के उपनाम हैं। आप मौजूदा कोड की नामकरण शैली के अनुसार चुन सकते हैं।

02 · सामान्यीकरण और वैधता

बाहरी डेटा के निर्देशांक सीमा से बाहर हो सकते हैं, या देशांतर 180 डिग्री से अधिक हो सकता है। उन्हें सीमा के भीतर लाने के लिए normalize और सीमा के भीतर है या नहीं यह जांचने के लिए isValid प्रदान किया गया है।

normalize()

श्रेणी में लाना

अक्षांश को −90〜90 में काट दिया जाता है और देशांतर को −180〜180 में लपेट दिया जाता है। देशांतर 200, −160 हो जाएगा।

isValid()

श्रेणी के भीतर है या नहीं जाँचना

तभी true जब अक्षांश −90〜90 और देशांतर −180〜180 के बीच हों। आयात के समय सत्यापन के लिए उपयोग किया जाता है।

Kotlin · एक्सटेंशन फ़ंक्शन
// GeoPointInterface के एक्सटेंशन फ़ंक्शन के रूप में मिलता है
val safe = raw.normalize()
if (!raw.isValid()) return

03 · GeoRectBounds

दक्षिण-पश्चिम और उत्तर-पूर्व के 2 बिंदुओं से एक आयताकार क्षेत्र दर्शाता है। बिंदुओं को जोड़ने पर पूरे क्षेत्र को घेरने वाली रेंज बढ़ती है, इसे एक "बढ़ता हुआ बक्सा" के रूप में उपयोग करना आधार है। बनाने के तुरंत बाद यह खाली (isEmpty) होता है, और southWest और northEast सेट नहीं हैं।

सदस्य
विवरण
southWest / northEast
आयत के 2 कोने। खाली होने पर यह सेट नहीं होता है।
center
केंद्र। अंतरराष्ट्रीय दिनांक रेखा को पार करने वाले आयत के लिए भी यह सही ढंग से गणना करता है।
isEmpty
क्या अभी तक कोई भी बिंदु शामिल नहीं है।
extend(point)
आयत को उस बिंदु को शामिल करने के लिए विस्तारित करता है। देशांतर छोटे ओर की ओर फैलता है।
contains(point)
क्या बिंदु आयत के अंदर है।
intersects(other)
2 आयत ओवरलैप होते हैं या नहीं। इसका उपयोग टाइल या प्राप्ति सीमा के निर्धारण के लिए किया जाता है।
union(other)
2 आयतों दोनों को शामिल करने वाला एक नया आयत।
expandedByDegrees(lat, lon)
डिग्री में बाहर की ओर फैलाया गया एक नया आयत। मीटर में फैलाने के लिए Spherical का expandBounds का उपयोग करें।
toSpan()
अक्षांश अंतर और देशांतर अंतर को GeoPoint के रूप में लौटाता है।
toUrlValue(precision)
"दक्षिण-पश्चिम, उत्तर-पूर्व" स्ट्रिंग। डिफ़ॉल्ट 6 दशमलव स्थान है।
GeoRectBounds · Kotlin
// पूरे रास्ते को समेटने वाली सीमा बनाकर कैमरा उसमें फ़िट करें
val bounds = GeoRectBounds()
routePoints.forEach { bounds.extend(it) }

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

// दिखने वाले क्षेत्र से थोड़ा चौड़ा लाएँ
val fetchArea = bounds.expandedByDegrees(latPad = 0.05, lonPad = 0.05)

04 · सीमा का उपयोग कब करें

GeoRectBounds API के कई स्थानों पर दिखाई देता है। सभी एक ही प्रकार के होते हैं, इसलिए एक बार बनाई गई सीमा का पुनः उपयोग किया जा सकता है।

fitBounds()

कैमरे को इस तरह निकट लाता है कि पूरी श्रेणी समा जाए। padding स्क्रीन की मार्जिन (तार्किक पिक्सल) है।

GroundImageState

मानचित्र पर छवि चिपकाते समय, स्थान श्रेणी से निर्दिष्ट करते हैं।

CameraRestriction · restrictBounds

आयत से कैमरे के लिए अप्रवेश्य श्रेणी निर्धारित करता है (Android·React)।

visibleRegion.bounds

onCameraMove में प्राप्त MapCameraPosition में प्रदर्शित श्रेणी होती है। केवल उस श्रेणी का डेटा लाना संभव है।

expandBounds()

मीटर इकाई में फैलाने का संस्करण। भौगोलिक गणना पृष्ठ देखें।

GeoJSON / टाइल

टाइल निर्माण और पुनः प्राप्ति के निर्णय के लिए intersects का उपयोग करता है।

वीडियो में दिखाया गया कार्यान्वयन · 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")
}
सैंपल वीडियो · fitBounds से सीमा में फिट करें
वीडियो अभी नहीं बनाएकाधिक मार्कर्स को शामिल करने वाली सीमा की गणना करें और fitBounds के साथ कैमरा ज़ूम करते हुए दिखाई देता है। एनीमेशन की मध्यवर्ती प्रगति मुख्य बिंदु है।

संबंधित पेज