Nuevo en ArcGIS y desea calcular la distancia entre dos puntos "mientras el pez nada"


9

Tenemos una capa llamada Hidrografía, que es el área del agua para una tarea determinada. Tengo un punto de estación y un punto objetivo. Necesito calcular la distancia entre esos dos puntos pero dentro de la hidrografía. (los barcos no pueden ir por tierra)

El cálculo de distancia de DefenseService parece aceptable pero parece estar en línea recta ya que no toma ningún Ráster como entrada. El Euclidiano parece estar casi allí, pero no puedo encontrar nada que sea sencillo.

Estoy usando ArcGIS Explorer 2500, ArcGIS for Server 10.1 SP1 Enterprise, y estamos escribiendo nuestros servicios y herramientas en C #.

Tengo la carga de la hidrografía, la creación de IPoints, ¡pero no sé qué hacer a continuación!

Cualquier ayuda apreciada, por favor.


1
No hay "respuesta aceptada" aquí, pero creo que es una pregunta muy similar: gis.stackexchange.com/questions/33799/…
Mapperz

Mi nivel de emoción comenzó a subir de inmediato hasta que dijo que no era un programador. Esto no se puede hacer usando herramientas. Tengo una ventana de herramientas personalizada con una ubicación seleccionada y una lista de objetivos. Necesito llamar a un método en el servidor y llenar la lista con las distancias a cada objetivo.
SASS_Shooter

¿Son sus líneas de capa de hidrografía o polígonos?
Conor

Son los polígonos que convertimos en una trama.
SASS_Shooter

Su caso de uso es un poco confuso. ¿Estás tratando de encontrar la distancia más corta desde dos puntos a lo largo del borde de un lago? ¿O sus estaciones corresponden a una estación fluvial (que está en el fondo del lago)?
DPierce

Respuestas:


4

Utilice las herramientas de distancia de costo y ruta de costo de la extensión Spatial Analyst.

Puedes crear un Ráster a partir de tus Polígonos de Hidrografía. Luego, asegúrese de que las celdas de trama que representan el agua obtengan un valor bajo (por ejemplo, 1) y las otras celdas de trama obtengan un valor alto (por ejemplo, 1000). Luego puede usar este ráster como ráster de distancia de costo en la Herramienta de ruta de costo .


Sí, descubrí que la Distancia de costo toma un ráster como entrada y mis puntos en el ráster de hidrografía para comenzar y finalizar. El valor devuelto es una polilínea de la que puedo obtener longitud.
SASS_Shooter

1

He hecho algo similar para las líneas centrales sobre los canales y los cursos de agua naturales. El enfoque que utilicé fue TIN los puntos, bisecar el TIN y luego crear un segundo TIN a partir de los vértices originales y luego las bisectrices atravesar usando un algoritmo modificado de Dijkstra descartando opciones tan pronto como sea evidente que no formarán la solución más simple. . La modificación fue que la línea podría terminar en el punto de 'solución' o una ruta anterior si ya existiera. No hay una solución lista para usar para esto y si no es un programador o al menos está en posición de ponerse del lado bueno de uno, su única opción es rastrear con un desplazamiento en una geodatabase y mirar el campo shape_length.


TIN = Red Triangular Irregular, una red de puntos y líneas de conexión para que cada punto esté conectado a sus vecinos más cercanos y no se crucen líneas. Para esto ver http://en.wikipedia.org/wiki/Delaunay_triangulation . No utilicé los objetos TIN de ESRI, en su lugar encontré un código para la triangulación y los guardé en la memoria, algo así como http://www.codeproject.com/Articles/492435/Delaunay-Triangulation-For-Fast-Mesh-Generation .

Para el algoritmo de ruta más corta, consulte http://en.wikipedia.org/wiki/Dijkstra 's_algorithm tiene una buena imagen; a pesar del nombre complicado, es realmente bastante simple.

A partir de los puntos que forman las líneas, hice una triangulación de Delaunay, luego encontré el punto medio de cada borde del triángulo (geometría básica ... promedio X, promedio Y) y luego inserté los puntos que caían dentro de los polígonos en la malla que da un centrar la ruta y los enlaces a todos los vértices en el límite. Luego, excluyendo las facetas que siguen las orillas del curso de agua, rastree la red utilizando el algoritmo de Dijkstra y eventualmente encontrará una ruta desde el punto A al punto B que se extiende aproximadamente por el centro de los cursos de agua. Habrá muchas rutas posibles, así que mantuve un peso en cada vértice y detuve una ruta cuando la longitud acumulativa excedía la longitud ya registrada, y si era menor, actualice el vértice con la longitud acumulativa más corta; esto reduce la cantidad de caminos trazados, y puede haber muchos;

