2013-09-24 12 views
13

में एमके मैप व्यू पर एमके रूट पर प्रदर्शित करना मैं दो बिंदुओं के बीच एमकेआरओटीई खोजने के लिए एमकेडिरेक्शन रिक्वेस्ट का उपयोग कर रहा हूं। प्रतिक्रिया इस कोड का उपयोग MKMapView पर प्रदर्शित किया जाएगा:आईओएस 7

MKDirections *directions = [[MKDirections alloc] initWithRequest:request]; 
    [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) 
    { 
     if (error) 
     { 
      NSLog(@"Error : %@", error); 
     } 
     else 
     { 
      [_mapView removeOverlays:_mapView.overlays]; 
      for (MKRoute *route in response.routes) 
      { 
       [_mapView insertOverlay:route.polyline atIndex:0 level:MKOverlayLevelAboveRoads]; 
      } 
     } 
    }]; 

मेरे सवाल है, अगर वहाँ MKRoute यदि उपयोगकर्ता बढ़ रहा है अद्यतन करने के लिए एक उचित तरीका है। एटीएम मैं

- (void)mapView:(MKMapView *)aMapView didUpdateUserLocation:(MKUserLocation *)aUserLocation 

उपयोग कर रहा हूँ आंदोलन पहचान करने के लिए और इस विधि में मैं MKRoute ओवरले को दूर करने और गणना और नए उपयोगकर्ता स्थान के साथ नए जोड़ रहा। मुझे आश्चर्य है कि मार्ग को गणना करने का एक तरीका है और ओवरले प्रोग्रामेटिक रूप से अपडेट करना है?

संपादित करें: मैं सेब देव डॉक्स में https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKRouteStep_class/Reference/Reference.html#//apple_ref/occ/cl/MKRouteStep पाया। मैं मैं

for (MKRoute *route in response.routes) 
{ 
    for (MKRouteStep *step in route.steps) 
    { 
     [_mapView insertOverlay:step.polyline atIndex:0 level:MKOverlayLevelAboveRoads]; 
    } 
} 

लेकिन मैं कैसे पहचान सकते हैं जो चरणों के पीछे वास्तविक उपयोगकर्ता स्थान हैं की तरह कुछ करने के लिए लगता है?

संपादित करें: एक अन्य विकल्प एक टाइमर का उपयोग करने के लिए हो सकता है जो ईवेंट को ट्रिगर करता है (पुराने ओवरले को हटाकर और नया जोड़ रहा है)। तुम क्या सोचते हो?

[NSTimer scheduledTimerWithTimeInterval:15 target:self selector:@selector(addRouteOverlay) userInfo:nil repeats:YES]; 
+1

मैं टाइमर की अनुशंसा नहीं करता क्योंकि आप उपयोगकर्ता को स्थानांतरित नहीं होने के बावजूद मार्ग को अनावश्यक रूप से अपडेट कर सकते हैं। सरल विकल्प यह किया गया है UpUpdateUserLocation में करना, लेकिन केवल तभी जब उपयोगकर्ता अंतिम मीटर के बाद से एक्स मीटर स्थानांतरित कर दिया गया है। असंबद्ध लेकिन यदि आप प्रश्न में सादा "आईओएस" टैग जोड़ते हैं तो यह अधिक ध्यान दे सकता है (साथ ही सिंटैक्स-कोड को हाइलाइट करना)। – Anna

+0

मैंने पहले ऐसा कुछ किया है, लेकिन यह सुनिश्चित नहीं है कि आप केवल रूट मानचित्र बनाना चाहते हैं जब उपयोगकर्ता चल रहा हो। आप पहली बार शुरुआत और अंत बिंदु के बीच मानचित्र पर एमकेपोलीलाइन के साथ मार्ग बना सकते हैं।बाद में यदि उपयोगकर्ता चलता है, तो आप डिफ़ॉल्ट वर्तमान स्थान प्रतीक (नीला रंग छोटा सर्किल) के साथ मानचित्र पर उपयोगकर्ता का अद्यतन स्थान दिखा सकते हैं। कृपया स्पष्ट करें ताकि मैं कुछ सुझाव दे सकूं, –

+0

उपयोगकर्ता का स्थान सही ढंग से प्रदर्शित किया गया है। जैसे ए-> बी-> सी से रूट के लिए उपयोगकर्ता का स्थान ए पर है और मार्ग सही तरीके से प्रदर्शित होता है लेकिन जब उपयोगकर्ता बी में स्थानांतरित होता है तो मार्ग अभी भी ए-> सी से प्रदर्शित होता है, बी-> सी से नहीं। – matthias

उत्तर

0

लिंक नीचे एक MKMapView पर निर्देशों को दिखाने के लिए नमूना कोड शामिल हैं, हम केवल उस में अक्षांश और देशांतर मूल्यों उत्तीर्ण करनी होगी।

https://github.com/kadirpekel/MapWithRoutes

+0

एक आकर्षण की तरह काम करता है जो मैं इस –

+3

के लिए खोज रहा था यह सवाल का जवाब नहीं देता है। लिंक दिशा-निर्देश प्राप्त करने के लिए Google एपीआई का उपयोग करके 2 साल पुरानी परियोजना को इंगित करता है। सवाल आईओएस 7 में एमकेडिरेक्शन से परिणामों का कुशलता से पुन: उपयोग करने के तरीके के बारे में है। ओपी पहले ही जानता है कि पहली जगह दिशा कैसे प्राप्त करें। – Anna

+0

@ अन्ना यह एक अन्य विकल्प है जिसका उपयोग तब तक किया जा सकता है जब तक हम इस समस्या का समाधान न करें .. :) – Ashutosh

-2

मैं इस तरह का काम करने के लिए एक अच्छा समाधान है।

बस, लेट (जैसे -34.059811) और लंबे (जैसे 150.769238) के साथ गंतव्य स्थान प्राप्त करें।

CLLocation *destinationLocation=[[CLLocation alloc] initWithLatitude:-34.059811 longitude:150.769238]; 

और पारित इस नीचे यूआरएल स्ट्रिंग में लंबे अक्षांश, आप सीधे पारित कर सकते हैं इस लंबी श्रृंखला में अक्षांश,

NSString* strLink = [NSString stringWithFormat:@"http://maps.google.com/maps?saddr=Current+Location&daddr=%f,%f",destinationLocation.latitude,destinationLocation.longitude]; 

अब एक यूआरएल बनाने के लिए,

NSURL *url = [NSURL URLWithString: [strLink stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; 

ओपन में इस यूआरएल ब्राउज़र या UIWebView और उस पृष्ठ को टाइमर के साथ रीफ्रेश करें और जादू देखें, मार्ग स्वचालित स्थान और गंतव्य स्थान के अनुसार स्वचालित रूप से अपडेट हो जाएगा, आप ' हर बार वर्तमान स्थान को अद्यतन करने की जरूरत नहीं है।

धन्यवाद।