Nuovo in ArcGIS e vuoi calcolare la distanza tra due punti "mentre il pesce nuota"


9

Abbiamo uno strato chiamato Idrografia che è l'area dell'acqua per un determinato incarico. Ho un punto di stazione e un punto di destinazione. Devo calcolare la distanza tra quei due punti ma all'interno dell'idrografia. (le barche non possono andare oltre la terra)

Il calcolo della distanza di DefenseService sembra passabile ma sembra essere in linea retta poiché non accetta alcun Raster come input. L'Euclideo sembra quasi essere lì, ma non riesco a trovare nulla di diretto.

Sto usando ArcGIS Explorer 2500, ArcGIS per Server 10.1 SP1 Enterprise e stiamo scrivendo i nostri servizi e strumenti in C #.

Ho il caricamento dell'idrografia, la creazione degli IPoints, ma in perdita su cosa fare dopo!

Qualsiasi aiuto apprezzato, per favore.


1
Non c'è "nessuna risposta accettata" qui, ma penso che sia una domanda molto simile: gis.stackexchange.com/questions/33799/…
Mapperz

Il mio livello di eccitazione ha iniziato a salire immediatamente fino a quando ha detto che non era un programmatore. Questo non può essere fatto usando gli strumenti. Ho una finestra degli strumenti personalizzati con una posizione selezionata e un elenco di obiettivi. Devo chiamare un metodo sul server e compilare l'elenco con le distanze da ciascun obiettivo.
SASS_Shooter il

Le tue linee di strato idrografico o poligoni?
Conor,

Sono i poligoni che convertiamo in raster.
SASS_Shooter

Il tuo caso d'uso è un po 'confuso. Stai cercando di trovare la distanza più breve da due punti lungo il bordo di un lago? Oppure le tue stazioni corrispondono a una stazione fluviale (che si trova in fondo al lago)?
DPierce,

Risposte:


4

Utilizzare gli strumenti Distanza costo e Percorso costo dall'estensione Analista spaziale.

È possibile creare un raster dai poligoni dell'idrografia. Quindi assicurarsi che le celle raster che rappresentano l'acqua ottengano un valore basso (ad es. 1) e che le altre celle raster ottengano un valore elevato (ad es. 1000). È quindi possibile utilizzare questo raster come raster di distanza di costo nello strumento Percorso costi .


Sì, ho scoperto che la distanza di costo accetta un raster come input e i miei punti sul raster di idrografia per l'inizio e la fine. Il valore restituito è una polilinea da cui posso ottenere la lunghezza.
SASS_Shooter,

1

Ho fatto qualcosa di simile per le linee centrali su canali e corsi d'acqua naturali. L'approccio che ho usato era di TIN i punti, dividere in due la TIN, quindi creare una seconda TIN dai vertici originali e le bisettrici quindi attraversano usando un algoritmo di Dijkstra modificato scartando le opzioni non appena è evidente che non formeranno la soluzione più semplice . La modifica era che la linea poteva terminare nel punto di "soluzione" o in un percorso precedente se ne esistesse già uno. Non esiste una soluzione pronta all'uso per questo e se non sei un programmatore o almeno in una posizione per ottenere il lato positivo di uno, l'unica opzione è quella di tracciare con un offset in un geodatabase e guardare il campo shape_length.


TIN = Triangular Irregular Network, un reticolo di punti e linee di collegamento in modo tale che ciascun punto sia collegato ai vicini più vicini e che nessuna linea si intersechi. Per questo vedi http://en.wikipedia.org/wiki/Delaunay_triangulation . Non ho usato gli oggetti ESRI TIN, invece ho trovato un po 'di codice per la triangolazione e li ho tenuti in memoria, qualcosa come http://www.codeproject.com/Articles/492435/Delaunay-Triangulation-For-Fast-Mesh-Generation .

Per l'algoritmo del percorso più breve vedi http://en.wikipedia.org/wiki/Dalgoritmo di Dijkstra ha una bella immagine; nonostante il nome complicato è davvero abbastanza semplice.

Dai punti che formano le linee ho fatto una triangolazione di Delaunay, poi ho trovato il punto medio di ogni bordo del triangolo (geometria di base ... media X, media Y) e quindi ho inserito i punti che ricadevano all'interno dei poligoni nella mesh che dà un percorso centrale e collegamenti a tutti i vertici sul confine. Quindi escludendo le sfaccettature che seguono le rive del corso d'acqua, traccia la rete usando l'algoritmo di Dijkstra e alla fine troverai un percorso dal punto A al punto B che corre approssimativamente al centro dei corsi d'acqua. Ci saranno molti percorsi possibili, quindi ho mantenuto un peso su ciascun apice e ho interrotto un percorso quando la lunghezza cumulativa ha superato la lunghezza già registrata e, se inferiore, aggiorna l'apice con la lunghezza cumulativa più breve - questo riduce la quantità di percorsi che vengono tracciati e potrebbero essercene parecchi;

