GeoPoint और रेंज (GeoRectBounds)
MapConductor का निर्देशांक प्रकार केवल GeoPoint है। प्रदाता-विशिष्ट LatLng, CLLocationCoordinate2D, LngLat के बारे में जानने की आवश्यकता नहीं है। आयताकार रेंज GeoRectBounds संभालता है, और इसे दक्षिण-पश्चिम और उत्तर-पूर्व के 2 बिंदुओं से व्यक्त किया जाता है। दोनों का सदस्य संरचना 3 प्लेटफ़ॉर्म पर समान है।
01 · GeoPoint
अक्षांश, देशांतर, और ऊंचाई — इन तीन के साथ एक अपरिवर्तनीय मान है। ऊंचाई वैकल्पिक है, और यदि छोड़ा जाता है तो इसे 0 के रूप में माना जाता है। समतुल्य तुलना और हैश अक्षांश-देशांतर (और ऊंचाई) की सामग्री पर निर्भर करते हैं, इसलिए आप इसे सीधे मैप की कुंजी या अंतर निर्धारण के लिए उपयोग कर सकते हैं।
बनाने के 3 तरीके हैं। कंस्ट्रक्टर, अक्षांश-देशांतर के क्रम को स्पष्ट करने वाला फ़ैक्टरी, और अन्य निर्देशांक प्रकारों से रूपांतरण। देशांतर और अक्षांश की क्रम में गलती होने की संभावना को कम करने के लिए, उन्हें नाम से अलग किया गया है।
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"
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) // किसी भी ऐसे मान से जो 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 });
// वही चीज़ नेमस्पेस से भी मिल जाती है
const same = GeoPoint.fromLatLong({ latitude: 35.6812, longitude: 139.7671 });
const url = tokyo.toUrlValue(6); // "35.681200,139.767100"fromLatLng और fromLatLong, fromLngLat और fromLongLat एक ही चीज़ के उपनाम हैं। आप मौजूदा कोड की नामकरण शैली के अनुसार चुन सकते हैं।
02 · सामान्यीकरण और वैधता
बाहरी डेटा के निर्देशांक सीमा से बाहर हो सकते हैं, या देशांतर 180 डिग्री से अधिक हो सकता है। उन्हें सीमा के भीतर लाने के लिए normalize और सीमा के भीतर है या नहीं यह जांचने के लिए isValid प्रदान किया गया है।
श्रेणी में लाना
अक्षांश को −90〜90 में काट दिया जाता है और देशांतर को −180〜180 में लपेट दिया जाता है। देशांतर 200, −160 हो जाएगा।
श्रेणी के भीतर है या नहीं जाँचना
तभी true जब अक्षांश −90〜90 और देशांतर −180〜180 के बीच हों। आयात के समय सत्यापन के लिए उपयोग किया जाता है।
// 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
दक्षिण-पश्चिम और उत्तर-पूर्व के 2 बिंदुओं से एक आयताकार क्षेत्र दर्शाता है। बिंदुओं को जोड़ने पर पूरे क्षेत्र को घेरने वाली रेंज बढ़ती है, इसे एक "बढ़ता हुआ बक्सा" के रूप में उपयोग करना आधार है। बनाने के तुरंत बाद यह खाली (isEmpty) होता है, और southWest और northEast सेट नहीं हैं।
// पूरे रास्ते को समेटने वाली सीमा बनाकर कैमरा उसमें फ़िट करें
val bounds = GeoRectBounds()
routePoints.forEach { bounds.extend(it) }
mapViewState.fitBounds(bounds = bounds, padding = 48)
// दिखने वाले क्षेत्र से थोड़ा चौड़ा लाएँ
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 · सीमा का उपयोग कब करें
GeoRectBounds API के कई स्थानों पर दिखाई देता है। सभी एक ही प्रकार के होते हैं, इसलिए एक बार बनाई गई सीमा का पुनः उपयोग किया जा सकता है।
कैमरे को इस तरह निकट लाता है कि पूरी श्रेणी समा जाए। padding स्क्रीन की मार्जिन (तार्किक पिक्सल) है।
मानचित्र पर छवि चिपकाते समय, स्थान श्रेणी से निर्दिष्ट करते हैं।
आयत से कैमरे के लिए अप्रवेश्य श्रेणी निर्धारित करता है (Android·React)।
onCameraMove में प्राप्त MapCameraPosition में प्रदर्शित श्रेणी होती है। केवल उस श्रेणी का डेटा लाना संभव है।
मीटर इकाई में फैलाने का संस्करण। भौगोलिक गणना पृष्ठ देखें।
टाइल निर्माण और पुनः प्राप्ति के निर्णय के लिए intersects का उपयोग करता है।
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")
}