Comment tracer une latitude / longitude à une carte déformée?

voix
22

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

Ensuite, je paire une plus grande latitude / longitude. Je veux tracer sur la carte du mieux est possible. Comment puis-je prendre?

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

Vous ne pouvez pas supposer du Nord est en place: tout ce que vous avez est les applications existantes lat / long> x / y.

EDIT: ce n'est pas une projection de Mercator, ou quelque chose comme ça. Il est arbitrairement déformée pour une meilleure lisibilité (pensez carte du métro). Je veux utiliser seulement les plus proches de 5 à 10 applications de sorte que la distorsion sur d'autres parties de la carte n'affecte pas la cartographie que je suis en train de calculer.

De plus, toute la carte est dans une très petite zone géographique, donc pas besoin de se soucier du monde - hypothèses de terre plate sont assez bons.

Créé 05/08/2008 à 05:55
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
8

Y a-t- il des détails plus précis sur le type de distorsion? Si, par exemple, vos latitudes et longitudes sont « déformés » sur votre carte 2D à l' aide d' une projection de Mercator, le calcul de conversion est facilement disponible .

Si la carte est vraiment arbitraire déformée, il y a beaucoup de choses que vous pouvez essayer, mais la plus simple serait sans doute de calculer une moyenne pondérée de vos correspondances de points existants. Vos poids pourrait être l'inverse au carré de la distance x / y de votre nouveau point à chacun de vos points existants.

Certains pseudo-code:

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 donne une approximation relativement simple. Si vous pouvez être plus précis sur la façon dont la projection fausse les coordonnées géographiques, vous pouvez probablement faire beaucoup mieux.

Créé 05/08/2008 à 06:48
source utilisateur

voix
2

Bien. D'un point de vue théorique, étant donné que la distorsion est « arbitraire », et toute solution vous oblige à modéliser cette distorsion arbitraire, vous pouvez évidemment pas obtenir une « réponse ». Cependant, toute solution va impliquer l'imposition (généralement implicitement) certains modèles de la distorsion qui peuvent ou peuvent ne pas refléter la réalité de la situation.

Puisque vous semblez être plus intéressés par les modèles qui supposent une sorte de continuité locale de la cartographie de la distorsion, le choix le plus évident est celui que vous avez déjà essayé: interpolaton linéaire entre les points les plus proches. Au-delà qui va nécessiter une analyse mathématique et numérique plus sophistiquée des connaissances.

Vous avez tort, cependant, vous ne pouvez pas présumant étendre ce à 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. Ceci est probablement l'extension la plus simple. En d'autres termes, prendre les 5 points les plus proches et essayer de trouver une approximation linéaire qui minimise l'erreur de ces points. Et utiliser. Je voudrais essayer ce prochain.

Si cela ne fonctionne pas, l'hypothèse de linéarité sur la zone de points N est cassé. À ce moment-là, vous aurez besoin de passer à un modèle soit quadratique ou cubique. Le calcul va se gâter à ce moment-là.

Créé 05/08/2008 à 16:47
source utilisateur

voix
0

Hummm. Peut-être que je manque quelque chose au sujet de la question, mais si vous avez d'info latitude / longitude, vous avez également la direction du nord?

Il semble que vous avez besoin de carte coordonnées géodésiques à un système de coordonnées projetées. Par exemple OSGB à wgs84.

Les mathématiques impliqués est non trivial, mais le code sort un seulement quelques lignes. Si j'avais plus de temps je poster plus mais je besoin d' une douche , donc je vais être ennuyeux et un lien vers l' wikipedia entrée qui est assez bon.

Note: douche Message modifié.

Créé 05/08/2008 à 06:21
source utilisateur

voix
0

le problème est que la sphère peut être déformée de plusieurs façons, et ayant tous les points connus sur l'équateur, permet de dire, wont carte vous aider à des points plus loin.

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

Créé 05/08/2008 à 06:20
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more