Interfejs API serwisu Mapy Google nie udostępnia regionów powiatowych ani żadnych innych wstępnie zdefiniowanych granic państw lub krajów. Dlatego głównym problemem jest uzyskanie danych wieloboków.
Wielokąt na Google Maps API jest definiowana poprzez skonstruowanie tablicę LatLng
obiektów (zakładając że używasz API 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)
];
Następnie należałoby użyć tej tablicy skonstruować Polygon
obiektu:
var bermudaTriangle = new google.maps.Polygon({
paths: bermudaTriangleCoords,
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35
});
I wreszcie pokazać go na mapie za pomocą metody setMap()
:
bermudaTriangle.setMap(map); // Assuming map is your google.maps.Map object
Jeśli zachować odniesienie do obiektu Polygon
, można też ukrywać, przekazując null
metody setMap()
:
bermudaTriangle.setMap(null);
Dlatego można rozważyć budowę obiektu JavaScript o nazwie nieruchomości dla każdego powiatu. Umożliwi to pobranie obiektów wieloboków z nazwy powiatów w O(1) (stały czas), bez konieczności przechodzenia przez całą kolekcję. Rozważmy następujący przykład:
// 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...
Przedmiotem counties
będzie nasz magazyn danych. Gdy użytkownik szuka „El Dorado” można po prostu pokazać wielokąt następująco:
counties['El Dorado'].setMap(map);
Jeśli zachować odniesienie do wcześniej przeszukiwanego powiatu, można również zadzwonić setMap(null)
ukryć poprzednią wieloboku:
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');
}
Mam nadzieję, że to pozwoli ci iść w dobrym kierunku.