2009-09-19 14 views
8

के रूप में दिखाए जाने वाले निर्देशांक मैं इस दृश्य के साथ उपयोगकर्ताओं को वर्तमान अक्षांश और देशांतर प्राप्त करने की कोशिश कर रहा हूं। जिसके परिणामस्वरूप नक्शा सही ढंग से वर्तमान स्थान का संकेत तथापि NSLog लगातार चलता है:आईफोन वर्तमान उपयोगकर्ता स्थान निर्देशांक (0,0)

2009-09-19 16:45:29.765 Mapper[671:207] user latitude = 0.000000 
2009-09-19 16:45:29.772 Mapper[671:207] user longitude = 0.000000 

किसी को भी पता है कि मैं यहाँ क्या याद आ रही है? आपकी सहायता के लिये पहले से ही धन्यवाद!

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [mapView setMapType:MKMapTypeStandard]; 
    [mapView setZoomEnabled:YES]; 
    [mapView setScrollEnabled:YES]; 
    [mapView setShowsUserLocation:YES]; 

    CLLocation *userLoc = mapView.userLocation.location; 
    CLLocationCoordinate2D userCoordinate = userLoc.coordinate; 

    NSLog(@"user latitude = %f",userCoordinate.latitude); 
    NSLog(@"user longitude = %f",userCoordinate.longitude); 
} 

उत्तर

9

नक्शा उपयोगकर्ताओं को तब तक स्थान प्राप्त करने की कोशिश नहीं करेगा जब तक कि यह वास्तव में प्रदर्शित नहीं होता है, जहां तक ​​मुझे पता है। इसका एक अच्छा परीक्षण यह है कि, आप संवाद पूछते हैं कि क्या ऐप के लिए उपयोगकर्ता स्थान प्राप्त करना ठीक है? मेरे अनुभव में जो हमेशा स्क्रीन पर मानचित्र के शो के बाद आता है।

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

2

CLLocation पर दस्तावेज़ से, अगर क्षैतिज सटीकता या ऊर्ध्वाधर सटीकता नकारात्मक है, यह एक मूल्य नहीं मिल रहा है इसका मतलब है। मुझे संदेह है कि यहां क्या हो रहा है। ध्यान रखें कि यदि आप एक बार देखते हैं, तो यह सटीकता परिणाम में सुधार करने से पहले आपको अनुमानित अंतिम ज्ञात स्थान दे सकता है।

क्षैतिज शुद्धता समन्वय के अक्षांश और देशांतर चक्र के केंद्र की पहचान करने और यह मान कि वृत्त की त्रिज्या इंगित करता है। एक नकारात्मक मान इंगित करता है कि समन्वय अक्षांश और देशांतर अमान्य हैं।

+0

ऐसा है तो जिस तरह से वर्तमान स्थान के निर्देशांक प्राप्त करने के लिए है क्या के बाद seletor कारगर साबित होंगे? – ennuikiller

+0

यदि आप केवल वर्तमान स्थान ढूंढना चाहते हैं, तो आपको मानचित्र API का उपयोग करने की आवश्यकता नहीं है। आप सीधे कोर स्थान से पूछ सकते हैं। http://developer.apple.com/mac/library/documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html – AlBlue

1

आपको MapKit के बजाय कोरलोकेशन से समन्वय प्राप्त करना चाहिए। MapView उपयोगकर्ता का स्थान प्रदर्शित करेगा के बाद यह वास्तव में वर्तमान स्थान मिला है। इससे पहले स्थान निर्धारित किया जाता है, अक्षांश और देशांतर दोनों 0. 3

की तैयारी में हैं आप एक CLLocationManager instace, प्रतिनिधि सेट बनाना चाहिए। जब ​​स्थान निर्धारित किया जाता है आपको सूचित किया जाएगा।

4

यदि आप उपयोगकर्ता को डीडलोड() विधि में समन्वय प्राप्त करने का प्रयास करते हैं, तो यह हमेशा 0,0 परिणाम देगा, क्योंकि यह अभी तक प्रारंभ नहीं हुआ है।

आपको "जहां मैं हूं" नमूना कोड फॉर्म ऐप्पल साइट पर एक नज़र डालना चाहिए। यह बताता है कि आपको क्या चाहिए। आपको CLLocationManager कक्षा का उपयोग करने की आवश्यकता है। आपको विधि

*-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation* 

उपयोगकर्ता विधि अपडेट होने पर यह विधि स्वचालित रूप से कॉल की जाएगी। यदि आप सिम्युलेटर का उपयोग कर रहे हैं, तो इस विधि को केवल एक बार बुलाया जाएगा और यह कुछ डिफ़ॉल्ट समन्वय वापस करेगा।

उम्मीद है कि यह मदद करता है।

-1

अपने viewDidLoad अनुभाग

mapView.showsUserLocation = YES; 
+1

यह अप्रासंगिक है। – Hammer

1

रूप Kendall कहा करने के लिए इस जोड़ें, MKMapView एक भी नहीं है उपयोगकर्ता स्थान लोड होने तक समाप्त होता है, और दृश्यडिडलोड विधि आमतौर पर अनुरोध करने के लिए बहुत जल्दी होती है। CoreLocation का उपयोग करने का एक आसान तरीका MKMapViewDelegate विधि -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation को कार्यान्वित करना है। CLLocationManager से निपटने के बिना, यह आपको जितनी जल्दी हो सके उपयोगकर्ता का स्थान देगा।

+0

यह एक सरल और परीक्षण ठीक दिखता है। – Hammer

0

CLLocation *userLoc = mapView.userLocation.location; 
CLLocationCoordinate2D userCoordinate = userLoc.coordinate; 

NSLog(@"user latitude = %f",userCoordinate.latitude); 
NSLog(@"user longitude = %f",userCoordinate.longitude); 

ViewdidAppear में इस प्रयास करें: या कॉल देरी

संबंधित मुद्दे