Question

J'ai un tas de latitude/longitude paires de carte connus en x et y les coordonnées d'un (géographiquement déformée) de la carte.

Ensuite je n'ai plus de latitude/longitude paire.Je veux tracer sur la carte en tant que meilleur est possible.Comment dois-je faire?

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

Vous ne pouvez pas assumer le Nord est en haut:tout ce que vous avez est le lat/long->x/y mappages.

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

De plus, l'ensemble de la carte est dans une très petite zone géographique, donc il n'y a pas besoin de s'inquiéter à propos de la planète--plat-terre hypothèses sont assez bonnes.

Était-ce utile?

La solution

Existe-il des détails plus précis sur le type de distorsion?Si, par exemple, votre latitudes et les longitudes sont "déformés" sur votre carte en 2D à l'aide d'une projection de Mercator, la conversion des mathématiques facilement disponibles.

Si la carte est déformé vraiment arbitrairement, il y a beaucoup de choses que vous pourriez essayer, mais le plus simple serait probablement de calculer un moyenne pondérée de votre point de mappings.Votre poids pourrait être le carré de l'inverse de x/y de la distance à partir de votre nouveau point pour 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 vous donnera un relativement simple rapprochement.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.

Autres conseils

Alright.À partir d'un point de vue théorique, étant donné que la distorsion est "arbitraire", et toute solution exige de vous de ce modèle arbitraire de la distorsion, de toute évidence vous ne pouvez pas obtenir une "réponse".Cependant, toute solution va impliquer l'imposition (généralement implicitement) un modèle de la distorsion qui peut ou peut ne pas refléter la réalité de la situation.

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

Vous vous êtes trompé, cependant, en supposant que vous avez ne peut pas s'étendre à de plus points.Vous pouvez à l'aide d'un moins-l'erreur quadratique approche.Trouver la réponse linéaire qui minimise l'erreur des autres points.C'est probablement la plus straight-forward extension.En d'autres termes, prenez le de 5 le plus proche des points et essayer de trouver une approximation linéaire qui minimise l'erreur de ces points.Et l'utiliser.Je voudrais essayer cette prochaine.

Si cela ne fonctionne pas, alors l'hypothèse de linéarité sur la zone de N points est cassé.À ce stade, vous aurez besoin de mettre à niveau soit un carré ou au cube modèle.Le calcul va se faire mouvementée à ce point.

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

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

Ummm.Peut-être que je suis absent quelque chose à propos de la question ici, mais si vous avez de long/lat info, vous avez également la direction du nord?

Il semble que vous avez besoin de la carte géodésique des coordonnées d'un système de coordonnées projetées.Par exemple osgb au format wgs84.

Les mathématiques impliquées est non-trivial, mais le code qui vient de sortir un seulement quelques lignes.Si j'avais eu plus de temps que je ne poste plus mais j'ai besoin d'une douche, donc je vais être ennuyeux et un lien vers le wikipédia l'entrée qui est assez bon.

Note:Après la douche d'édition.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top