2011-08-24 10 views
12

मैं पर उदाहरण को देखकर किया गया है:सीमित गूगल मैप्स ब्रिटेन का पता करने के लिए स्वत: पूर्ण केवल

http://code.google.com/apis/maps/documentation/javascript/examples/places-autocomplete.html

और अपनी साइट में शामिल करने का फैसला किया।

क्या यूके पते पर पते को सीमित करना संभव है?

उत्तर

28

इस प्रयास करें:

var input = document.getElementById('searchTextField'); 
var options = { 
    types: ['(cities)'], 
    componentRestrictions: {country: 'tr'}//Turkey only 
}; 
var autocomplete = new google.maps.places.Autocomplete(input,options); 
+2

यह सही उत्तर –

+4

घटक रेस्त्रां है: {देश: 'gb'} // केवल – geedubb

+0

प्रश्न के अनुसार यूके तक ही सीमित होगा, यह 'प्रकार: ['शहरों']' 'नहीं होना चाहिए: ['(शहर) '] ' – tirdadc

4

आप जो स्थान ढूंढते हैं उन्हें सख्ती से/कड़ी सीमा तक सीमित नहीं कर सकते हैं, हालांकि ऐसा करने के लिए सिस्टम में एक सुविधा अनुरोध है, लेकिन आप परिणामों पर 'पूर्वाग्रह' सेट कर सकते हैं। यह एक Google मानचित्र सीमा वस्तु के रूप में स्वत: पूर्ण विधि के लिए एक तर्क के रूप में पारित किया गया है। स्वतः पूर्ण उन सीमाओं के भीतर स्थानों का पक्ष लेगा। नोट, हालांकि, चूंकि यह एक कठिन सीमा नहीं है, यदि सीमाओं के बाहर की खोज के लिए मिलान हैं तो यह उनको वापस कर देगा।

मेरे उपयोग से यह थोड़ा छोटी गाड़ी लगता है और कुछ सुधार का उपयोग कर सकता है - विशेष रूप से यह देखते हुए कि आपकी सीमा के बाहर कुछ भी निकटता से टैग नहीं किया गया है, इसलिए सीमा के बाहर कुछ ब्लॉक केवल 1000 मील के रूप में दिखने की संभावना है बाहर, तो सुनिश्चित करें कि आप सीमाओं को सही काम करने के साथ चारों ओर खेलते हैं।

+1

सही उत्तर घटक रेस्ट्रेशंस का उपयोग करके है, जो आपको एरकन के उत्तर में दिखाए गए अनुसार देशों को स्वत: पूर्ण करने की अनुमति देता है। –

+2

सही। इसे 25 जुलाई, 2012 को एपीआई v3.9 में जोड़ा गया था। उपर्युक्त उत्तर के लेखन के अनुसार, एपीआई v3.6 पर था। यह उपरोक्त वर्णित सुविधा अनुरोध का Google का उत्तर है। आज तक, v3.12 सबसे कम संस्करण दिया गया है, इसलिए यह किसी भी एपीआई अनुरोधों में मानक होना चाहिए। –

1

आप ऐसा करने के बारे में सबसे अच्छा तरीका यह है कि आप एपीआई को अपने आप से पूछें और अपने देश के साथ पूछे जाने वाले स्ट्रिंग को जोड़ना है। या, ज़ाहिर है, geo-autocomplete jQuery plugin का उपयोग करें।

2

जेम्स एल्डे सही है:

http://code.google.com/apis/maps/documentation/javascript/places.html#places_autocomplete

var defaultBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(49.00, -13.00), 
    new google.maps.LatLng(60.00, 3.00)); 

var acOptions = { 
    bounds: defaultBounds, 
    types: ['geocode'] 
}; 

यह डरहम दूसरा परिणाम के रूप में डरहम, उत्तरी कैरोलिना देता है के लिए खोज के रूप में कुछ हद तक परेशान है कि कैसे आप क्षेत्र पूर्वाग्रह को यह समझाने की कोशिश की परवाह किए बिना, - आप इसे व्यूपोर्ट मैप सीमाओं पर सेट कर सकते हैं और यह अभी भी एनसी राज्य का सुझाव देने का प्रयास करेगा ... jQuery समाधान यहां पाया जा सकता है, लेकिन ऐसा लगता है कि v3 एपीआई के रूप में कई परिणाम नहीं हैं। http://code.google.com/p/geo-autocomplete/

4

