2016-02-05 7 views
6

मैं उपयोगकर्ता के स्थान के अक्षांश और देशांतर को खोजने का प्रयास कर रहा हूं ताकि मैं उपयोगकर्ता को मानचित्र को viewdidload में केंद्रित कर सकूं।आईओएस एसडीके के लिए मैपबॉक्स में उपयोगकर्ता स्थान का उपयोग करके मुझे सही स्थान डेटा कैसे प्राप्त करना चाहिए? (स्विफ्ट)

मैंने लागू किया है जो सही कोड प्रतीत होता है लेकिन उपयोगकर्ता डेटा (अक्षांश) और उपयोगकर्ता लॉन (रेखांश) के मान बंद हैं।

एनबी। किसी और के रूप में मुझे एक ही समस्या थी, लेकिन उसके जवाब का समाधान कभी नहीं किया गया था: Mapbox iOS8 Swift mapView.showUsersLocation

import Mapbox 

class ViewController: UIViewController, MGLMapViewDelegate, CLLocationManagerDelegate { 

// let locationManager = CLLocationManager() 

    @IBOutlet weak var mapView: MGLMapView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Initalise map's center coordinate as vancouver 
     mapView.setCenterCoordinate(CLLocationCoordinate2D(latitude: 49.283382, 
      longitude: -123.117394), 
      zoomLevel: 15, animated: false) 
     view.addSubview(mapView) 

     // Set the delegate property of our map view to self after instantiating it. 
     mapView.delegate = self 

     // User location 
     mapView.showsUserLocation = true 

     let userLoc = mapView.userLocation! 
     userLoc.title = "Hello" 
     userLoc.subtitle = "I am here!" 

     let userLat = userLoc.coordinate.latitude 
     let userLon = userLoc.coordinate.longitude 

     print(userLat, userLon) 

     /* 
     self.locationManager.requestAlwaysAuthorization() 
     if CLLocationManager.locationServicesEnabled() { 
      locationManager.delegate = self 
      locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters 
      locationManager.startUpdatingLocation() 
     }*/ 

    } 

    func mapView(mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool { 
     return true 
    } 

} 

परिणामस्वरूप प्रिंट:

3.40282346638529e+38 3.40282346638529e+38 

अजीब बात यह है कि एनोटेशन ठीक काम करता है, और है, जब मैं अपने स्थान पर क्लिक करें मुझे शीर्षक और उपशीर्षक मिलता है।

उत्तर

9

उपयोगकर्ता के स्थान पर मानचित्र को केन्द्रित करने का सबसे आसान तरीका mapView.userTrackingMode = .Follow (MGLUserTrackingModeFollow उद्देश्य सी में सेट करना) है। जब कोई स्थान उपलब्ध होता है तो यह स्वचालित रूप से मानचित्र को स्थानांतरित कर देगा।

कारण आप mapView.userLocation के लिए फर्जी नंबर देख रहे हैं, यह है कि उपयोगकर्ता का स्थान आमतौर पर viewDidLoad में उपलब्ध नहीं है। mapView:didUpdateUserLocation: प्रतिनिधि विधि का उपयोग करें जब उपयोगकर्ता का स्थान उपलब्ध हो जाए और जब यह अपडेट हो जाए।

0

mapViewDidFinishLoadingMap नामक एक प्रतिनिधि विधि है। मानचित्र के केंद्र को इस विधि में उपयोगकर्ता निर्देशांक में सेट करें।

func mapViewDidFinishLoadingMap(_ mapView: MGLMapView) { 
    mapView.setCenter((mapView.userLocation?.coordinate)!, animated: false) 
} 
संबंधित मुद्दे

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