Vă mulțumim pentru susținere

Cum se poate mapa o latitudine / longitudine către o hartă distorsionată?

Am o grămadă de perechi de latitudine / longitudine care se potrivesc cu coordonatele x / y cunoscute pe o hartă (distorsionată geografic).

Apoi am o pereche de latitudine / longitudine. Vreau să o compun pe hartă cât mai bine posibil. Cum fac asta?

La început am decis să creez un sistem de ecuații liniare pentru cele trei puncte cele mai apropiate lat / long și să calculez o transformare de la acestea, dar acest lucru nu funcționează deloc. Din moment ce este un sistem liniar, nu pot folosi mai multe puncte din apropiere.

You can't assume North is up: all you have is the existing lat/long->x/y mappings.

EDIT: nu este o proiecție Mercator sau ceva de genul asta. Este distorsionată arbitrar pentru citire (gândiți-vă la metrou). Vreau să utilizez doar cele mai apropiate mapări de la 5 la 10, astfel încât distorsiunea în alte părți ale hărții să nu afecteze cartografia pe care încerc să o calc.

În plus, întreaga hartă se află într-o zonă geografică foarte mică, astfel încât nu este nevoie să vă faceți griji în privința globului - ipotezele privind pământul plat sunt destul de bune.

0
adăugat editat
ați încercat trimaps.com ?
adăugat autor Gilbou

4 răspunsuri

În regulă. Din punct de vedere teoretic, dat fiind că distorsiunea este "arbitrară" și orice soluție cere să modelați această distorsiune arbitrară, evident că nu puteți obține un "răspuns". Cu toate acestea, orice soluție va implica impunerea (de obicei, implicit) a unui model de denaturare care ar putea sau nu să reflecte realitatea situației.

Deoarece pari a fi cel mai interesat de modele care presupun un fel de continuitate locală a mapării distorsiunilor, cea mai evidentă alegere este cea pe care ați încercat-o deja: interpolarea liniară între cele mai apropiate puncte. Dincolo de aceasta, vor fi necesare cunoștințe mai sofisticate de analiză matematică și numerică.

Cu toate acestea, sunteți incorect, presupunând că nu puteți extinde acest lucru la mai multe puncte. Puteți utiliza o abordare a erorilor cel mai puțin patrate. Găsiți răspunsul liniar care minimizează eroarea celorlalte puncte. Aceasta este probabil cea mai simplă extensie. Cu alte cuvinte, luați cele 5 cele mai apropiate puncte și încercați să veniți cu o aproximare liniară care minimizează eroarea acelor puncte. Și folosește asta. Aș încerca următorul lucru.

În cazul în care nu funcționează, atunci presupunerea de liniaritate asupra zonei de puncte N este întreruptă. În acest moment, va trebui să treceți la un model quadratic sau cubic. Matematica va deveni agitată la acel moment.

0
adăugat

problema este că sfera poate fi distorsionată într-o serie de moduri și având toate acele puncte cunoscute pe ecuator, vă spun, nu vă va ajuta să cartografiați puncte mai departe.

Aveți nevoie de mai multe puncte "apropiate", atunci puteți presupune că aceste trei puncte sunt pe un avion cu cel de-al patrulea și fac interpolarea - știind că distanța longitudinilor este o funcție, nu o constantă.

0
adăugat

Există mai multe detalii specifice cu privire la tipul de denaturare? Dacă, de exemplu, latitudinile și longitudinile dvs. sunt "distorsionate" pe harta dvs. 2D folosind o proiecție Mercator, matematica de conversie este ușor accesibile .

Dacă harta este distorsionată cu adevărat arbitrar, există multe lucruri pe care le puteți încerca, dar cel mai simplu ar fi probabil să se calculeze un media ponderată de la mapările dvs. de puncte existente. Greutățile dvs. ar putea fi inversul pătrat al distanței x / y de la noul dvs. punct la fiecare dintre punctele dvs. existente.

Unele pseudocode:

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)

Acest cod va oferi o aproximare relativ simplă. Dacă puteți fi mai precis cu privire la modul în care proiecția distorsionează coordonatele geografice, probabil că puteți face mult mai bine.

0
adăugat

Mmm. Poate că mi-e lipsă ceva despre întrebarea aici, dar dacă ai informații lungi / lat, ai și direcția nordului?

Se pare că trebuie să cartografiați coordonatele geodezice la un sistem de coordonate proiectat. De exemplu osgb to wgs84.

Matematica implicată este non-trivială, dar codul iese numai în câteva rânduri. Dacă aș avea mai mult timp să postez mai mult, dar am nevoie de un duș, așa că voi fi plictisitor și link către wikipedia care este destul de bună.

Notă: Dușul post editat.

0
adăugat