आप JSONP परिणाम है कि google.maps.places.Autocomplete कार्यक्षमता द्वारा लौटाए गए रोकना और उन्हें इस्तेमाल आप मनचाहे ढंग से, जैसे देश से सीमित करने और परिणामों को प्रदर्शित कर सकते हैं।

मूल रूप से आप मुख्य तत्व पर appendChild विधि को फिर से परिभाषित करते हैं, और उसके बाद जावास्क्रिप्ट तत्वों की निगरानी करते हैं जो Google स्वत: पूर्ण कोड JSONP के लिए DOM में डालें। चूंकि जावास्क्रिप्ट तत्व जोड़े जाते हैं, इसलिए आप जेएसओएनपी कॉलबैक को ओवरराइड करते हैं जिसे Google कच्चे स्वत: पूर्ण डेटा तक पहुंच प्राप्त करने के लिए परिभाषित करता है।

यह एक हैक का एक सा, यहाँ जाता है (मैं jQuery का उपयोग कर रहा हूँ, लेकिन यह आवश्यक इस हैक काम करने के लिए नहीं है) है:

//The head element, where the Google Autocomplete code will insert a tag 
//for a javascript file. 
var head = $('head')[0]; 
//The name of the method the Autocomplete code uses to insert the tag. 
var method = 'appendChild'; 
//The method we will be overriding. 
var originalMethod = head[method]; 

head[method] = function() { 
    if (arguments[0] && arguments[0].src && arguments[0].src.match(/GetPredictions/)) { //Check that the element is a javascript tag being inserted by Google. 
    var callbackMatchObject = (/callback=([^&]+)&|$/).exec(arguments[0].src); //Regex to extract the name of the callback method that the JSONP will call. 
    var searchTermMatchObject = (/\?1s([^&]+)&/).exec(arguments[0].src); //Regex to extract the search term that was entered by the user. 
    var searchTerm = unescape(searchTermMatchObject[1]); 
    if (callbackMatchObject && searchTermMatchObject) { 
     var names = callbackMatchObject[1].split('.'); //The JSONP callback method is in the form "abc.def" and each time has a different random name. 
     var originalCallback = names[0] && names[1] && window[names[0]] && window[names[0]][names[1]]; //Store the original callback method. 
     if (originalCallback) { 
     var newCallback = function() { //Define your own JSONP callback 
      if (arguments[0] && arguments[0][3]) { 
      var data = arguments[0][4]; //Your autocomplete results 
      //SUCCESS! - Limit results here and do something with them, such as displaying them in an autocomplete dropdown. 
      } 
     } 

     //Add copy all the attributes of the old callback function to the new callback function. This prevents the autocomplete functionality from throwing an error. 
     for (name in originalCallback) { 
      newCallback[name] = originalCallback[name]; 
     } 
     window[names[0]][names[1]] = newCallback; //Override the JSONP callback 
     } 
    } 

    //Insert the element into the dom, regardless of whether it was being inserted by Google. 
    return originalMethod.apply(this, arguments); 
}; 
+0

आपका दृष्टिकोण बहुत दिलचस्प लगता है और Google के अपने पैरामीटर का उपयोग करके किसी क्षेत्र तक सीमित करने में अंतर्निहित समस्याओं का समाधान करने वाला एकमात्र ऐसा लगता है। क्या आप एक पूर्ण काम कर रहे JSFiddle या उपरोक्त को शामिल करने में सक्षम होंगे? मुझे यह समझने में कठिनाई हो रही है कि यह Google के उदाहरणों में कैसे फिट बैठता है और एक पूर्ण कामकाजी उदाहरण बहुत मददगार होगा। धन्यवाद –

-1

बस बदलने

तो: http://maps.google.com/maps/api/geocode/xml?address= {0}अपने देश डोमेन के लिए नक्शे के लिए गूगल डोमेन और यह स्वत: ही अपने देश के भीतर खोज करेंगे 0 सेंसर = false & भाषा = hi

करने के लिए: http://maps.google.nl/maps/api/geocode/xml?address= {0} & सेंसर = false & भाषा = nl

0

कुछ इस तरह की कोशिश करो।

// Change Bangalore, India to your cities boundary. 
var bangaloreBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(12.864162, 77.438610), 
    new google.maps.LatLng(13.139807, 77.711895)); 

var autocomplete = new google.maps.places.Autocomplete(this, { 
    bounds: bangaloreBounds, 
    strictBounds: true, 
}); 

autocomplete.addListener('place_changed', function() { 
}); 
संबंधित मुद्दे