2010-01-28 8 views
8

Il nostro progetto VB.NET utilizza una libreria Java da Vivid Solutoins (com.vividsolutions.jts.geom.Geometry) per eseguire calcoli di geometria. L'aiuto è qui: http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/geom/Geometry.htmlQuali sono le unità di distanza nella classe com.vividsolutions.jts.geom.Geometry?

Quello che non riesco a capire sono le unità specificamente per la proprietà Buffer, o qualsiasi altra distanza per quella materia. Il mio programma ha a che fare con Miglia Nautiche e la documentazione non fornisce alcuna indicazione se le unità sono gradi, miglia, Miglia nautiche, Chilometri, pollici, ecc.

Qualcuno ha usato questa libreria che conosce la risposta? Grazie in anticipo.

+2

Potrebbe essere meglio chiederli direttamente –

risposta

3

Questo è un vecchio post, ma ecco la risposta per chiunque stia cercando, poiché incredibilmente i documenti java non indicano le unità restituite dal metodo. La distanza restituita è in gradi di angolo centrale. È quindi possibile utilizzare qualsiasi numero di formule da convertire all'unità di misura richiesta. Il più semplice è convertire in radianti. 1 radian = 180 gradi diviso per pi (rad = 180deg/pi). Da lì, puoi moltiplicare i radianti per il raggio medio della terra nella tua scelta di unità (6371 km per esempio) per ottenere la distanza tra due punti. Sono disponibili anche metodi più accurati, ma è possibile cercarli in rete.

+0

Grazie Tim. Puoi chiarire una cosa di cui mi preoccupavo. Supponendo che la terra sia una sfera perfetta (lo so che in realtà non lo è), la formula dell'angolo per la distanza funziona per qualsiasi posizione sulla terra?O gli angoli vicini ai poli (negli orientamenti Est-Ovest) corrispondono a distanze minori come gli stessi angoli all'equatore? Sto assumendo che i "gradi d'angolo centrali" significano il primo - e che gli angoli sono il numero di gradi in cui i punti sono sul grande cerchio che entrambi intersecano. Sarebbe bello se potessi confermarlo. Grazie. –

+0

Se supponiamo che la terra sia una sfera perfetta, la formula dell'angolo in distanza funziona per qualsiasi punto sulla terra. L'angolo centrale è l'angolo dal cetner di un grande cerchio a ogni punto del cerchio. Pertanto l'angolo centrale è coerente attraverso la sfera. Da lì usiamo semplicemente la geometria standard per calcolare la lunghezza dell'arco. Ho lavorato con gli strumenti JTS partendo dal presupposto che l'angolo centrale è presentato da un modello sferico, e finora i risultati che ho raggiunto sono stati coerenti con questo. –

+0

Poiché la terra è un'ellisse, la semplificazione in una sfera introduce errori utilizzando il metodo descritto sopra. Praticamente, la terra non è troppo lontana da una sfera. Il raggio più grande e più piccolo della terra è 6378 all'equatore e 6356 ai poli. I piccoli angoli centrali produrranno discrepanze relativamente piccole. Angoli più grandi possono produrre più errori, a seconda del grande cerchio che si sta misurando. Per una maggiore precisione, suggerirei di utilizzare qualcosa come la formula di Vincenty: http://www.movable-type.co.uk/scripts/latlong-vincenty.html –

6

Prima di tutto, non conosco questa API, ho appena sfogliato il link che hai fornito.

giudicare dalla Javadocs per Coordinate, dice:

[coordinate è un] classe leggera utilizzata per memorizzare le coordinate sul piano cartesiano 2-dimensionale. È diverso da Point, che è una sottoclasse di Geometry. A differenza degli oggetti di tipo Point (che forniscono informazioni supplementari quali una busta, un modello di precisione e le informazioni sul sistema di riferimento spaziale)

quindi sarebbe sembrare che Geometry ha unità in quanto tali, ma Point, sua sottoclasse , lo fa e puoi specificarli.

Non sarei sorpreso se la classe Geometry non ha unità in quanto tali e rappresenta solo il concetto di un punto nello spazio in un particolare sistema di coordinate.

+0

Mi sembra che rappresenti il ​​concetto di un punto nello spazio in un ** sistema di coordinate cartesiano ** 2. Ciò andrà bene, a patto che il programma di Andy si occupi solo di piccole distanze in miglia nautiche. Altrimenti la natura rotonda della Terra sta per sconvolgere i calcoli. – MarkJ

+0

Rich - questo non risponde al fatto che il metodo buffer() accetta un parametro Double come parametro - questo è un numero, ma non riesco a vedere quali unità specificare il numero. MarkJ - Sono d'accordo, e sfortunatamente ho bisogno di gestire sia le grandi distanze che le aree vicino ai poli. –

0

Ho confermato con uno degli autori della libreria e, testandolo io stesso utilizzando file geospaziali con proiezioni diverse, che le unità di distanza dipendono dal CRS del file di origine. Questo argomento è incluso nelle domande frequenti: https://locationtech.github.io/jts/jts-faq.html#B5

Un modo rapido per trovarlo è cercare il codice EPSG al numero http://epsg.io/ e trovare le unità. Ad esempio, EPSG 3347 ha unità di metri.

Problemi correlati