4 votos

Cómo registrar los shapefiles a una imagen?

Estoy de generación de imágenes a partir de diversas fuentes y las proyecciones no son necesariamente conocidas de antemano. Las imágenes están sujetas a la interpolación y otras alteraciones mientras se está procesando, pero puedo generar 2D matrices de latitud y longitud de los puntos que corresponden a los píxeles en la imagen renderizada.

Tengo que ser capaz de dibujar geo-político de los límites en la parte superior de las imágenes a partir de la latitud/longitud matrices como una referencia. Yo normalmente no trabajo con SIG tipo de problemas, pero he investigado un poco y creo que lo que quiero hacer es tomar en un archivo de forma con el lat/lon puntos que definen la línea de los segmentos que componen la geo-político de los límites y interpolar las localidades más próximas para los bordes de los segmentos de línea en mi imagen.

Aunque tengo una idea para un enfoque general, hay una mejor manera de hacer esto en Java, o una biblioteca que proporciona la funcionalidad? He encontrado GeoTools que iba a hacer lo que quiero, si la proyección era conocido de antemano, pero tengo que ser capaz de generar superposiciones sobre la marcha. Además necesito las siguientes características:

  • Deben trabajar con diferentes resoluciones, los límites todavía debe ser legible cuando se aplica el zoom en gran medida. Es decir, cuando un píxel en la imagen de la fuente está representado por varios píxeles en la pantalla, los límites deben ser elaborados correctamente.
  • Debe ser capaz de hacer mapas en tiempo real, o al menos con razonable de latencia. Aunque las proyecciones no son necesariamente conocidos de antemano, que no va a cambiar a menudo. Si alguna cantidad de automatizado de preprocesamiento se puede hacer antes de tiempo para mejorar el rendimiento, que es una opción.
  • Una fuente abierta (pero en el comercio de usar), la solución es la preferida, pero puedo ir con un cerrado de solución de código si es necesario.

5voto

cjstehno Puntos 131

Lo que quieres se llama "deformación" en SIG. Se aplica principalmente a las imágenes, en lugar de shapefiles, pero el procedimiento para la creación de archivos no es difícil. Vamos a echar un vistazo.

Los puntos blancos en la primera imagen de abajo representa una matriz de (lat, lon) de los puntos de cuadrícula dibujada en su ubicación correcta en la imagen. La serie no aparecen perfectamente regular, debido a las distorsiones en la imagen (incluyendo distorsiones debido a su proyección). Vamos a llamar a estos "diana", señala. Usted tiene la intención de mantener esta imagen de como es: su propósito es trazar una característica más de la imagen en la visualmente los lugares correctos.

De la imagen de destino

Target image

El shapefile características de sí mismos se dan como parte de una secuencia de puntos. Cada punto se especifica con un par de coordenadas, latitud y longitud. Para ilustrar esto, considere la siguiente función lineal (gruesa gris segmentos de línea con la luz roja de los vértices). Vamos a llamar a estos "fuente" vértices. Se muestran superpuestos en el mismo conjunto de (lat, lon) que los puntos de referencia se ve en la imagen, pero ahora estos puntos de referencia son dibujados en un estándar de sistema de coordenadas Cartesianas, donde serán espaciados regularmente.

Característica de origen de

Source feature

El uno-a-uno de la correspondencia de la cuadrícula de origen vértices con el objetivo de vértices de la cuadrícula se puede pensar en varias maneras útiles. Uno es pensar de cada fuente vértice llegar desplazadas hacia su objetivo contraparte:

Vector de desplazamientos

Vector displacements

Estos son los mismos puntos de color rojo oscuro que se muestra en la figura anterior. Sus puntos de destino, en azul, son los mismos que los puntos blancos que se muestra en la primera imagen.

Necesitamos para llevar a cabo este mismo "warping" en el archivo de forma característica. Esto requiere interpolar el vector de desplazamientos. La interpolación bilineal normalmente funciona muy bien. Es rápido y fácil, porque todo lo que tienes que hacer para desplazar cada característica vértice es

  1. Encontrar la fuente de la celda de la cuadrícula en la que se encuentra.

  2. Captura las coordenadas de los objetivos de los cuatro vértices de la celda de cuadrícula de origen.

  3. Por separado y de forma independiente, de interpolar las coordenadas. Este será el objetivo de coordenadas de la fuente de vértice.

El independiente de interpolación en el paso 3 no es nada más que buscando valores en dos gruesas mallas: uno es el de la cuadrícula de coordenadas x de los objetivos (que se muestra a continuación) y la otra es una cuadrícula de coordenadas y de los objetivos (inmediatamente después).

X Cuadrícula

X grid

Y Cuadrícula

Y Grid

Al dibujar la característica en la imagen, el uso de la deformada de coordenadas, se mostrará donde está destinado a ser:

Result

(Urdido para ser exactos, de la forma vértices necesita ser incluido dentro de la matriz de puntos de referencia. De lo contrario, usted necesita para extrapolar, que rápidamente se vuelve incierto.)

Existen algunos programas de SIG para realizar esta operación (y tal vez algún tipo e informado lector será capaz de proporcionar un enlace). Como se puede esperar de esta descripción, su entrada consistirá en:

(a) Una red de puntos de origen. (No son a menudo llamados "puntos de control", o Gcp, porque una norma de aplicación es la de convertir las coordenadas obtenidas en el campo estándar de las coordenadas geográficas.) Algunas de las soluciones más general, el proceso de un triangular de la red de puntos de origen.

(b) la correspondiente cuadrícula de los puntos de destino.

(c) Una capa de formas vectoriales, como las que se encuentran en un shapefile. Un ejemplo de esto es Kenneth McVay del ShapeWarp script para ArcView 3.

0voto

Celso Puntos 66

Una opción que tienes es implementar una arquitectura similar a la siguiente:

  1. la carga de los límites políticos de un servidor WMS de su elección. Ambos Mapserver, Geoserver y son una excelente fuente abierta decisiones con Geoserver ser una solución de Java, y más fácil de configurar. Mapserver debe dar un mejor rendimiento

  2. modificar la representación de la imagen de código de manera que en el momento en el que usted necesita para dibujar los límites calcula un cuadro delimitador de la zona cubierta (en lat/lon), el tamaño de la imagen (en píxeles) y la proyección de sus datos (ya se dijo que la proyección no es conocido de antemano, y que por lo tanto puede variar dependiendo de los datos que se están procesando)

  3. emitir un WMS getMap solicitud (suena complicado, pero en realidad es una simple solicitud HTTP GET con el estándar de los parámetros) para el WMS servidor configurado en el paso 1 con el cuadro delimitador, de proyección y tamaño de la imagen calculada en el paso 2. El servidor WMS se encargará de convertir los datos de origen a la solicitud de proyección. Usted puede utilizar httpclient para manejar la petición.

  4. combinación de la imagen devuelta por el servidor WMS en su propia imagen utilizando Java imágenes de las bibliotecas

Las ventajas de esta solución son que el WMS es un estándar y por lo tanto usted puede intercambiar Geoserver para cualquier otro servidor WMS en cualquier momento.

El WMS de representación se puede hacer en un servidor completamente diferente o clúster de servidores, la descarga de la máquina local.

Usted puede cambiar los límites políticos y/o añadir capas o imágenes en cualquier momento con un muerto sencilla personalización de la WMS pedido y de configuración en el WMS lado.

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