2012-04-05 21 views
0

Also hier ist mein Problem, zu dem ich sicher bin, dass es viele gibt. Ich habe eine JSON-Datei mit einem Array von Zuständen und einem Unter-Array von Lat- und lng-Werten, die diesem Zustand entsprechen.Wie die Array-Punkte von einem Polygon zurückgegeben werden?

Ich Schleife durch die Staaten, dann Schleife durch die Punkte dann bauen Sie die 50 Polygone.

Ich muss jetzt den Zustand zentrieren und vergrößern, wenn es geklickt wird. Ich erkannte, dass ich die Punkte erneut durchlaufen und Grenzen hinzufügen konnte. Wenn ich jedoch das Polygon in der Konsole anzeigen lasse, kann ich durch die Werte klicken und die Punkte sehen.

Ich gehe davon aus, dass es einen Weg gibt, einfach auf diese Punkte zuzugreifen, ohne sie erneut zu durchlaufen ... die Punkte sind bereits einem Polygon zugeordnet, das einem Zustand zugeordnet ist.

Wenn ich console.log(newpoly.latLngs); versuche ich bin zurück:

Kf 

->b: Array[1] 

->0: Kf 

->b: Array[5] 

->0: Q 
    Xa: 41.0037 
    Ya: -104.05560000000003 
    __proto__: Q 
    1: Q 
    Xa: 44.9949 
    Ya: -104.0584 
    __proto__: Q 
    2: Q 
    Xa: 44.9998 
    Ya: -111.0539 
    __proto__: Q 
    3: Q 
    Xa: 40.9986 
    Ya: -111.04570000000001 
    __proto__: Q 
    4: Q 
    Xa: 41.0006 
    Ya: -104.05560000000003 

Sorry, ich bin nicht sicher, wie dies jede sauberer aussehen.

Anyways möchte ich auf das letzte Array der latLng Punkte zugreifen. Oder sollte ich einfach eine weitere Schleife für die Grenzen hinzufügen?

Dank

+0

Nach den Namen der Eigenschaften ("Xa", "Ya" usw.) zu urteilen, sollten Sie nicht versuchen, über '.latLngs' _property_ auf sie zuzugreifen, sondern stattdessen etwas wie' .getLatLngs() '(Methode). Die Eigenschaftsnamen können aus einer JavaScript-Minimierung stammen und können sich mit einer neuen Version (auch einer kleineren Version) vollständig ändern. – bububaba

+0

das ist ein sehr guter Punkt. Danke, dass du mir einen Head-up auf der ganzen Linie gespart hast. – JVD

Antwort

0

Ich glaube nicht, dass es einen Weg gibt, um den Begrenzungsrahmen für die Polygone in einer Bildkarte (ich nehme an, dass ist das, was Sie verwenden) zu erhalten.

Es ist nicht notwendig, eine weitere Schleife zu schreiben; Verwenden Sie die bereits geschriebene Schleife, um die Grenzen zu berechnen und die Polygone gleichzeitig zu erstellen.

+0

Ja, das habe ich angefangen. Es erscheint mir einfach überflüssig, aber ich nehme an, dass es in api-3 so gemacht wurde, um die Dinge kleiner zu halten. Was sind die besten Vorschläge, um zu verhindern, dass die Grenzen als letzter Zustand in der Schleife zugewiesen werden? – JVD

0

hat es auf diese Weise arbeiten:

jQuery.getJSON("http://www.betafoot.com/wp-content/themes/twentyeleven/states.json", function(json) 
{ 
var j = []; 
var i = []; 
var $length = Object.keys(json).length; 
for (var j=1; j<$length+1; j++) 
{ 
var latlngbounds = new google.maps.LatLngBounds(); 
var pts = []; 
for (var i=0; i<json[j].points.length; i++) 
{ 
var id = json[j].stateid; 
pts[i] = new google.maps.LatLng(json[j].points[i][1], json[j].points[i][2]); 
latlngbounds.extend(pts[i]); 
}; 
var newpoly = new google.maps.Polygon({ 
paths: pts, 
strokeColor: "#FFFFFF", 
strokeOpacity: 0.8, 
strokeWeight: 2, 
fillColor: "#FF0000", 
fillOpacity: 0 
}); 
newpoly.setMap(map); 
newpoly.latlngbounds = latlngbounds; 
newpoly.objInfo = id; 
listenMarker(newpoly); 
}; 
}); 
function listenMarker(newpoly) 
{ 
google.maps.event.addListener(newpoly, 'click', function(event) 
{ 
map.fitBounds(newpoly.latlngbounds); 
}); 
}; 

wie Sie, ich bin Befestigung der LatLngBounds auf die „newpoly“ sehen können, sie dann von einer separaten Funktion Zugriff auf die die Klick-Aktion behandelt. Wenn jemand denkt, dass das eine schlechte Idee ist, lass es mich wissen.

Verwandte Themen