MKMapView ज़ूम और क्षेत्र

वोट
83

मैं Google मानचित्र Javascript API उपयोग करने से परिचित हूँ। हाल ही में मैं एक iphone परियोजना के लिए MapKit ढांचे का उपयोग शुरू किया है, लेकिन मैं जूमिंग और नक्शे में क्षेत्र की स्थापना एक मुश्किल समय यह पता लगाने की हो रही है।

गूगल मैप्स एपीआई में मैं () सीधा समारोह setZoom के साथ-साथ, 8 की तरह पूर्णांक ज़ूम स्तर का उपयोग करने के 9, 10 का इस्तेमाल किया। एनिमेटेड: केवल बराबर विधि मैं MapKit ढांचे में देख सकते हैं setRegion है। मैं समझता हूँ के रूप में, मैं ज़ूम स्तर निर्दिष्ट करने के लिए इस क्षेत्र की अवधि के अक्षांश और देशांतर डेल्टा मूल्यों को निर्धारित करने की जरूरत है। लेकिन मैं वास्तव में एक विचार क्या ये मान (मैं दस्तावेज़ पढ़ें) का प्रतिनिधित्व नहीं है।

जब मैं एक MKMapView प्रतिनिधि का उपयोग करें और regionDidChange प्रतिनिधि विधि परिणामों में अवधि मूल्यों का पता लगाने के एक दूसरे को परस्पर संबंधित नहीं है। जब मैं बाहर ज़ूम और अवधि दस्तावेज़ में बताए के रूप में डेल्टा मूल्यों में वृद्धि कर रहे हैं ठीक है। लेकिन अचानक मैं ज़ूम किए बिना नक्शे खींचें और डेल्टा मूल्यों 0.0 हो गया है।

किसी को समझाने कृपया इन अवधि और डेल्टा के लिए संदर्भ बिंदु क्या है? या वहाँ किसी भी एल्गोरिथ्म इन डेल्टा मूल्यों के लिए एक पूर्णांक ज़ूम स्तर (9) की तरह परिवर्तित करने के लिए है?

एक बोनस के सवाल के रूप में वहाँ एक MKMapView पर एक न्यूनतम-अधिकतम स्तर ज़ूम निर्दिष्ट करने के लिए किसी भी तरह से है :)

धन्यवाद

22/07/2009 को 17:16
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
133

सबसे पहले, MKMapView का उपयोग नहीं करता / जैसे गूगल मैप्स करता है ज़ूम स्तरों की एक पूर्वनिर्धारित सेट है।

इसके बजाय, एक MKMapView के दृश्य क्षेत्र का उपयोग कर वर्णन किया गया है MKCoordinateRegion दो मूल्यों के होते हैं, जो:

  1. केंद्र (क्षेत्र के केंद्र बिंदु), और
  2. अवधि (केंद्र के चारों ओर दिखाई क्षेत्र के आकार)।

केंद्र बिंदु स्पष्ट होना चाहिए (यह इस क्षेत्र का केंद्र बिंदु है।)

हालांकि, अवधि (जो एक है MKCoordinateSpan ) के होते हैं:

  1. latitudeDelta (ऊर्ध्वाधर दूरी क्षेत्र का प्रतिनिधित्व करती है), और
  2. longitudeDelta (क्षैतिज दूरी क्षेत्र द्वारा प्रतिनिधित्व)।

एक संक्षिप्त उदाहरण। यहाँ एक खिलौना MKCoordinateRegion है:

  1. केंद्र:
    • अक्षांश: 0
    • देशांतर: 0
  2. अवधि:
    • latitudeDelta: 8
    • longitudeDelta: 6

यह क्षेत्र अपनी मिनट का उपयोग कर वर्णित किया जा सकता है और अधिकतम इस प्रकार का समन्वय करता है:

  1. मिनट समन्वय (निचले बाएं बिंदु):
    • अक्षांश: -4
    • देशांतर: -3
  2. अधिकतम समन्वय (ऊपरी दाहिने बिंदु):
    • अक्षांश: 4
    • देशांतर: 3

