math lieu Comment mapper une latitude/longitude à une carte déformée?




ma position gps (4)

Bien. D'un point de vue théorique, étant donné que la distorsion est «arbitraire» et que toute solution nécessite que vous modélisiez cette distorsion arbitraire, vous ne pouvez évidemment pas obtenir de «réponse». Cependant, toute solution impliquera d'imposer (généralement implicitement) un modèle de la distorsion qui peut ou non refléter la réalité de la situation.

Puisque vous semblez être le plus intéressé par les modèles qui supposent une sorte de continuité locale du mapping de distorsion, le choix le plus évident est celui que vous avez déjà essayé: l'interpolation linéaire entre les points les plus proches. Aller au-delà exige des connaissances plus poussées en analyse mathématique et numérique.

Vous êtes incorrect, cependant, en supposant que vous ne pouvez pas étendre cela à plus de points. Vous pouvez en utilisant une approche d'erreur par les moindres carrés. Trouvez la réponse linéaire qui minimise l'erreur des autres points. C'est probablement l'extension la plus directe. En d'autres termes, prenez les 5 points les plus proches et essayez de trouver une approximation linéaire qui minimise l'erreur de ces points. Et utilise ça. Je voudrais essayer cela suivant.

Si cela ne fonctionne pas, alors l'hypothèse de linéarité sur la zone de N points est cassée. À ce stade, vous devrez passer à un modèle quadratique ou cubique. Les maths vont devenir agités à ce moment-là.

J'ai un tas de paires de latitude / longitude qui mappent aux coordonnées x / y connues sur une carte (géographiquement déformée).

Ensuite, j'ai une autre paire de latitude / longitude. Je veux tracer sur la carte le mieux possible. Comment vais-je faire cela?

Au début, j'ai décidé de créer un système d'équations linéaires pour les trois points lat / long les plus proches et d'en calculer une transformation, mais cela ne fonctionne pas du tout. Comme c'est un système linéaire, je ne peux pas utiliser plus de points voisins non plus.

Vous ne pouvez pas supposer que le nord est en haut: tout ce que vous avez est les mappings lat / long-> x / y existants.

EDIT: ce n'est pas une projection Mercator ou quelque chose comme ça. Il est arbitrairement déformé pour la lisibilité (pensez carte de métro). Je veux utiliser seulement les 5 à 10 mappages les plus proches afin que la distorsion sur d'autres parties de la carte n'affecte pas le mappage que j'essaie de calculer.

De plus, l'ensemble de la carte se trouve dans une très petite zone géographique, il n'y a donc pas lieu de s'inquiéter du globe terrestre - les hypothèses de la terre plate sont assez bonnes.


le problème est que la sphère peut être déformée de plusieurs façons, et que tous ces points soient connus sur l'équateur, disons, ne vous aidera pas à cartographier des points plus loin.

Vous avez besoin de meilleurs points de fermeture, alors vous pouvez supposer que ces trois points sont sur un plan avec le quatrième et faire l'interpolation - sachant que la distance des longitudes est une fonction, pas une constante.


Y a-t-il des détails plus spécifiques sur le type de distorsion? Si, par exemple, vos latitudes et longitudes sont «déformées» sur votre carte 2D à l'aide d'une projection Mercator, les calculs de conversion sont facilement disponibles .

Si la carte est déformée de façon vraiment arbitraire, il y a beaucoup de choses que vous pourriez essayer, mais le plus simple serait probablement de calculer une moyenne pondérée à partir de vos mappages de points existants. Vos poids pourraient être l'inverse carré de la distance x / y de votre nouveau point à chacun de vos points existants.

Un 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)

Ce code donnera une approximation relativement simple. Si vous pouvez être plus précis sur la façon dont la projection déforme les coordonnées géographiques, vous pouvez probablement faire beaucoup mieux.


Ummm. Peut-être qu'il me manque quelque chose à propos de la question ici, mais si vous avez des infos long / lat, vous avez aussi la direction du nord?

Il semble que vous deviez cartographier les coordonnées géodésiques d'un système de coordonnées projetées. Par exemple osgb à wgs84.

Les maths impliqués sont non-triviaux, mais le code ne sort que quelques lignes. Si j'avais plus de temps je posterais plus mais j'ai besoin d'une douche donc je serai ennuyeux et un lien vers l'entrée wikipedia qui est assez bon.

Remarque: Post douche édité.





latitude-longitude