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.
arcgis-server
arcgis-10.1
c#
distance
arcgis-explorer
SASS_Shooter
fuente
fuente
Respuestas:
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 .
fuente
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.
fuente
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.
fuente