Prüfen Sie, ob ein Punkt im polygon (Karten)
Ich versuche zu prüfen ob ein Punkt im polygon.
Im moment muss ich versuchen mit dieser Funktion
pointInPolygon:function (point,polygon){
var i;
var j=polygon.length-1;
var inPoly=false;
var lon = point.longitude;
var lat = point.latitude;
for (i=0; i<polygon.length; i++)
{
if (polygon[i][0]<lon && polygon[j][0]>=lon|| polygon[j][0]<lon && polygon[i][0]>=lon){
if (polygon[i][0]+(lon-polygon[i][0])/(polygon[j][0]-polygon[i][0])*(polygon[j][1]-polygon[i][1])<lat){
inPoly=!inPoly;
}
}
j=i;
}
return inPoly;
}
... diese Funktion scheint zu funktionieren auf einfachen polygon ( http://jsfiddle.net/zTmr7/3/ ), aber es funktioniert nicht für mich...
hier ist die sample-Daten eines Polygons:
polygon: Array[14]
Array[2]
0: "-120.190625"
1: "29.6614549946937"
Array[2]
0: "-116.87275390625"
1: "32.6320990313992"
Array[2]
0: "-116.60908203125"
1: "34.0363970332393"
Array[2]
0: "-120.89375"
1: "41.9203747676428"
Array[2]
0: "-114.74140625"
1: "45.784484644005"
Array[2]
0: "-115.971875"
1: "48.6489780115889"
Array[2]
0: "-132.758984375"
1: "59.9891712248332"
Array[2]
0: "-162.5099609375"
1: "68.919753529737"
Array[2]
0: "-168.6623046875"
1: "68.9828872543805"
Array[2]
0: "-168.4865234375"
1: "64.2551601036027"
Array[2]
0: "-179.874356794357"
1: "51.0915874974707"
Array[2]
0: "-179.999916362762"
1: "13.1823178795562"
Array[2]
0: "-143.8771484375"
1: "19.9962034117847"
Array[2]
0: "-120.190625"
1: "29.6614549946937"
Vielleicht können Sie helfen... vielen Dank im Voraus
PS. Lösung muss sein, vor allem für die Bing maps-oder universal-Lösung...
- Haben Sie gesehen, diese Funktion hier? github.com/tparkin/Google-Maps-Point-in-Polygon
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Google maps API nicht bereits ein Verfahren zur überprüfung der Punkte in Polygonen. Auf der Suche nach ein bisschen stolperte ich über die Ray-casting-Algorithmus, der festlegt, ob ein X-Y-Koordinatensystem ist im inneren einer gezeichneten Form. Dies zu übersetzen, um breiten-und Längengrad. Die folgenden erstreckt sich die google.maps.polygon.Prototyp zur Verwendung dieses Algorithmus. Fügen Sie einfach diesen code an einer Stelle im code nach google.Karten geladen hat:
Hier haben wir erweitert die Funktionalität von google.maps.Polygon durch Definition einer Funktion mit dem Namen 'Enthält', die verwendet werden können, um zu bestimmen, ob die Breitengrad Längengrad in Funktion parameter sind innerhalb des Polygons oder nicht. Hier machen wir Gebrauch von Ray-casting-Algorithmus und entwickelt eine Funktion, mit der gleichen. Nach so viel Bewegung jetzt, wir können überprüfen, einen Punkt wie folgt:
var point = new google.maps.LatLng(52.05249047600099, -0.6097412109375); var polygon = new google.maps.Polygon({path:[INSERT_PATH_ARRAY_HERE]}); if (polygon.Contains(point)) { //Punkt in polygon }
Für vollständige code und die demo, gehen Sie bitte zu: http://counsellingbyabhi.blogspot.in/2013/01/google-map-check-whether-point-latlong.html
Den ersten
if
- Anweisung sieht gut aus - Sie überprüft, um zu sehen, wenn die Längen der Punkt liegt innerhalb der Länge des polygon-segment.Zweiten
if
sollte die Interpolation der Schnittpunkt des Segments mit den genauen Längengrad des Punktes, und bestimmen, ob das abfangen unter-oder oberhalb der Stelle. Ich denke nicht, dass das ist, was es tut, durch einen einfachen Tippfehler.Sollten Sie auch ein separater Fall, wenn
polygon[i][0]==polygon[j][0]
so dass Sie nicht bekommen, einen Division-durch-null-Fehler.Können Sie mein Klon des libkml Variante, die ich habe, spiegelt sich auch im github hier: https://github.com/gumdal/libkml-pointinpolygon
Mit Hilfe des Autors dieser open-source-module ausgelegt ist, die anzeigt, ob der angegebene Punkt innerhalb des KML-polygon oder nicht. Stellen Sie sicher, dass Sie überprüfen Sie den Zweig "libkml-git" und nicht den "master" - branch aus dem git-Quellen. Die Klasse, die Sie interessiert wäre, ist "pointinpolygon.cc". Es ist C++ source-code, die können Sie in Ihrem Projekt, und bauen Sie es zusammen mit Ihrem Projekt.
Bearbeiten - Die Lösung für point-in-polygon-problem ist unabhängig davon, welche Karte es ist, überlagert auf.
true|false = google.maps.geometrie.poly.containsLocation(googlePoint, googlePoly);