math - Comment cartographier une latitude / longitude sur une carte déformée?

Translate

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

Ensuite, j'ai une autre paire latitude / longitude. Je veux le tracer le mieux possible sur la carte. Comment dois-je procéder?

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 de calculer une transformation à partir de ceux-ci, mais cela ne fonctionne pas du tout. Puisqu'il s'agit d'un système linéaire, je ne peux pas non plus utiliser plus de points à proximité.

Vous ne pouvez pas supposer que le nord est en haut: tout ce que vous avez, ce sont les mappages 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 à la carte du métro). Je souhaite utiliser uniquement 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, la carte entière se trouve dans une très petite zone géographique, il n'y a donc pas lieu de s'inquiéter pour le globe - les hypothèses de la terre plate sont assez bonnes.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

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, le calcul de conversion estfacilement disponible.

Si la carte est déformée de manière vraiment arbitraire, vous pouvez essayer beaucoup de choses, mais la plus simple serait probablement de calculer unmoyenne pondéréeà partir de vos mappages de points existants. Vos poids peuvent être l'inverse au carré de la distance x / y entre votre nouveau point et chacun de vos points existants.

Quelques pseudocodes:

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.

La source
Translate

Bien. D'un point de vue théorique, étant donné que la distorsion est "arbitraire", et que toute solution vous oblige à modéliser cette distorsion arbitraire, vous ne pouvez évidemment pas obtenir de "réponse". Cependant, toute solution va impliquer d'imposer (généralement implicitement) un modèle de 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 mappage 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. Pour aller plus loin, il faudra des connaissances plus sophistiquées en analyse mathématique et numérique.

Vous avez cependant tort de supposer que vous ne pouvez pas étendre cela à plus de points. Vous pouvez en utilisant une approche d'erreur des moindres carrés. Trouvez la réponse linéaire qui minimise l'erreur des autres points. C'est probablement l'extension la plus simple. 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 utilisez ça. J'essaierais ceci ensuite.

Si cela ne fonctionne pas, alors l'hypothèse de linéarité sur l'aire de N points est rompue. À ce stade, vous devrez passer à un modèle quadratique ou cubique. Le calcul va devenir mouvementé à ce stade.

La source
Translate

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

Vous avez besoin de meilleurs points «proches», 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.

La source
Translate

Ummm. Peut-être que je manque quelque chose dans la question ici, mais si vous avez des informations long / lat, vous avez également la direction du nord?

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

Les mathématiques impliquées ne sont pas triviales, mais le code ne sort que de quelques lignes. Si j'avais plus de temps, je posterais plus mais j'ai besoin d'une douche donc je serai ennuyeux et je ferai un lien vers leWikipédiaentrée qui est plutôt bonne.

Remarque: après la douche édité.

La source