Domanda

Ho un sacco di latitudine/longitudine coppie mappa per conoscere le coordinate x/y in un (geograficamente distorto) mappa.

Poi ho una coppia di latitudine e longitudine.Voglio tracciare sulla mappa come meglio è possibile.Come faccio a fare questo?

In un primo momento ho deciso di creare un sistema di equazioni lineari per i tre più vicina lat/long punti e calcolare una trasformazione di questi, ma questo non funziona bene a tutti.Dato che questo è un sistema lineare, che non posso usare più vicino punti.

Non si può assumere Nord è in alto:tutto quello che è l'esistente lat/long->x/y mapping.

EDIT:non è una proiezione di Mercatore, o qualcosa di simile.È arbitrariamente distorto per migliorare la leggibilità (si pensi mappa della metropolitana).Voglio usare solo il più vicino 5 a 10 mapping in modo che la distorsione su altre parti della mappa non pregiudica la mappatura sto cercando di calcolare.

Inoltre, l'intera mappa è in una piccola area geografica, quindi non c'è alcun bisogno di preoccuparsi per il mondo-tv-terra presupposti sono più che sufficienti.

È stato utile?

Soluzione

Ci sono dettagli più specifici sul tipo di distorsione?Se, per esempio, le latitudini e longitudini sono "distorto" sulla mappa in 2D utilizzando una proiezione di Mercatore, la conversione è la matematica prontamente disponibili.

Se la mappa è distorta veramente arbitrariamente, ci sono un sacco di cose che si potrebbe provare, ma il più semplice sarebbe probabilmente per calcolare un medio ponderato dal tuo punto di mapping.I pesi potrebbe essere il quadrato inverso di x/y distanza dal tuo nuovo punto per ciascuno dei vostri punti esistenti.

Alcuni pseudocodice:

estimate-latitude-longitude (x, y)

    numerator-latitude := 0
    numerator-longitude := 0
    denominator := 0

    for each point,
        deltaX := x - point.x
        deltaY := y - point.y
        distSq := deltaX * deltaX + deltaY * deltaY
        weight := 1 / distSq

        numerator-latitude += weight * point.latitude
        numerator-longitude += weight * point.longitude
        denominator += weight

    return (numerator-latitude / denominator, numerator-longitude / denominator)

Questo codice serve per dare un relativamente semplice approssimazione.Se puoi essere più preciso circa il modo in cui la proiezione altera le coordinate geografiche, probabilmente si può fare molto meglio.

Altri suggerimenti

E va bene.Da un punto di vista teorico, dato che la distorsione è "arbitrario", e qualsiasi soluzione che richiede il modello di questa arbitraria di distorsione, che, ovviamente, non è possibile ottenere una "risposta".Tuttavia, qualsiasi soluzione sta andando a coinvolgere imponente (di solito in modo implicito) alcuni modelli di distorsione che possono o non possono riflettere la realtà della situazione.

Dal momento che ti sembra di essere più interessato a modelli che prevedono una sorta di continuità locale della distorsione di mappatura, la scelta più ovvia è quella che ti ho già provato:lineare interpolaton tra i punti più vicini.Andando al di là che c'è bisogno di più sofisticato matematica e analisi numerica conoscenza.

Si è corretto, tuttavia, presumendo che non è possibile espandere questo per più punti.Si può, utilizzando un minimo errore quadratico approccio.Trovare la risposta lineare che riduce al minimo l'errore degli altri punti.Questo è probabilmente il più semplice estensione.In altre parole, prendere 5 punti vicini e cercare di venire con una approssimazione lineare che riduce al minimo l'errore di quei punti.E usare quello.Vorrei provare il prossimo.

Se questo non funziona, poi l'assunzione di linearità su tutta l'area di N punti è rotto.A questo punto è necessario eseguire l'aggiornamento a una quadratica o cubica modello.La matematica è andando ottenere frenetica a quel punto.

il problema è che la sfera può essere distorta in un numero di modi, e di avere tutti quei punti note sull'equatore, diciamo, non aiutare a mappare i punti più lontani.

Hai bisogno di più 'vicino' punti, quindi si può presupporre che questi tre punti sono su un piano con la quarta e fare l'interpolazione, sapendo che la distanza di longitudini è una funzione, non una costante.

Ummm.Forse mi manca qualcosa circa la domanda qui, ma se avete long/lat info, hai anche la direzione del nord?

Sembra che avete bisogno di una mappa di coordinate per la previsione di un sistema di coordinate.Per esempio osgb = wgs84.

La matematica coinvolti non è banale, ma il codice che viene fuori solo poche righe.Se avessi più tempo mi piacerebbe pubblicare di più, ma ho bisogno di una doccia, così sarò noioso e link per il wikipedia voce, che è abbastanza buono.

Nota:Post doccia modificato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top