2009-12-21 24 views
13

我需要將數據點從一個地理投影(Lat Long,Mercator,UTM)轉換爲另一個,我想知道是否有一組PHP工具或函數可以做到這一點?我試圖根據我發現的公式編寫一個,但它不夠準確,我無法在任何地方找到更好的公式,所以我想知道是否可能有某些預先包裝的功能。否則,PROJ.4之類的東西呢?謝謝!在PHP中的GIS空間功能?

回答

8

在MapServer/MapScript發行版中有一個可用的Proj4 PHP模塊。我認爲這是由DM解決方案,但我找不到任何文件在線。爲了檢查可用的功能,我必須查看源代碼。

無論如何,這是你怎麼能預測之間變換分析座標:

<?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); 

?> 

如果你想要走這條路,你將不得不從Mapserver source代碼文件夾編譯php_proj.c(地圖服務器-XXX/mapscript/php3)並在PHP中加載擴展。正如我之前所說,網上沒有文檔,所以如果您發現任何問題,請告訴我。

希望這會有所幫助。

+0

感謝您的幫助。這似乎是最好的方式,我找到了一個MapServer文檔(http://www.mapserver.org/MapServer.pdf),它有一個關於PHP MapScript安裝的部分和一些如何使用它的例子。到目前爲止,我僅僅掌握了PHP的基本知識,並且已經掌握了我想要做的事情,所以我已經完成了一些練習並閱讀了幾本書,以確保PHP和MySQL能夠做到我需要的。目前看起來很不錯,MapScript看起來就是這樣。感謝您的幫助 - 當我進一步瞭解時,我可能會問您一些具體的幫助。 – 2009-12-21 15:52:31

+0

更新 - 與我的託管設置,它看起來像添加php_mapscript.dll可能是一個問題。當我使用命令「dl('php_mapscript.dll');」時出現錯誤。錯誤是:「警告:dl()[function.dl]:多線程Web服務器不支持 - 在你的php.ini中使用extension = php_mapscript.dll .......」,所以他們看到如果他們可以更改其服務器上的PHP.ini文件。 – 2009-12-21 21:16:35

+0

請注意,有關PROJ4功能的功能未包含在mapscript庫(php_mapscript.dll)中,但在php_proj.dll中。這是一個不同的庫,您必須從php_proj.c中編譯自己。我只有在Linux下編譯它的經驗,但也許你可以在Windows上嘗試。 – amercader 2009-12-21 21:53:18

1

您可以使用我從proj4js翻譯可以在這裏找到的API proj4php:https://sourceforge.net/projects/proj4php/

它從WGS84的偉大工程,以Lambert93,但需要一些修復與他人的預測工作。我可以搭把手。

再見。

+0

proj4php非常有幫助,我測試過了,結果非常精確。 – 2013-09-03 14:53:51

+0

[_「這個項目沒有文件。」_](http://sourceforge.net/projects/proj4php/files/?source=navbar) – elrobis 2015-08-05 15:03:56