I need to convert latitude longitude values into pixel positions as well as do the opposite. I've found many solutions to go from lat/lng->pixel, but can't find anything on the reverse.
A couple of notes:
A solution in almost any programming language would be fine, as long as it doesn't rely on any platform specific APIs.
This is an example of going from lat/lng->pixel:
var y = Math.round(((-1 * lat) + 90) * (this.MAP_HEIGHT / 180));
var x = Math.round((lng + 180) * (this.MAP_WIDTH / 360));
Note that one degree of longitude is 111 km at the equator, but less for other latitudes. There's a simple approximative formula to find the length in km of 1° of longitude in function of latitude : 1° of longitude = 40000 km * cos (latitude) / 360 (and of course it gives 111 km for latitude = 90°).
„The translation offset determines the pixel coordinates of the projection's center“ (D3 Documentation).
Latitude can be stated in degree form -- with minutes and seconds -- or in decimal form. You can convert a latitudinal measurement from degrees to a decimal by following a mathematical formula. Divide minutes by 60. For example, if you had a degree followed by 45 minutes, you would divide 45 by 60 to get 0.75.
var y = Math.round(((-1 * lat) + 90) * (this.MAP_HEIGHT / 180));
var x = Math.round((lng + 180) * (this.MAP_WIDTH / 360));
Use some algebra and I came out with:
var lat=(y/(this.MAP_HEIGHT/180)-90)/-1
var lng = x/(this.MAP_WIDTH/360)-180
Not completely confident in that math since it was done in my head, but those should work, just make sure to test them first.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With