2009-12-21 6 views
13

Мне нужно преобразовать точки данных из одной географической проекции (Lat Long, Mercator, UTM) в другую, и мне интересно, есть ли набор инструментов или функций PHP, которые могут это сделать? Я попробовал написать один сам по формулам, которые я нашел, но он не был достаточно точным, и я не могу найти лучшие формулы где угодно, поэтому мне было интересно, есть ли где-то какие-то расфасованные функции. В противном случае, что-нибудь вроде PROJ.4? Благодаря!Пространственные функции ГИС в PHP?

ответ

8

Существует модуль PHP Proj4, доступный в дистрибутиве MapServer/MapScript. Я думаю, что это поддерживается DM Solutions, но я не мог найти документацию в Интернете. Чтобы проверить доступные функции, мне пришлось посмотреть исходный код.

Во всяком случае, это то, как вы можете tranform координаты между проекциями:

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

?> 

Если вы хотите идти по этому пути, вы должны скомпилировать php_proj.c из папки с Mapserver source кодом (MapServer-XXX/mapscript/php3) и загрузить расширение в PHP. Как я уже говорил, в Интернете нет документации, поэтому дайте мне знать, если вы найдете какие-либо проблемы.

Надеюсь, это поможет.

+0

Благодарим за помощь. Кажется, это лучший способ, и я нашел документ MapServer (http://www.mapserver.org/MapServer.pdf), в котором есть раздел по установке PHP MapScript и некоторые примеры его использования. До сих пор у меня есть только базовые знания PHP, и у меня в голове то, что я хочу сделать, поэтому я проработал несколько упражнений и прочитал пару книг, чтобы убедиться, что PHP и mySQL способны делать Что мне нужно. Пока это хорошо, и MapScript выглядит как вещь. Спасибо за вашу помощь - я могу попросить вас о какой-то конкретной помощи, когда я получу в ней немного больше. –

+0

Обновление - с моей установкой хостинга, похоже, что это может быть проблемой для добавления php_mapscript.dll. У меня возникла ошибка, когда я использовал команду «dl (« php_mapscript.dll »);». Ошибка: «Предупреждение: dl() [function.dl]: не поддерживается на многопоточных веб-серверах - используйте расширение = php_mapscript.dll в php.ini в .......», поэтому они видят, если они могут изменить файл PHP.ini на своем сервере. –

+0

Имейте в виду, что функции, относящиеся к функциональности PROJ4, не включены в библиотеку mapcript (php_mapscript.dll), а в php_proj.dll. Это другая библиотека, которую вы должны скомпилировать из php_proj.c. У меня есть опыт компиляции в Linux, но, возможно, вы можете попробовать в Windows. – amercader

0

Можете ли вы запустить ArcGIS Server? ESRI имеет новую службу, называемую службой геометрии, которая позволяет выполнять геометрию манипуляции/преобразования/etc через различные интерфейсы обслуживания.

Вы можете найти примерную версию на http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer, с которой вы можете протестировать.

1

Вы можете использовать апи proj4php, что я в переводе с proj4js и доступна здесь: https://sourceforge.net/projects/proj4php/

Он отлично работает с WGS84 в Lambert93, но нужно немного исправить, чтобы работать с другими прогнозами. Я могу помочь.

До свидания.

+0

proj4php очень полезен, я его протестировал, результат довольно точный. –

+0

[_ "В этом проекте нет файлов." _] (Http://sourceforge.net/projects/proj4php/files/?source=navbar) – elrobis

Смежные вопросы