मुझे MKCoordinateSpan बनाने की आवश्यकता है जो लगभग 500 मीटर है।मीटर में MKCoordinateSpan?
एमकेसीऑर्डिनेटस्पैन कन्स्ट्रक्टर में पास करने के लिए मानों की गणना कैसे करूं?
किसी भी प्रोग्रामिंग (Obj-C, .Net) भाषा में उत्तर ठीक हैं।
मुझे MKCoordinateSpan बनाने की आवश्यकता है जो लगभग 500 मीटर है।मीटर में MKCoordinateSpan?
एमकेसीऑर्डिनेटस्पैन कन्स्ट्रक्टर में पास करने के लिए मानों की गणना कैसे करूं?
किसी भी प्रोग्रामिंग (Obj-C, .Net) भाषा में उत्तर ठीक हैं।
एक अन्य विकल्प का उपयोग करने के लिए है MapKit के MKCoordinateRegionMakeWithDistance
समारोह:
MKCoordinateRegion rgn = MKCoordinateRegionMakeWithDistance(
CLLocationCoordinate2DMake(someLatitude, someLongitude), 500, 500);
MKCoordinateSpan
rgn.span
में होगा।
जब तक आपको बड़ी सटीकता की आवश्यकता न हो, तो आप अनुमान के साथ इसे अधिक आसान बना सकते हैं। पहली समस्या 500 मीटर का प्रतिनिधित्व अक्षांश की डिग्री के अंश को खोजने के लिए है। अक्षांश की डिग्री किसी भी स्थान पर स्थिर है, लगभग 111 किमी। तो 500 मीटर .0045 डिग्री अक्षांश है।
फिर यह कठिन हो जाता है क्योंकि एक डिग्री की लंबाई की लंबाई अलग-अलग होती है, जहां आप हैं। यह
जहां अल्फा पृथ्वी के ध्रुवीय त्रिज्या, 6,378,137km, बी/एक 0.९,९६,६४,७१९ (सभी जीपीएस डिवाइस द्वारा उपयोग में WGC84 उपगोल मॉडल के लिए उपयोग में एक निरंतर) और जहां फ़ाई है है के साथ अनुमान लगाया जा सकता अक्षांश की डिग्री है।
एक सेकंड के लिए कल्पना करें कि आप मेलबर्न में 37.783 डिग्री एस के अक्षांश के साथ भाग्यशाली हैं। उत्तर या दक्षिण यहां कोई फर्क नहीं पड़ता। बीटा 37.68 99 होने के लिए काम करता है और बाकी हिस्सों में अनुदैर्ध्य डिग्री 88 किमी की लंबाई देने के लिए हल होती है। तो 500 मीटर एक डिग्री के .0057 है। मेलबोर्न के लिए
परिणाम - MKCoordinateSpan melbourne500MeterSpan = MKCoordinateSpanMake(.0045, .0057);
आप अपने जवाब और अपने कोड with this online calculator
wiki article देशांतर पर इस पर एक बहुत अधिक विस्तार है जाँच कर सकते हैं (और यह यहाँ छवियों के स्रोत)
कोड:
#define EARTH_EQUATORIAL_RADIUS (6378137.0)
#define WGS84_CONSTANT (0.99664719)
#define degreesToRadians(x) (M_PI * (x)/180.0)
// accepts decimal degrees. Convert from HMS first if that's what you have
double spanOfMetersAtDegreeLongitude(double degrees, double meters) {
double tanDegrees = tanf(degreesToRadians(degrees));
double beta = tanDegrees * WGS84_CONSTANT;
double lengthOfDegree = cos(atan(beta)) * EARTH_EQUATORIAL_RADIUS * M_PI/180.0;
double measuresInDegreeLength = lengthOfDegree/meters;
return 1.0/measuresInDegreeLength;
}
वाह। अब यह एक जवाब है। बहुत बुरा मैं केवल आपको एक अंगूठे दे सकता हूं ... –
कृपया इस उत्तर का उपयोग न करें। अंक प्राप्त करने के रूप में संतुष्ट होने के नाते, एमके कॉर्डिनेट रीजन मेकविथडिस्टेंस सही तरीका है। –
MonoTouch में, तो इस समाधान का उपयोग आप इस सहायक विधि का उपयोग कर सकते हैं:
public static void ZoomToCoordinateAndCenter (MKMapView mapView, CLLocationCoordinate2D coordinate, double meters, bool showUserLocationToo, bool animate)
{
if (!coordinate.IsValid())
return;
mapView.SetCenterCoordinate (coordinate, animate);
mapView.SetRegion (MKCoordinateRegion.FromDistance (coordinate, meters, meters), animate);
}
-1 मुझे Google मोनो टच को मजबूर करने के लिए। – sean
एक मोनोचouch समाधान के साथ कुछ भी गलत नहीं है! –
+1, यह आसान तरीका है - मुझे उस बारे में पता नहीं था! –
यह वास्तव में अच्छा है – Eugene