2015-08-25 13 views
7

मैंने एक एंड्रॉइड ऐप बनाया है जो वाईफाई, सेल और जीपीएस के बगल में कई अतिरिक्त जानकारी के साथ उपयोगकर्ताओं के भौगोलिक स्थान को प्रदर्शित करने के लिए Google मानचित्र का उपयोग करने में सक्षम है, उदाहरण के लिए क्यूआर कोड, बीकन या जो कुछ भी मैं कर सकता था वर्तमान स्थिति को सिग्नल करने के लिए उपयोग करें (मैं इन स्थानों की वास्तविक सटीकता का खाता नहीं लेता)। मैं LocationSource का उपयोग कर रहा हूं और इसे setLocationSource के माध्यम से Google मानचित्र API पर पास कर रहा हूं।Google मानचित्र: आईओएस में कस्टम स्थान स्रोत

मुझे Google मानचित्र का उपयोग करना है क्योंकि ऐप्पल मैप्स उपलब्ध ज़ूम स्तर में सीमित है, इसलिए मैं भवनों में ज़ूम नहीं कर सकता।

क्या कस्टम LocationManager प्रदान करना संभव है जो कुछ क्रियाओं द्वारा नियमित रूप से अपडेट हो जाता है और इसे LocationSource जैसे Google मानचित्र API में इंजेक्ट करता है?

मुझे पता है कि मानचित्र पर एक कस्टम मार्कर रखने वाले कुछ हैक हैं, हालांकि यह Google मानचित्र की अन्य सुविधाओं का उपयोग करना असंभव बनाता है जैसे कैमरा को "मेरा स्थान" बटन पर टैप करके उपयोगकर्ता स्थान पर ले जाना असंभव हो जाता है। ।

धन्यवाद।

+0

'CLLocationManager'' स्थान स्रोत 'जैसा नहीं है, यह उपयोगकर्ता स्थान या शीर्षक बदलने पर डेटा अपडेट करता है। – ztan

उत्तर

2

एक समाधान है। Google मानचित्र API कोको फ्रेमवर्क क्लास CLLocationManager का उपयोग करता है। वर्तमान जीपीएस लोकेशन परिवर्तनों के बारे में हर किसी को कैसे सूचित किया जाना चाहिए, CLLocationManagerDelegate के अनुरूप होना चाहिए और CLLocationManager ऑब्जेक्ट का प्रतिनिधि बनना चाहिए। अद्यतन स्थान प्रबंधक के माध्यम से प्रतिनिधि ऑब्जेक्ट को भेजे जा रहे हैं: didUpdateLocations: प्रतिनिधि विधि। यह एक सिद्धांत है जो हर किसी के बारे में जानता है। तो स्थान डेटा अनुकरण करने के लिए हमें इस विधि को अपने स्वयं के डेटा पास करने का आह्वान करने का एक तरीका ढूंढना होगा। सौभाग्य से किसी भी वर्ग के व्यवहार को class_addMethod और class_replaceMethod के माध्यम से गतिशील रूप से किसी भी वर्ग के व्यवहार को बदलने का अवसर है। तो अब हम एक विधि override_abc के साथ एक विधि एबीसी जो इतनी तरह एक वर्ग में लागू किया जा सकता के कार्यान्वयन बदल सकते हैं:

let originalSelector = NSSelectorFromString("setDelegate:") 
let newSelector = NSSelectorFromString("override_setDelegate:") 

let originalMethod = class_getInstanceMethod(CLLocationManager.self, originalSelector) 
let newMethod = class_getInstanceMethod(CLLocationManager.self, newSelector) 

method_exchangeImplementations(originalMethod, newMethod) 

हमारे मामले के लिए, हम स्थान प्रबंधकों प्रतिनिधि के लिए सेटर बदल सकते हैं और जोड़ने की जरूरत है हमारे एक विस्तार के रूप खुद सेटर:

extension CLLocationManager { 
    func override_setDelegate(delegate: CLLocationManagerDelegate) { 
     // save a reference to self 
     GMLocationManager = self 
     override_setDelegate(delegate) 
    } 
} 

एक बार जब हम गूगल मैप्स स्थान प्रबंधक अब हम locationManager कॉल कर सकते हैं के लिए एक संदर्भ बचाया है: एक अतिरिक्त विस्तार विधि simulateLocation का उपयोग कर प्रतिनिधि विधि: didUpdateLocations।

extension CLLocationManager { 
    func simulateLocation(location: CLLocation) { 
     self.delegate?.locationManager?(self, didUpdateLocations: [location]) 
    } 
} 
// ... 

GMLocationManager?.simulateLocation(fakeLocation) 
1

सबसे सरल समाधान यह है कि आपने वर्णन किया है। आप मानचित्र के "मेरा स्थान" मार्कर और "मेरा स्थान" बटन अक्षम करते हैं, कस्टम स्थान मार्कर बनाएं, मानचित्र पर कस्टम "मेरा स्थान" बटन जोड़ें, जो आपके कस्टम मार्कर पर जाएगा।
डिफ़ॉल्ट अक्षम करने "मेरा स्थान" तत्वों के लिए:

mMap.setMyLocationEnabled(false); 
mMap.getUiSettings().setMyLocationButtonEnabled(false); 
0

मुझे ऐसा लगता है, कि अब के लिए यह iOS पर गूगल मैप्स के लिए एक मनमाना स्थान स्रोत से कस्टम स्थानों इंजेक्षन करने के लिए संभव नहीं है। दुर्भाग्यवश, हम केवल पेंग्राड द्वारा बताए गए कस्टम स्थान मार्करों का उपयोग कर सकते हैं। हालांकि, यह कुछ अतिरिक्त दोषों को इंगित करेगा जैसे कि मेरा स्थान बटन नहीं काम करना या नेविगेशन के लिए वर्तमान स्थान का उपयोग करना। तो, यह एकीकृत समाधान नहीं है, जहां हम खोज रहे हैं।

आईओएस पर कोर स्थान फ्रेमवर्क का उपयोग करने के लिए अभी भी सबसे अच्छा है और उस पर वर्तमान स्थिति के साथ एक कस्टम बिटमैप दृश्य खींचें और इमारत से बाहर निकलने पर, सामान्य Google मानचित्र पर वापस जाएं।

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