Pregunta

Quiero crear algunos mosaicos de estilo de mapa de calor para superponer sobre nuestros mapas base usando Capas Abiertas. Básicamente, quiero dividir algunos cuadros delimitadores en una cuadrícula y mostrar cada cuadrado de la cuadrícula usando un color diferente en función de cuántos puntos de una muestra caen dentro de ese cuadrado de la cuadrícula.

Las tecnologías involucradas son C #, OpenLayers, SQL Server 2008 y GeoServer.

Mi pregunta es básicamente de enfoque general, no estoy realmente seguro de dónde poner la punta del cincel en esta.

Mi objetivo final es poder tomar cualquier cuadro delimitador arbitrario, calcular una cuadrícula de x-milla por x-milla que encaje dentro de ese cuadro de delimitación, iterar sobre una colección de puntos individuales y asignarlos a un cuadrado de cuadrícula o otro para poder calcular la densidad de puntos por cuadrícula de cuadrícula, luego colorear la cuadrícula de acuerdo con las densidades, luego superponerla en un mapa base de CloudMade usando Capas Abiertas.

Cualquier ayuda en absoluto sería muy apreciada, en todo o en parte.

¿Fue útil?

Solución

Si su cuadro delimitador está alineado con el eje, esto es bastante simple. Simplemente haga su imagen y cree un archivo mundial para ella a mano. El archivo mundial tiene solo 6 líneas de texto, y ya sabe todo lo necesario (x & Amp; y tamaño de píxel, coordenada de la esquina superior izquierda).

Solo asegúrese de utilizar el CENTRO del píxel de la esquina superior izquierda, no la esquina del cuadro.

------ Así es como haría que el archivo mundial -------

Digamos que la esquina superior izquierda de su cuadro delimitador está en 203732x598374, y desea una imagen que tenga rectángulos que tengan 200 m de ancho al este < - > oeste y 300 m de altura al norte < - < !> gt; sur.

Crearía una imagen con el número apropiado de píxeles, luego un archivo mundial que tuviera las siguientes 6 líneas:

200
0
0
-300
203632
598524

Esto corresponde a:

200 == size of one pixel in X
0 == shear1
0 == shear2
-300 == size of one pixel in Y (from top down)
203632 == left edge - 1/2 pixel size (to center on pixel instead of edge of box)
598524 == top edge - 1/2 pixel size (to center on pixel instead of edge of box)

Si usa una imagen .png, querrá guardarla con el mismo nombre, pero como .pgw. Si usa un .jpg, sería .jgw, etc.

Para detalles completos, ver: Wiki en archivos mundiales

Otros consejos

& "; Dividiendo algunos cuadros delimitadores en una cuadrícula, y mostrando cada cuadrado de la cuadrícula usando un color diferente en función de cuántos puntos de una muestra caen dentro de ese cuadrado de la cuadrícula. &"; Esta es una trama y hay funciones en GeoServer para mostrar estas con sombreado de color, leyendas, etc. Creo que será más flexible usar estas funciones que crear mosaicos de imágenes en C #.

De la documentación de GeoServer:

  

Los datos ráster no son simplemente una imagen,   más bien se puede considerar como una cuadrícula   de información georreferenciada, mucho   como un gráfico es una cuadrícula de visual   información (con combinación de rojos,   verdes y azules). A diferencia de los gráficos,   que solo contienen datos visuales, cada uno   punto / píxel en una cuadrícula ráster puede tener   muchos atributos diferentes, con   posiblemente ninguno de ellos tenga una   componente inherentemente visual.

Esto también se denomina mapeo temático o diagramas de contorno o mapas de calor o diagramas 2.5D en otros paquetes SIG.

Puede usar un SIG gratuito como Grass para crea las cuadrículas de trama, pero desde tu descripción no necesitas interpolar (porque cada celda contiene al menos un punto), por lo que podría ser tan fácil rodar su propio código.

EDITAR: hay una biblioteca de código abierto GDAL que puede usar para escribir archivos ráster en varios formatos . Hay enlaces de C #.

Creo que las fórmulas para calcular el centro del píxel superior izquierdo son incorrectas. En el ejemplo, el centro del píxel superior izquierdo estaría abajo y a la derecha de (203732,598374). Entonces, ¿no debería ser lo siguiente?

203832 == left edge + 1/2 pixel size (to center on pixel instead of edge of box)
598224 == top edge - 1/2 pixel size (to center on pixel instead of edge of box)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top