7 votos

Método para generar puntos en cualquier proyección

Estoy escribiendo una aplicación en ArcMap para generar una cuadrícula de puntos. Estos puntos tienen una disposición muy definida y he elaborado un algoritmo que funciona muy bien bajo un sistema de coordenadas proyectadas. Sin embargo, en cuanto lo intento bajo un sistema de coordenadas geográficas, mis matemáticas no se sostienen tan bien y yo no soy un experto en este tipo de matemáticas (pero estará dispuesto a aprender si se le indica la dirección correcta)

¿Hay algún método sugerido, bibliotecas o cualquier otra cosa que pueda facilitar esto?

Un poco más de información sobre los puntos en sí: En un círculo de 144 pies de radio, los puntos se generarán en un patrón de tipo hexagonal. El hexágono está formado por un triángulo equilátero con lados de 9 metros (en metros porque las propiedades de ArcMap IPoint X,Y están en metros).

4voto

cjstehno Puntos 131

La sugerencia de @om_henners funcionará bien, especialmente si está creando la cuadrícula de la manera "correcta".

El a la derecha considera que cada punto de la cuadrícula está desplazado del origen por la suma de múltiplos integrales de dos vectores base. En coordenadas proyectadas, una buena elección de vectores base para una malla triangular consiste en un vector arbitrario de la longitud deseada ( Por ejemplo , 9 metros) junto con una rotación de ese vector en 120 grados. Por ejemplo, si quieres que las bases de los triángulos sean horizontales puedes elegir que el primer vector sea e \= (9, 0). El segundo sería entonces igual a f \= (-9/2, Sqrt(3)*9/2) = (-4,5, 7,794229). Dejando que O \= (Ox, Oy) son las coordenadas del origen, todos los demás puntos de la cuadrícula son de la forma

i * e + j * f + O

donde i y j son números enteros. Aquí está la gracia: para compensar la distorsión en las coordenadas geográficas, dividir la primera coordenada de cada vector base por el coseno de la latitud, convertir todos los desplazamientos a grados, pero por lo demás todo lo demás sigue igual.

Por ejemplo, a 40 grados de latitud el coseno es 0,766044. Esto convierte e a e' \= (9/0,766044, 0) = (11,74867, 0) y f se convierte en f' \= (-4.5/0.766044, 7.794229) = (-5.874333, 7.794229). Ahora convierta estas cuatro coordenadas en grados: la división por 111,111 (metros por grado) suele ser suficiente. Utilizando estos vectores en lugar de e y f en la fórmula de la cuadrícula, pero manteniendo O en el mismo lugar (y utilizando los mismos conjuntos de i y j ) establece su cuadrícula en coordenadas geográficas. En estas distancias cortas (hasta 144 pies en este caso, o hasta varios kilómetros en general) se puede obtener una precisión extremadamente alta ajustando primero la latitud a una latitud esférica equivalente antes de calcular el coseno, pero normalmente el error es tan pequeño (mucho menos del 1%) que no importa.

El enfoque vectorial se ilustra en un antiguo artículo mío .

Por cierto, una buena característica es que puedes girar y desplazar fácilmente la cuadrícula. Para girarla, basta con rotar el original vectores base e y f por la cantidad deseada, ajustar sus primeras coordenadas por el coseno, y luego volver a calcular los puntos de la cuadrícula como combinaciones lineales de estos vectores base ajustados. Para desplazar la malla, basta con desplazar el origen O . De este modo, ya no se es esclavo del sistema de coordenadas: se puede orientar y posicionar la rejilla según las necesidades de la aplicación. Otra característica interesante es que todas las cuadrículas regulares matemáticamente posibles se puede construir de esta manera. Sólo hay que cambiar e y f . Por ejemplo, cuando f está a 90 grados de e creará una cuadrícula rectangular.

2voto

Josh Puntos 569

¿Hay alguna razón por la que no pueda crear las características en un SRS que sea verdadero para la distancia y el área y luego proyectar/transformar las características a un SRS geográfico cuando haya terminado?

¿Tal vez algo como el ejemplo del Tissot Indicatrix de Matt Perry? http://www.perrygeo.net/wordpress/?p=4 Las características se crean en una proyección ortográfica y luego se proyectan a la geográfica.

Supongo que la respuesta depende realmente de lo que se quiera conseguir. Si quieres que los puntos reflejen el mismo punto sobre el terreno, querrás crearlos en un SRS diferente y proyectarlos a geográfico. Si realmente no te importa preservar la ubicación de cada punto, pero quieres que la forma aparezca verdadera en geográfico, yo los crearía directamente allí.

1voto

ESV Puntos 4591

@baens Sí, estoy de acuerdo con @Jared - No hay manera con una proyección a una esfera y de vuelta para preservar la longitud y el área. Podrías utilizar una de las proyecciones "de compromiso" (ver wikipeda ), pero si no es así, es posible que tenga que elegir.

Dicho esto, a tu escala podrías usar el rápido y sucio 111,111 metros es un grado en la dirección y, y 111,111 metros * cos (latitud) es un grado en la dirección x. Esto es de la respuesta de @whuber a desplazar una latitud y una longitud en metros .

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