2010-03-10 14 views
5

का उपयोग करके दूरी निर्धारित करना मैपकिट के साथ निर्धारित 1000 फीट या 1/2 मील दूरी कैसा है? या तो कुछ पिन या दो पिन के बीच की दूरी से एक त्रिज्या।मैपकिट

उदाहरण के लिए, मैं पिन ए। पिन बी, सी, और डी पर मानचित्र को पिन करता हूं पिन ए बी और सी से विभिन्न दूरी पर मानचित्र पर भी ए से 1/2 मील के भीतर हैं लेकिन डी 1 मील है दूर। मैं जानना चाहता हूं कि बी और सी ए से 1/2 मील के भीतर हैं I मैं इसकी गणना कैसे कर सकता हूं?

+0

आप अपने प्रश्न और व्याख्या कर सकते हैं, इसलिए हम सटीक आवश्यकता को समझ सकता हूँ? –

+0

मैंने सवाल संपादित किया है। मुझे बताएं यदि आपको अधिक जानकारी की जरूरत है। – user230949

उत्तर

13

चूंकि आपने कहा है कि दो अलग-अलग बिंदु "पिन" हैं, मुझे लगता है कि आप एमकेपीनएनोटेशन व्यू (या कुछ अन्य एनोटेशन व्यू) का उपयोग कर रहे हैं। यदि नहीं, तो आपको स्थान किसी अन्य तरीके से प्राप्त करना होगा।

आप इन स्थानों के लिए एनोटेशन वस्तुओं की ओर इशारा है, तो आप आसानी से उन पर -coordinate कॉल कर सकते हैं, इन निर्देशांकों से CLLocations (-initWithLatitude:longitude: का प्रयोग करके) बनाते हैं और फिर मीटर में दूरी को पुनः प्राप्त करने विधि -getDistanceFrom का उपयोग करें। वहां से, यह मील के लिए एक आसान रूपांतरण है। सभी से कहा कोड कुछ इस तरह दिखेगा:

CLLocationCoordinate2D pointACoordinate = [pointAAnnotation coordinate]; 
CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude]; 
CLLocationCoordinate2D pointBCoordinate = [pointBAnnotation coordinate]; 
CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude]; 
double distanceMeters = [pointALocation getDistanceFrom:pointBLocation]; 
double distanceMiles = (distanceMeters/1609.344); 

आप मील में दूरी के साथ खत्म कर देंगे, और वहाँ से तुलना कर सकते हैं। उम्मीद है की यह मदद करेगा।

+0

ठीक है लेकिन इस तरह हम उन दो बिंदुओं के बीच सीधी दूरी प्राप्त करते हैं ... वास्तव में यह वास्तविक दूरी कैसे प्राप्त करें .... – AJPatel

12

getDistanceFrom अब बहिष्कृत किया गया है, इसलिए ऐसा करने के लिए यहां कोई भी वैकल्पिक उत्तर दिया गया है।

CLLocationCoordinate2D pointACoordinate = [pointAAnnotation coordinate]; 
CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude]; 

CLLocationCoordinate2D pointBCoordinate = [pointBAnnotation coordinate]; 
CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude]; 

float distanceMeters = [pointALocation distanceFromLocation:pointBLocation]; 
float distanceMiles = (distanceMeters/1609.344); 

[pointALocation release]; 
[pointBLocation release]; 

जैसा कि ऊपर, आप double के बजाय float इस्तेमाल कर सकते हैं और आप किसी पूर्णांक पर परिणाम डाली सकता है अगर आप float तो तरह की शुद्धता की आवश्यकता नहीं है:

int distanceCastToInt = (int) [pointALocation distanceFromLocation:pointBLocation]; 

int है आसान अगर आप एनोटेशन में दूरी का मोटा विचार देना चाहते हैं तो:

pointAAnnotation.title = @"Point A"; 
pointAAnnotation.subtitle = [NSString stringWithFormat: @"Distance: %im",distanceCastToInt]; 

टी का उपशीर्षक वह एनोटेशन उदाहरण के लिए "दूरी: 50 मीटर" पढ़ेगा।

0

यह स्विफ्ट है दिया जवाब के 3 बराबर:

let pointACoordinate = pointAAnnotation.coordinate 
let pointALocation = CLLocation(latitude: pointACoordinate.latitude, longitude: pointACoordinate.longitude) 
let pointBCoordinate = pointBAnnotation.coordinate 
let pointBLocation = CLLocation(latitude: pointBCoordinate.latitude, longitude: pointBCoordinate.longitude) 
let distanceMeters = pointALocation.distance(from: pointBLocation) 
let distanceMiles = (distanceMeters/1609.344) 
संबंधित मुद्दे