2009-12-21 8 views
13

Ich muss Datenpunkte von einer geografischen Projektion (Lat Long, Mercator, UTM) in eine andere konvertieren und ich frage mich, ob es eine Reihe von PHP-Tools oder Funktionen gibt, die dies tun können? Ich habe versucht, eine selbst zu schreiben, basierend auf Formeln, die ich gefunden habe, aber es war nicht genau genug und ich kann nirgends bessere Formeln finden, also fragte ich mich, ob es irgendwo vorgefertigte Funktionen geben könnte. Ist das nicht etwas wie PROJ.4? Vielen Dank!GIS räumliche Funktionen in PHP?

Antwort

8

In der MapServer/MapScript-Distribution ist ein PHP-Modul von Proj4 verfügbar. Ich denke, dass es von DM Solutions gemanagt wird, aber ich konnte online keine Dokumentation finden. Um die verfügbaren Funktionen zu überprüfen, musste ich mir den Quellcode ansehen.

Wie auch immer, dies ist, wie Sie Koordinaten zwischen Projektionen tranform können:

<?php 

    //UTM zone 31N 
    $projDefSrc = array("proj=utm","zone=31","ellps=intl","units=m","no_defs"); 
    $pjSrc = pj_init($projDefSrc); 

    //WGS84 
    $projDefDest = array("proj=longlat","ellps=WGS84","datum=WGS84","no_defs"); 
    $pjDest = pj_init($projDefDest); 


    $x = 446423; 
    $y = 4610005; 

    $test = pj_transform($pjSrc,$pjDest,$x,$y); 

    //Outputs: Array ([u] => 2.3567240656 [v] => 41.6384346565) 
    print_r($test); 

?> 

Wenn Sie diesen Weg gehen wollen, werden Sie php_proj.c vom Mapserver source Code-Ordner (mapserver-XXX/mapscript kompilieren/php3) und lade die Erweiterung in PHP. Wie ich bereits sagte, gibt es keine Dokumentation online, also lassen Sie mich wissen, wenn Sie irgendwelche Probleme finden.

Hoffe, das hilft.

+0

Danke für Ihre Hilfe. Dies scheint der beste Weg zu sein, und ich habe ein MapServer-Dokument (http://www.mapserver.org/MapServer.pdf) gefunden, das einen Abschnitt über die PHP MapScript-Installation und einige Beispiele für die Verwendung enthält. Ich habe bisher nur Grundkenntnisse in PHP und habe in meinem Kopf, was ich machen möchte, also habe ich ein paar Übungen durchgelesen und ein paar Bücher gelesen, um sicherzustellen, dass PHP und mySQL in der Lage sind was ich brauche. Es sieht soweit gut aus, und MapScript sieht genau so aus. Vielen Dank für Ihre Hilfe - ich kann Sie um Hilfe bitten, wenn ich ein wenig mehr darauf eingehe. –

+0

Update - mit meinem Hosting-Setup sieht es aus wie es ein Problem sein könnte, die php_mapscript.dll hinzuzufügen. Ich habe einen Fehler bekommen, als ich den Befehl "dl ('php_mapscript.dll');" verwendet habe. Der Fehler war: "Warnung: dl() [function.dl]: Nicht unterstützt in Multithread-Webservern - verwenden Sie die Erweiterung = php_mapscript.dll in Ihrer php.ini in .......", damit sie sehen, ob Sie können die PHP.ini-Datei auf ihrem Server ändern. –

+0

Beachten Sie, dass die Funktionen bezüglich der PROJ4-Funktionalität nicht in der mapscript-Bibliothek (php_mapscript.dll), sondern in php_proj.dll enthalten sind. Es ist eine andere Bibliothek, die Sie selbst von php_proj.c kompilieren müssen. Ich habe nur Erfahrung damit, es unter Linux zu kompilieren, aber vielleicht können Sie Windows ausprobieren. – amercader

1

können Sie die api proj4php verwenden, die ich von proj4js übersetzt und ist hier verfügbar: https://sourceforge.net/projects/proj4php/

Es funktioniert großartig von WGS84 zu Lambert93, aber etwas repariert werden muss mit den anderen Projektionen arbeiten. Ich kann helfen.

Tschüss.

+0

proj4php ist sehr hilfreich, ich habe es getestet, das Ergebnis ist ziemlich genau. –

+0

[_ "Dieses Projekt hat keine Dateien." _] (Http://sourceforge.net/projects/proj4php/files/?source=navbar) – elrobis