2009-12-21 20 views
13

Necesito convertir puntos de datos de una proyección geográfica (Lat Long, Mercator, UTM) a otra y me pregunto si hay un conjunto de herramientas PHP o funciones que puedan hacer esto. Traté de escribir uno yo mismo en base a las fórmulas que encontré, pero no era lo suficientemente preciso y no puedo encontrar mejores fórmulas en ninguna parte, por lo que me preguntaba si podría haber algunas funciones preempaquetadas en alguna parte. En su defecto, ¿qué tal algo como PROJ.4? ¡Gracias!¿Funciones espaciales GIS en PHP?

Respuesta

8

Hay un módulo PHP de Proj4 disponible en la distribución MapServer/MapScript. Creo que DM Solutions lo manipula, pero no pude encontrar ninguna documentación en línea. Para verificar las funciones disponibles, tuve que mirar el código fuente.

De todos modos, se trata de cómo se puede transformar de coordenadas entre las proyecciones:

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

?> 

Si quieres ir esta manera, se tendrá que compilar php_proj.c de la carpeta Mapserver source código (MapServer-XXX/mapscript/php3) y carga la extensión en PHP. Como dije antes, no hay documentación en línea, así que avíseme si encuentra algún problema.

Espero que esto ayude.

+0

Gracias por su ayuda. Este parece ser el mejor camino a seguir, y he encontrado un documento de MapServer (http://www.mapserver.org/MapServer.pdf) que tiene una sección sobre la instalación de PHP MapScript y algunos ejemplos de cómo usarlo. Hasta ahora, tengo un conocimiento básico de PHP y tengo en mente lo que quiero hacer, así que he trabajado en algunos ejercicios y he leído un par de libros para asegurarme de que PHP y mySQL son capaces de hacer lo que necesito. Se ve bien hasta ahora, y MapScript se ve como la cosa. Gracias por su ayuda; podría pedirle ayuda específica cuando lo investigue un poco más. –

+0

Actualización: con mi configuración de host, parece que podría ser un problema agregar php_mapscript.dll. Obtuve un error cuando utilicé el comando "dl ('php_mapscript.dll');". El error fue: "Advertencia: dl() [function.dl]: No es compatible con los servidores web multiproceso - use extension = php_mapscript.dll en su php.ini en .......", entonces están viendo si pueden cambiar el archivo PHP.ini en su servidor. –

+0

Tenga en cuenta que las funciones relacionadas con la funcionalidad de PROJ4 no se incluyen en la biblioteca mapscript (php_mapscript.dll), sino en php_proj.dll. Es una biblioteca diferente que debe compilar usted mismo desde php_proj.c. Solo tengo experiencia en compilarlo bajo Linux, pero tal vez puedas probarlo en Windows. – amercader

1

Usted puede utilizar la API proj4php que he traducido del proj4js y está disponible aquí: https://sourceforge.net/projects/proj4php/

Funciona muy bien de WGS84 a Lambert93, pero necesita un poco de solución para trabajar con las otras proyecciones. Puedo ayudar.

Adiós.

+0

proj4php es muy útil, lo he probado, el resultado es bastante preciso. –

+0

[_ "Este proyecto no tiene archivos." _] (Http://sourceforge.net/projects/proj4php/files/?source=navbar) – elrobis