दिलचस्प पोस्ट
कैसे log4j को ठीक से प्रारंभ करें? मैं पूर्णांक को शब्दों में बदलने के लिए पायथन को कैसे बताऊँ? कैसे डॉस बैच newline चर हैक काम करता है समझाओ GUID / UUID डेटाबेस कुंजियों के फायदे और नुकसान जेपीए और सीतनिद्रा में होना का उपयोग कर आलियाई प्रारंभिकरण को हल करने के लिए कैसे करें सी # में एक पाठ फ़ाइल से एक पंक्ति को कैसे हटाएं? कैशिंग आवश्यक स्क्रिप्ट्स से RequireJS को रोकें फ़ायरफ़ॉक्स में डाउनलोड संवाद फाइल करने के लिए प्रवेश कैसे सी # में तुलना के लिए एक पूर्णांक के लिए एक महीने के नाम (स्ट्रिंग) को पार्स करने के लिए? python setup.py स्थापना रद्द करें मैं किसी अन्य के मूल्यों के आधार पर एक वेक्टर को किस प्रकार सॉर्ट करूँ? getOutputStream () को पहले ही इस प्रतिक्रिया के लिए बुलाया गया है क्लस्टर कंप्यूटिंग के लिए बहुप्रोसेसिंग मॉड्यूल का उपयोग करना जावास्क्रिप्ट / jQuery का उपयोग करके डेटा- * विशेषताओं की सूची प्राप्त करें एंड्रॉइड के साथ एक फाइल डाउनलोड करें, और प्रगति डीआईएलओॉग में प्रगति दिखा रहा है

Google मानचित्र v3 – देखने योग्य क्षेत्र और ज़ूम स्तर सीमित करें

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

क्या इसे प्राप्त करने का कोई तरीका है?

स्टाइलमैप का उपयोग करके ज़ूम स्तर को सीमित करने के साथ मुझे आंशिक सफलता मिली, लेकिन मैं केवल ROADMAP को प्रतिबंधित करने में सफल रहा, मैं इस तरह से अन्य बुनियादी प्रकारों पर ज़ूम सीमित नहीं कर पा रहा था।

किसी भी मदद के लिए धन्यवाद

वेब के समाधान से एकत्रित समाधान "Google मानचित्र v3 – देखने योग्य क्षेत्र और ज़ूम स्तर सीमित करें"

आप dragend इवेंट को सुन सकते हैं, और अगर नक्शा को स्वीकार्य सीमा से बाहर खींचा गया है, तो इसे वापस अंदर ले जाएं आप अपनी LatLngBounds ऑब्जेक्ट में अपनी अनुमति सीमा निर्धारित कर सकते हैं और फिर नए lat / lng केंद्र की सीमा के भीतर जांचने के लिए contains() विधि का उपयोग करें।

आप ज़ूम स्तर को बहुत आसानी से सीमित कर सकते हैं।

निम्नलिखित उदाहरण पर विचार करें: बेल्ड डेमो

 <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>Google Maps JavaScript API v3 Example: Limit Panning and Zoom</title> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> </head> <body> <div id="map" style="width: 400px; height: 300px;"></div> <script type="text/javascript"> // This is the minimum zoom level that we'll allow var minZoomLevel = 5; var map = new google.maps.Map(document.getElementById('map'), { zoom: minZoomLevel, center: new google.maps.LatLng(38.50, -90.50), mapTypeId: google.maps.MapTypeId.ROADMAP }); // Bounds for North America var strictBounds = new google.maps.LatLngBounds( new google.maps.LatLng(28.70, -127.50), new google.maps.LatLng(48.85, -55.90) ); // Listen for the dragend event google.maps.event.addListener(map, 'dragend', function() { if (strictBounds.contains(map.getCenter())) return; // We're out of bounds - Move the map back within the bounds var c = map.getCenter(), x = c.lng(), y = c.lat(), maxX = strictBounds.getNorthEast().lng(), maxY = strictBounds.getNorthEast().lat(), minX = strictBounds.getSouthWest().lng(), minY = strictBounds.getSouthWest().lat(); if (x < minX) x = minX; if (x > maxX) x = maxX; if (y < minY) y = minY; if (y > maxY) y = maxY; map.setCenter(new google.maps.LatLng(y, x)); }); // Limit the zoom level google.maps.event.addListener(map, 'zoom_changed', function() { if (map.getZoom() < minZoomLevel) map.setZoom(minZoomLevel); }); </script> </body> </html> 

