可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have the Lat/Long value of New York City, NY; 40.7560540,-73.9869510 and a flat image of the earth, 1000px × 446px.
I would like to be able to convert, using Javascript, the Lat/Long to an X,Y coordinate where the point would reflect the location.
So the X,Y coordinate form the Top-Left corner of the image would be; 289, 111
Things to note:
- don't worry about issues of what projection to use, make your own assumption or go with what you know might work
- X,Y can be form any corner of the image
- Bonus points for the same solution in PHP (but I really need the JS)
回答1:
A basic conversion function in js would be:
MAP_WIDTH = 1000; MAP_HEIGHT = 446; function convert(lat, lon){ var y = ((-1 * lat) + 90) * (MAP_HEIGHT / 180); var x = (lon + 180) * (MAP_WIDTH / 360); return {x:x,y:y}; }
This will return the number of pixels from upper left. This function assumes the following:
- That your image is properly aligned with the upper left corner (0,0) aligning with 90* North by 180* West.
- That your coords are signed with N being -, S being +, W being - and E being +
回答2:
The projection you use is going to change everything, but this will work assuming a Mercator projection:

回答3:
There's a good Javascript library, PROJ4JS, that allows you to do transformations between different projections.
回答4:
If you have a picture of the whole earth, the projection does always matter. But maybe I just don't understand your question.
回答5:
I've written a function which works for Mercator maps. Especially if your image doesn't cover the whole world, means it also works with cropped maps: https://stackoverflow.com/a/10401734/730823