Alternativamente, una vez triangulado, puede convertir los bordes de los triángulos en dos líneas de puntos como una clase de entidad, construir una red y luego hacer un seguimiento. Estoy seguro de que las rutinas de rastreo de ESRI son mucho más rápidas que las mías, pero tenía una necesidad específica y no podía resolverlo usando redes geométricas.


Michael: soy desarrollador de C #. Simplemente muy nuevo para ArcGIS y sus herramientas de programación. Había encontrado una solución lista para usar con Military Analyst, pero ESRI, con toda su sabiduría, la está descartando. ¿Qué quiere decir con TIN los puntos y qué algoritmo Dyjkstra utilizó?
SASS_Shooter

1

Estoy agregando esto para cualquier persona en el futuro que lea este hilo.

Aquí está todo lo que he aprendido al profundizar en este problema y obtener una distancia completa entre los puntos.

Nuestro primer problema surgió de la naturaleza estática de RasterCatalog. Cambiar los rásteres en los que se basa esto NO cambia el ráster dentro del RasterCatalog. Resultó que la nuestra tenía una versión antigua que no estaba cerca de un mapa de la costa. Lección aprendida: Reconstruya el RasterCatalog CADA VEZ que cambie los Rasters en los que se basa.

El Ráster de distancia con pesas agregadas se convierte en algo bastante engorroso para trabajar. Observe el siguiente escenario: el valor original de la trama es 1 distancia total que quiero ver es 117 km. El tamaño de la celda es de 1 metro. Si el ráster ahora tiene un valor ponderado de 48, ¡entonces la distancia total que quiero mirar se convierte en 117 km * 48! Entonces, la distancia en el método CostDistance no es la distancia de la celda sino la distancia ponderada, aparentemente agregando el valor en cada celda hasta que la suma de cada celda = el valor pasado para la distancia total. ¡Incluso si el tamaño de la celda en sí es de 1 metro!

El ráster de distancia se centra en un punto de origen. Entonces, cuando llama a la rutina CostDistance, no desea incluir el punto de origen en esa lista. si lo haces, obtendrás un punto con una distancia de 0. (esto incluso daña el soporte de ESRI)

Si bien muchos de los métodos usan la envolvente para restringir su proceso, los dos más caros, establecer un valor para el ráster y extraer un ráster sin un área dentro de un polígono, ignoran todas las configuraciones de envolvente y automáticamente aplican esto a todo el ráster. Desafortunadamente para nosotros, solo podemos acortar esto creando segmentos superpuestos masivos y asignando un segmento a un área encuadrada específica. Pero al hacerlo, debemos tener cuidado (lo cual es difícil) de que no exista un área de operación primaria en el área superpuesta incorrecta. (en otras palabras, todas nuestras superposiciones deben elegirse cuidadosamente para que no contengan ningún punto de interés principal). La razón de esto es que navegamos por el RasterCatalog eligiendo el ráster correcto en función de dónde existe la estación de la Guardia Costera elegida. Para complicar aún más nuestro proceso, la superposición debe permitirnos navegar hasta 120 km de distancia de nuestro punto de origen sin salir del borde del mapa y no superponerse con otros puntos de interés principales. Sheesh

Las únicas otras cosas que he aprendido es que es fácil hacer cálculos matemáticos con el ráster, pero cuando quieres 'hacer un agujero' en el ráster (bloqueos) o establecer una dona con un valor y el interior de la dona que tiene un el valor de 1 (se demora como un bloqueo) termina con una combinación compleja de herramientas y llamadas de ArcObject. Lo que lleva a la lección final aprendida: ArcObjects no puede hacer todo. Por lo tanto, ocasionalmente me veo obligado a hacer cosas en las herramientas lentas y engorrosas que se escribieron en Python. También aprendí que los desarrolladores de herramientas ESRI no sabían nada acerca de mantener la consistencia. A veces tomaron una base de datos ráster, otras veces necesitaban un ráster y, en ocasiones, necesitaban un conjunto de características. ¡Y no devuelven los datos en el mismo formato que requieren como entrada!

¿Confuso? No te preocupes, es ESRI.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.