2013-07-21 7 views
6

Ich habe nach einer Möglichkeit gesucht, um zu überprüfen, ob ein Punkt Teil eines Polygons ist; Dieses Polygon wird aus einer Datei geladen.Überprüfen Sie, ob Google Map Point im Polygon von PHP ist

Alle Antworten zu dieser Frage sind mit Javascript gelöst, aber ich muss dies auf der Serverseite tun; Da das Ergebnis dem Benutzer nicht als Webclient angezeigt werden muss, muss es gespeichert und später als Parameter verwendet werden, um eine Gruppe von Benutzern (die das System verwenden) innerhalb dieses Bereichs (Polygons) auszuwählen.

Ich suchte nach einem Google Maps API für PHP, aber es scheint, dass es überhaupt nicht existiert. Ich fand this one, aber es ist nicht mit Google verwandt und konzentriert sich auch auf das Frontend.

Ich suchte auch nach einer REST API; Es wäre relativ einfach gewesen, den Inhalt in meinen php zu laden und zu parsen, aber es sieht so aus, als ob Google all seine Anstrengungen auf die JS API setzt.

Gibt es eine Problemumgehung dafür?

Edit 1: Wie @Spacedman angefordert, das Dateiformat ist ein KML

Klärung 1: Ich erwartete, dass Google ein Tool dafür bieten (wie bei JS existiert); Das Analysieren der Datei, um sie über einen Algorithmus zu prüfen, ist eine Möglichkeit, und ich muss prüfen, ob sie richtig funktioniert.

Antwort

6

Haben Sie versucht, für "PHP-Punkt in Polygon" in Ihrer bevorzugten Suchmaschine gesucht? Top-Hit:

http://assemblysys.com/php-point-in-polygon-algorithm/

Es hat einen Scanline-Algorithmus verwendet, und es gibt einige Beispiele. Alles, was Sie tun müssen, ist Ihre Polygon-Datei in das richtige Format zu lesen (Sie haben vergessen zu sagen, welches Format Sie haben) und rufen Sie die Funktion auf.

+1

Ich habe diese Antwort akzeptiert, weil es am Ende eine Lösung ist, aber nicht die, die ich erwartete, weil ich dachte, dass Google ein einfaches Tool (Funktion, Klasse) zur Verfügung stellen könnte. Am Ende dauerte meine Lösung eine Weile; wie Sie gesagt haben, Parsing der Datei und Verwendung von Punkt in Polygonalgorithmen. – Absulit

+0

Dies wäre nur anwendbar, wenn die Seite vollständig in einem Browser geladen wurde, richtig? Sie könnten die Punkte nicht automatisch mit einem Cron-Job herausfinden, oder? –

1

Sie können somthing wie dies versuchen (in PHP sollte ähnlich sein):

int iCheck=0;  
for (i = 0, v = HowManyVecotrsHasThePolygon - 1; i < HowManyVecotrsHasThePolygon; v = i++) 
        { 
         if (((vectorPointLatitud[i] > ptoLatitud) != (vectorPointLatitud[v] > ptoLatitud)) && (ptoLongitud < (vectorPointLongitud[v] - vectorPointLongitud[i]) * (ptoLatitud - vectorPointLatitud[i])/(vectorPointLatitud[v] - vectorPointLatitud[i]) + vectorPointLongitud[i])) 
          iCheck++; 
        } 

wenn iCheck den Punkt ist, paart außerhalb ist, auch im Inneren

Kasse Polygons Eric Haines. Ich habe die Idee von ihm bekommen.

Die Idee ist, Sie haben einen Ray von Ihrem Punkt zu erstellen und überprüfen, wie viele Kreuzungen zwischen diesem Strahl und die Polygonen Vektoren

Der Algorithmus nur ein bisschen Algebra ist, dass Sie in jedem Buch überprüfen .