2010-08-23 14 views
16

मुझे Google मानचित्र के साथ काम करने का कोई अनुभव नहीं है, लेकिन मैं अपने वेबपैप में "अपनी काउंटी चुनें" मानचित्र एम्बेड करना चाहता हूं। मेरा ऐप केवल कैलिफ़ोर्निया को लक्षित करता है, इसलिए इसे केवल एक राज्य का समर्थन करने की आवश्यकता है, लेकिन मुझे ऐसा करने का कोई आसान तरीका नहीं मिल रहा है (मैन्युअल रूप से सभी काउंटी लाइनों के लिए ओवरले पॉलीगॉन ड्राइंग किए बिना)।काउंटी ओवरले के साथ Google मानचित्र?

मुझे लगता है कि मैं आसानी से Google पर "अपनी काउंटी चुनें" -स्टाइल इंटरफेस के उदाहरण ढूंढ सकता हूं, लेकिन मुझे मिली एकमात्र चीज़ यह थी - http://maps.huge.info/county.htm - और मैं उनके एपीआई को मारने की दिशा में झुका रहा हूं अगर मुझे बेहतर विकल्प नहीं मिल रहा है तो पूरे राज्य के लिए ज्यामिति खींचने के लिए।

क्या किसी को यह थोड़ा आसान बनाने में मदद करने के लिए कोई अनुभव या अंतर्दृष्टि है?

उत्तर

14

Google फ़्यूज़न टेबल्स अब सभी अमेरिका के लिए State, County, and Congressional District data से लिंक है।

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

30

Google मानचित्र API काउंटी बहुभुज या राज्यों या देशों की किसी अन्य पूर्वनिर्धारित सीमा प्रदान नहीं करता है। इसलिए यहां मुख्य मुद्दा बहुभुज डेटा प्राप्त कर रहा है।

गूगल मैप्स एपीआई पर एक बहुभुज LatLng ऑब्जेक्ट की श्रृंखला का निर्माण (आप v3 एपीआई का उपयोग कर रहे हैं यह सोचते हैं) द्वारा परिभाषित किया गया है:

var bermudaTriangleCoords = [ 
    new google.maps.LatLng(25.774252, -80.190262), 
    new google.maps.LatLng(18.466465, -66.118292), 
    new google.maps.LatLng(32.321384, -64.757370), 
    new google.maps.LatLng(25.774252, -80.190262) 
];  

तो फिर तुम एक Polygon वस्तु के निर्माण के लिए इस सरणी का प्रयोग करेंगे:

bermudaTriangle.setMap(map); // Assuming map is your google.maps.Map object 
0123:

var bermudaTriangle = new google.maps.Polygon({ 
    paths: bermudaTriangleCoords, 
    strokeColor: '#FF0000', 
    strokeOpacity: 0.8, 
    strokeWeight: 2, 
    fillColor: '#FF0000', 
    fillOpacity: 0.35 
}); 

और अंत में setMap() विधि को फोन करके मानचित्र पर यह दिखाने

आप अपने Polygon ऑब्जेक्ट के संदर्भ रखने, तो आप भी यह setMap() विधि के लिए null पास करके छिपा सकते हैं:

bermudaTriangle.setMap(null); 

इसलिए आप प्रत्येक काउंटी के लिए एक संपत्ति के नाम के साथ एक जावास्क्रिप्ट वस्तु के निर्माण पर विचार कर सकता है। यह आपको सभी संग्रहों के माध्यम से पुन: प्रयास किए बिना, O(1) (निरंतर समय) में काउंटी के नाम से पॉलीगॉन ऑब्जेक्ट्स लाने की अनुमति देगा। निम्न उदाहरण पर विचार करें:

// Let's start with an empty object: 
var counties = {  
}; 

// Now let's add a county polygon: 
counties['Alameda'] = new google.maps.Polygon({ 
    paths: [ 
    // This is not real data: 
    new google.maps.LatLng(25.774252, -80.190262), 
    new google.maps.LatLng(18.466465, -66.118292), 
    new google.maps.LatLng(32.321384, -64.757370), 
    new google.maps.LatLng(25.774252, -80.190262) 
    // ... 
    ], 
    strokeColor: '#FF0000', 
    strokeOpacity: 0.8, 
    strokeWeight: 2, 
    fillColor: '#FF0000", 
    fillOpacity: 0.3' 
}); 

// Next county: 
counties['Alpine'] = new google.maps.Polygon({ 
    // Same stuff 
}); 

// And so on... 

counties वस्तु हमारे डेटा संग्रह किया जाएगा। "एल डोराडो" की खोज करता है आप बहुभुज बस प्रदर्शित हो सकते हैं इस प्रकार है:

counties['El Dorado'].setMap(map); 

आपने पहले खोजा गया काउंटी के लिए एक संदर्भ रखने, तो आप भी setMap(null) कॉल कर सकते हैं पिछले बहुभुज को छिपाने के लिए:

var userInput = 'El Dorado'; 
var latestSearch = null; 

// Check if the county exists in our data store: 
if (counties.hasOwnProperty(userInput)) { 
    // It does - So hide the previous polygon if there was one: 
    if (latestSearch) { 
    latestSearch.setMap(null); 
    } 
    // Show the polygon for the searched county: 
    latestSearch = counties[userInput].setMap(map); 
} 
else { 
    alert('Error: The ' + userInput + ' county was not found'); 
} 

मुझे उम्मीद है कि यह आपको सही दिशा में जा रहा है।

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