तो, आप एक उचित रूप से आकार MKCoordinateSpan का उपयोग करके केंद्र बिंदु के आस स्तरों ज़ूम निर्दिष्ट कर सकते हैं। गूगल के संख्यात्मक ज़ूम स्तरों की एक सन्निकटन के रूप में, आप काल आकार है कि गूगल एक दिए गए ज़ूम स्तर के लिए उपयोग करता है के इंजीनियर को बदलने और एक अवधि बनाने के लिए, उसके अनुसार कर सकते हैं। (गूगल उसी तरह MKMapView एक केंद्र + अवधि के रूप में, करता है कि उनके विचार में क्षेत्रों का वर्णन करता है, तो आप Google नक्शे से प्रस्थान इन मूल्यों को खींच सकते हैं।)

क्षेत्र प्रतिबंधित करने के लिए के रूप में, आप w / इस प्रतिनिधि विधि निभा सकते हैं:

mapView:regionWillChangeAnimated

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

Btw, वहाँ निश्चित फिक्स / MapKit के पहलुओं है कि मुझे 3.0 में परेशानी दे रहे थे करने के लिए ओएस 3.1 में सुधार कर रहे हैं।

22/07/2009 को 20:36
का स्रोत उपयोगकर्ता

वोट
117

आप के बजाय स्पष्ट ज़ूम स्तर का उपयोग कर एक MKCoordinateSpan को परिभाषित पसंद करते हैं, मैं एक वर्ग है कि एक MKMapView के ज़ूम स्तर को निर्दिष्ट करने के लिए समर्थन जोड़ता लिखा था। कोड पाया जा सकता है यहाँ

23/01/2010 को 03:49
का स्रोत उपयोगकर्ता

वोट
4

अवधि अक्षांश और देशांतर की डिग्री में है। वहाँ MKCoordinateRegion structs कि दूरी लेता है, बजाय के निर्माण के लिए एक विधि है। हो सकता है कि आप MKCoordinateRegionMakeWithDistance उपयोग कर रहे हैं अवधि निर्दिष्ट करने के लिए, और फिर जब तुम regionDidChange में यह जाँच, आप अक्षांश / देशांतर अवधि है, जो कि यह कैसे एक MKCoordinateRegion struct में संग्रहीत किया जाता है पर देख रहे हैं।

जहाँ तक मुझे पता है, पूर्णांक ज़ूम स्तर जब MKMapKit के साथ काम उपलब्ध है या बिल्कुल उपयोगी नहीं हैं। मैं व्यक्तिगत रूप से, अपने और अधिक लचीला अवधि आंकड़े का उपयोग कर पसंद करते हैं।

आप अधिकतम और न्यूनतम जूम निर्दिष्ट कर सकते हैं नहीं है, और मैं एक तरह से यह हैक करने का पता नहीं है। MKMapKit वास्तव में अभी बहुत कमजोर है, मैं बहुत सुविधाओं की कमी से निराश हूँ।

22/07/2009 को 19:09
का स्रोत उपयोगकर्ता

वोट
3

एक स्थान लिंक क्वेरी स्ट्रिंग निरीक्षण maps.google.com प्रयोग करने के लिए ज़ूम स्तर की संक्षिप्त तुलना से पता चलता है कि 2 का एक पहलू से dx और डीवाई अवधि मूल्यों में वृद्धि:

 (0.005334, 0.011834) starting span
 (0.010668, 0.023668) dx: x2, dy: x2 
 (0.021335, 0.047337) dx: x2, dy: x2
 (0.042671, 0.094671) dx: x2, dy: x2
  ...
11/12/2009 को 01:30
का स्रोत उपयोगकर्ता

वोट
2

MKMapView पर Brant वर्ग अच्छी तरह से काम करता है। हालांकि, ऐसा लगता है कि यह जब mapSizeInPixels की गणना रेटिना स्क्रीन के साथ नए उपकरणों का समर्थन करने के लिए अद्यतन नहीं किया गया है।

यह इस लाइन बदलकर इसे ठीक किया जा सकता है:

CGSize mapSizeInPixels = mapView.bounds.size;

इस लाइन के साथ:

CGSize mapSizeInPixels = CGSizeMake(mapView.bounds.size.width * [UIScreen mainScreen].scale, mapView.bounds.size.height * [UIScreen mainScreen].scale);
19/06/2014 को 16:43
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more