ऊपर दिए गए उदाहरण से स्क्रीनशॉट। उपयोगकर्ता इस मामले में आगे दक्षिण या फिर पूर्व में खींच नहीं पाएगा:

Google मानचित्र जावास्क्रिप्ट एपीआई v3 उदाहरण: फोर्स स्टॉप मैप ड्रैगिंग

ज़ूम स्तर को प्रतिबंधित करने के बेहतर तरीके से घटनाओं पर प्रतिक्रिया देने के बजाय minZoom / maxZoom विकल्प का उपयोग किया जा सकता है?

 var opt = { minZoom: 6, maxZoom: 9 }; map.setOptions(opt); 

या मैप आरंभीकरण के दौरान विकल्प निर्दिष्ट किया जा सकता है, जैसे:

 var map = new google.maps.Map(document.getElementById('map-canvas'), opt); 

देखें: Google Maps JavaScript API V3 संदर्भ

V.3 + पर ज़ूम को सीमित करने के लिए अपने मैप सेटिंग में डिफ़ॉल्ट ज़ूम स्तर और न्यूनतम ज़ूम या अधिकतम ज़ूम (या दोनों आवश्यक होने पर) ज़ूम स्तर 0 से 1 9 जोड़ते हैं। यदि सीमा की आवश्यकता है तो आपको डेफल्ट ज़ूम स्तर घोषित करना होगा। सभी मामले संवेदनशील हैं!

 function initialize() { var mapOptions = { maxZoom:17, minZoom:15, zoom:15, .... 

सीमा को सीमित करने का बेहतर तरीका … ऊपर पोस्टर से तर्क शामिल है।

 var dragStartCenter; google.maps.event.addListener(map, 'dragstart', function(){ dragStartCenter = map.getCenter(); }); google.maps.event.addListener(this.googleMap, 'dragend', function(){ if (mapBounds.contains(map.getCenter())) return; map.setCenter(this.dragStart); }); 
 myOptions = { center: myLatlng, minZoom: 6, maxZoom: 9, styles: customStyles, mapTypeId: google.maps.MapTypeId.ROADMAP }; 

इसका उपयोग किसी विशिष्ट स्थान पर नक्शे को फिर से केन्द्रित करने के लिए किया जा सकता है। जो मुझे जरूरी था

  var MapBounds = new google.maps.LatLngBounds( new google.maps.LatLng(35.676263, 13.949096), new google.maps.LatLng(36.204391, 14.89038)); google.maps.event.addListener(GoogleMap, 'dragend', function () { if (MapBounds.contains(GoogleMap.getCenter())) { return; } else { GoogleMap.setCenter(new google.maps.LatLng(35.920242, 14.428825)); } }); 

देखने योग्य क्षेत्र की सीमा की समस्या को हल करने के लिए यहां मेरा संस्करण है

  google.maps.event.addListener(this.map, 'idle', function() { var minLat = strictBounds.getSouthWest().lat(); var minLon = strictBounds.getSouthWest().lng(); var maxLat = strictBounds.getNorthEast().lat(); var maxLon = strictBounds.getNorthEast().lng(); var cBounds = self.map.getBounds(); var cMinLat = cBounds.getSouthWest().lat(); var cMinLon = cBounds.getSouthWest().lng(); var cMaxLat = cBounds.getNorthEast().lat(); var cMaxLon = cBounds.getNorthEast().lng(); var centerLat = self.map.getCenter().lat(); var centerLon = self.map.getCenter().lng(); if((cMaxLat - cMinLat > maxLat - minLat) || (cMaxLon - cMinLon > maxLon - minLon)) { //We can't position the canvas to strict borders with a current zoom level self.map.setZoomLevel(self.map.getZoomLevel()+1); return; } if(cMinLat < minLat) var newCenterLat = minLat + ((cMaxLat-cMinLat) / 2); else if(cMaxLat > maxLat) var newCenterLat = maxLat - ((cMaxLat-cMinLat) / 2); else var newCenterLat = centerLat; if(cMinLon < minLon) var newCenterLon = minLon + ((cMaxLon-cMinLon) / 2); else if(cMaxLon > maxLon) var newCenterLon = maxLon - ((cMaxLon-cMinLon) / 2); else var newCenterLon = centerLon; if(newCenterLat != centerLat || newCenterLon != centerLon) self.map.setCenter(new google.maps.LatLng(newCenterLat, newCenterLon)); }); 

strictBounds new google.maps.LatLngBounds() प्रकार का एक ऑब्जेक्ट है। self.gmap एक Google मानचित्र वस्तु संग्रहीत करता है ( new google.maps.Map() )।

यह वास्तव में काम करता है, लेकिन केवल 0 वीं रेत के पार के साथ रक्तस्राव को ध्यान में रखना भूल जाते हैं और यदि आपकी बाध्यता उन्हें कवर करती है

किसी कारण के लिए

 if (strictBounds.contains(map.getCenter())) return; 

मेरे लिए काम नहीं किया (शायद एक दक्षिणी गोलार्ध मुद्दे) मुझे इसे बदलना पड़ा:

  function checkBounds() { var c = map.getCenter(), x = c.lng(), y = c.lat(), maxX = strictBounds.getNorthEast().lng(), maxY = strictBounds.getNorthEast().lat(), minX = strictBounds.getSouthWest().lng(), minY = strictBounds.getSouthWest().lat(); if(x < minX || x > maxX || y < minY || y > maxY) { if (x < minX) x = minX; if (x > maxX) x = maxX; if (y < minY) y = minY; if (y > maxY) y = maxY; map.setCenter(new google.maps.LatLng(y, x)); } } 

आशा है कि यह किसी को मदद करेगा

एक समाधान ऐसा है, यदि आप विशिष्ट अक्षांश / एलएनजी जानते हैं

 google.maps.event.addListener(map, 'idle', function() { map.setCenter(new google.maps.LatLng(latitude, longitude)); map.setZoom(8); }); 

यदि विशिष्ट अक्षांश / एलएनजी नहीं है

 google.maps.event.addListener(map, 'idle', function() { map.setCenter(map.getCenter()); map.setZoom(8); }); 

या

 google.maps.event.addListener(map, 'idle', function() { var bounds = new google.maps.LatLngBounds(); map.setCenter(bounds.getCenter()); map.setZoom(8); }); 

2016 के मध्य तक , दर्शनीय क्षेत्र को प्रतिबंधित करने का कोई आधिकारिक तरीका नहीं है। सीमाओं को प्रतिबंधित करने के लिए अधिकांश तदर्थ समाधानों में एक दोष है, क्योंकि वे नक्शा दृश्य को ठीक करने के लिए सीमा को सीमित नहीं करते हैं, वे केवल इसे सीमित करते हैं यदि नक्शा का केंद्र निर्दिष्ट सीमा से बाहर है यदि आप मेरे जैसे छवि को ओवरलेइंग करने के लिए सीमाओं को प्रतिबंधित करना चाहते हैं, तो यह एक ऐसा व्यवहार हो सकता है जैसे नीचे सचित्र किया गया है, जहां अंडरलेइंग का नक्शा हमारी छवि ओवरले के नीचे दिखाई दे रहा है:

यहां छवि विवरण दर्ज करें

इस मुद्दे से निपटने के लिए, मैंने एक लाइब्रेरी बनाई है, जो सफलतापूर्वक सीमाओं को प्रतिबंधित करती है ताकि आप ओवरले से पैन नहीं निकाल सकें।

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

उदाहरण दिया गया पुस्तकालय का उपयोग करते हुए उदाहरण, मैं प्राप्त करने में सक्षम होने वाले निर्दयी सख्त सीमा अनुभव:

 function initialise(){ var myOptions = { zoom: 5, center: new google.maps.LatLng(0,0), mapTypeId: google.maps.MapTypeId.ROADMAP, }; var map = new google.maps.Map(document.getElementById('map'), myOptions); addStrictBoundsImage(map); } function addStrictBoundsImage(map){ var bounds = new google.maps.LatLngBounds( new google.maps.LatLng(62.281819, -150.287132), new google.maps.LatLng(62.400471, -150.005608)); var image_src = 'https://developers.google.com/maps/documentation/' + 'javascript/examples/full/images/talkeetna.png'; var strict_bounds_image = new StrictBoundsImage(bounds, image_src, map); } 
 <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("maps", "3",{other_params:"sensor=false"}); </script> <body style="margin:0px; padding:0px;" onload="initialise()"> <div id="map" style="height:400px; width:500px;"></div> <script type="text/javascript"src="https://raw.githubusercontent.com/matej-pavla/StrictBoundsImage/master/StrictBoundsImage.js"></script> </body> 

यह सहायक हो सकता है

  var myOptions = { center: new google.maps.LatLng($lat,$lang), zoom: 7, disableDefaultUI: true, mapTypeId: google.maps.MapTypeId.ROADMAP }; 

आवश्यकता के अनुसार ज़ूम स्तर अनुकूलन योग्य हो सकता है