3 votos

Uso de PHP y JavaScript para crear dinámicamente shapefile o KML

Aunque he utilizado software SIG (ArcGIS y acabo de empezar a jugar con QGIS en casa), nunca he investigado el código o la estructura de los archivos shapefiles. Estoy trabajando en un proyecto para mi trabajo, una aplicación basada en la web que se ejecuta en un servidor LAMP y escrito en PHP y JavaScript. La idea es una caja de búsqueda que se utilizará para buscar la "jerarquía geográfica" de una ubicación específica. Esto permitiría a mis usuarios escribir una ciudad, y devolvería el estado, el país y el continente en el que se encuentra la ciudad. Google puede proporcionar esta información y más, pero esto se utilizará en una red cerrada por lo que no es una opción. Estoy utilizando una base de datos MySQL que contiene todos los continentes hasta el nivel de la ciudad. Todavía tengo un poco de camino por recorrer, pero sé lo que hay que hacer para terminar esta parte. Recientemente he pensado que estaría bien añadir la posibilidad de que mis usuarios introduzcan una coordenada geográfica y obtengan el mismo resultado que si hubieran introducido la ciudad en la que se encuentra la coordenada. Ahora mismo no tengo coordenadas en mi base de datos, pero sé que tengo que referenciarlas de alguna manera. Creo que hay una base de datos SDE en esta red, pero no he intentado acceder a ella ni ver qué haría falta para sacar datos de ella. Me gustaría simplemente referenciarla para obtener los datos geográficos en lugar de duplicar los datos en mi base de datos, si es posible (para mantener mi base de datos lo más pequeña posible).

Otra característica que me gustaría proporcionar (ahora, si no es demasiado difícil, o como una futura actualización) es la capacidad de mis usuarios para construir dinámicamente un KML (ya que muchos usuarios estarían usando GoogleEarth) o un shapefile basado en la solicitud específica de los usuarios (un solo país / varios países, estados o ciudades dentro de los países, etc). Para construir el KML, sé que necesitaría una lista de lat/long decimal para la forma del polígono. No estoy seguro de lo que se necesitaría para el shapefile. Mi razonamiento para esta característica es permitir a los usuarios de GoogleEarth la capacidad de generar rápidamente / fácilmente un KML y, para los usuarios de SIG, mi herramienta podría ser sólo otro extremo delantero a la SDE para generar shapefiles específicos.

Así que, específicamente:

  1. ¿Qué tengo que hacer para poder buscar un lugar a partir de una coordenada situada en ese lugar?
  2. ¿Cuál es la mejor manera de crear dinámicamente un KML?
  3. ¿Cómo puedo crear dinámicamente un shapefile manteniendo los datos de la base de datos original?

Como esta es una red cerrada, estoy limitado a las bibliotecas y scripts que otras personas ya han añadido. Espero poder codificar la mayor parte de esto a mano o transcribirlo, y me sentiría más cómodo usando PHP y/o JavaScript. Sin embargo, si hay un script o biblioteca específica que necesitaría, hay un proceso para conseguir que las cosas se muevan a esta red, pero no es sencillo, y luego tiene que ser aprobado, que es su propio proceso.

Como se trata de un trabajo en curso, estoy abierto a sugerencias para mejorar lo que he hecho hasta ahora o lo que pienso para el resto de mi programa.

2voto

MJH Puntos 111

Reg 1: Si tienes una base de datos PostGIS puedes consultar la geometría de la capa digamos, puntos_de_ciudad. la consulta es SELECT nombre_de_ciudad de puntos_de_ciudad donde el_geom = asText('tu entrada wkt) esto puede ser de algo como 'PUNTO(10,5,78,3)'. puedes hacer fácilmente la cadena wkt de esa manera.

reg 2:

KML es un estándar abierto y es un formato XML. Puede encontrar las especificaciones del OGC aquí . Lea también esto tutorial . Los registros seleccionados de su db postGIS pueden ser leídos fácilmente usando PHP y usando simples consultas selectas y crear un archivo KML, hacerlo disponible para ser descargado por los usuarios. Una simple consulta de selección puede ser

suponga que the_geom es la columna geomtry en su capa "db_layer"

SELECT asText(the_geom) from db_layer WHERE column1='s%';

asText(the_geom) devolverá el wkt de la geometría y se puede establecer como el valor de la geometría en los archivos KML

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X