In alternativa, una volta triangolato, è possibile trasformare i bordi dei triangoli in due linee di punti come una classe di entità geografiche, creare una rete e quindi tracciare. Sono sicuro che le routine di tracciamento ESRI sono molto più veloci delle mie ma avevo un bisogno specifico e non sono riuscito a risolverlo usando reti geometriche.


Michael - Sono uno sviluppatore C #. Semplicemente nuovo per ArcGIS e i loro strumenti di programmazione. Avevo trovato una soluzione pronta all'uso con l'analista militare, ma ESRI in tutta la loro saggezza la sta abbandonando. Cosa intendi con TIN i punti e quale algoritmo Dyjkstra hai usato?
SASS_Shooter

1

Sto aggiungendo questo per chiunque in futuro legga questa discussione.

Ecco tutto quello che ho imparato scavando in questo problema e ottenendo una distanza completa tra i punti di chiamata.

Il nostro primo numero derivava dalla natura statica di RasterCatalog. La modifica dei raster su cui si basa NON modifica il raster all'interno di RasterCatalog. Si è scoperto che la nostra aveva una versione antica che non si trovava da nessuna parte vicino a una mappa costiera. Lezione imparata: ricostruire il RasterCatalog ogni volta che si cambiano i raster su cui si basa.

Il Distance Raster con pesi aggiunti diventa una cosa piuttosto ingombrante con cui lavorare. Guarda il seguente scenario: Il valore originale di raster è 1 distanza totale che voglio guardare è 117 km. La dimensione della cella è di 1 metro. Se il raster ora ha un valore ponderato di 48, la distanza totale che voglio guardare diventa 117 km * 48 !!! Quindi la distanza nel metodo CostDistance non è la distanza della cella ma la distanza ponderata, apparentemente aggiungendo il valore in ogni cella fino alla somma di ogni cella = il valore passato per la distanza totale. Anche se la dimensione della cella stessa è di 1 metro !!!

Il raster di distanza è tutto focalizzato su un punto di origine. Pertanto, quando si chiama la routine CostDistance, non si desidera includere il punto di origine in tale elenco. se lo fai otterrai un punto con una distanza di 0. (anche questo supporto ESRI sconcertato)

Mentre molti dei metodi utilizzano l'Envelope per limitare il loro processo, i due più costosi, impostando un valore sul raster ed estraendo un raster senza un'area all'interno di un poligono, ignorano tutte le impostazioni dell'inviluppo e lo applicano sempre automagicamente all'intero raster. Sfortunatamente per noi, possiamo accorciarlo solo creando enormi segmenti sovrapposti e assegnando un segmento a un'area box specifica. Ma nel fare ciò dobbiamo stare attenti (il che è difficile) che non esiste un'area operativa primaria nell'area sovrapposta sbagliata. (in altre parole, tutte le nostre sovrapposizioni devono essere scelte con cura per non contenere alcun punto di interesse primario!) La ragione di ciò è che navighiamo nel RasterCatalog scegliendo il raster corretto in base a dove esiste la stazione della Guardia Costiera scelta. Per complicare ulteriormente il nostro processo, la sovrapposizione deve consentirci di navigare fino a 120 km dal nostro punto di origine senza scappare dal bordo della mappa e non sovrapporsi ad altri punti di interesse primari. Sheesh.

L'unica altra cosa che ho imparato è che è facile fare matematica con il raster ma quando vuoi "fare un buco" nel raster (blocchi) o impostare una ciambella con un valore e l'interno della ciambella con un valore 1 (ritardi come un lucchetto) si finisce con una complessa combinazione di strumenti e chiamate ArcObject. Il che porta alla lezione finale appresa: ArcObjects non può fare tutto. Quindi ogni tanto sono costretto a fare cose con gli strumenti lenti e ingombranti che sono stati tutti scritti in Python. Ho anche imparato che gli sviluppatori di strumenti ESRI non sapevano nulla sul mantenimento della coerenza. A volte prendevano un database raster altre volte avevano bisogno di un raster e occasionalmente avevano bisogno di un set di funzionalità. E non restituiscono i dati nello stesso formato richiesto come input!

Confuso? Non preoccuparti, è ESRI.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.