Question

Je les coordonnées géographiques (longitude et latidute) de certaines villes et voudraient obtenir les coordonnées x, y peut donc les tracer dans une carte.

La carte est un standart un, comme http: // www. wordtravels.com/images/map/Spain/Fuerteventura_map.jpg par exemple.

J'ai essayé plusieurs formular j'ai trouvé, mais aucun ne semble vraiment le travail :( code javascript simple ou le rubis serait le mieux.)

Était-ce utile?

La solution

en plus des réponses ci-dessus, il y a la bibliothèque de PROJ4JS open source qui effectue les transformations entre les diverses projections de la carte. il est utilisé en interne par OpenLayers pour ce genre de chose, et prend en charge un certain nombre de projections populaires et les systèmes de coordonnées.

Autres conseils

Il y a plusieurs façons d'aborder ce problème avec des degrés de précision variables. Cependant, ils ont tous ébullition jusqu'à la réalisation d'une projection qui correspond à celle de votre carte.

Si vous savez que votre carte est de la variété de projection Mercator, puis les coordonnées lat / long peuvent simplement être traités comme X / Y, et mis à l'échelle appropriée traduit. C'est, vous trouverez une simple hache + b et cy + d qui font le travail.

Si votre carte n'est pas Mercator-projection (comme il est probablement pas si elle tente d'obtenir l'échelle cohérente, celui-ci apparaît à faire), alors votre meilleur pari est de supposer qu'il est une projection « terre-tangente ». (Cela fonctionne sur OK pour les petits.) émergées Dans ce cas, vous devez d'abord projet Lat / Long dans un système de coordonnées en trois dimensions.

z=sin(lat)
x=cos(lat)*sin(long)
y=cos(lat)*cos(long)

Positive points z au pôle nord. Points positifs y à 0, 0, et les points positifs x à lat 0 à long 90 (est) et lat / long sont positifs au nord et à l'est. Bien sûr, vous devez convertir en radians premier.

Tout cela suppose une Terre sphérique, ce qui est pas tout à fait vrai, mais il est assez proche à moins que vous tirer des obus de mortier à longue portée.

Quoi qu'il en soit, une fois que vous avez votre XYZ, alors vous aurez besoin de tourner et à l'échelle de la carte. Pour effectuer une rotation autour de l'axe Z, juste soustrayez la longitude de base avant de projeter en trois dimensions. Pour ce faire, pour centrer votre carte sur zéro longitudes pour les mathématiques plus facile.

Une fois que vous avez fait cela, vous aurez seulement besoin de faire tourner le monde vers l'avant jusqu'à ce que votre carte d'origine est en face avant. Pour ce faire, avec une rotation de 2-d dans l'axe y-z. Utilisez http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflections figure cette partie dehors.

Enfin, votre coordonnées x, z vont aligner assez bien avec les x de votre carte, coordonnées y, pour une échelle appropriée / traduire comme décrit précédemment.

peut-être cela aiderai, je l'ai fait une mise en œuvre aux États-Unis en utilisant seulement javascript.

demo / code: http://the55.net/_11/sketch/us_map

Utilisez l'API Google Maps, vous pouvez superposer votre jpg sur la carte et le positionner correctement.

Voici un exemple http://code.google.com/apis/ cartes / documentation / javascript / examples / superposition-hideshow.html

et est ici la page api sur les superpositions http://code.google.com/apis/maps/documentation/ javascript / overlays.html

Vous ne trouverez pas facile à moins que vous travaillez sur une très petite échelle (et à proximité de l'équateur). Wikipedia système de coordonnées géographiques est un bon début ...

Le chemin pourrait être plus facile d'utiliser quelque chose comme web mapping et le bâton avec votre latitudes et longitudes.

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