我正在尝试使用C#或Javascript将Lat / Longs转换为X / Y坐标,以将CSS(左,上)的div放置到美国地图的背景图像上。美国的标准地图投影是Albers Projection,如下所示,但StackOverflow仅提供引用基本墨卡托投影的Lat / Long转换的参考。
地图: http://en.wikipedia.org/wiki/File:Usa_counties_large.svg
地图尺寸:1460像素宽x 914像素高
Lat / Long样品:
LA: 34.0525, -118.2544
NY: 40.7582, -73.9679
DEN: 39.7512, -104.9975
Albers投影公式: http://en.wikipedia.org/wiki/Albers_projection
到目前为止,这是我的C#代码:
int mapWidth = 1460; //US Map Width Px
int mapHeight = 914; //US Map Height Px
double lat = 34.0525; //LA Test Lat
double lng = -118.2544; //LA Test Long
double maxLat = 48.291667; //US Map North Lat (Approx)
double minLat = 22.46; //US Map South Lat (Approx)
double maxLng = -65.529722; //US Map East Long (Approx)
double minLng = -128.876944; //US Map West Long (Approx)
var n = (Math.Sin(minLat) + Math.Sin(maxLat)) * .5;
var a = n * (lng - minLng);
var c = Math.Pow(Math.Cos(minLat), 2) + ((2 * n) * Math.Sin(minLat));
var p = Math.Sqrt(c - ((2 * n) * Math.Sin(lat)));
var p2 = (n / Math.Sqrt(c - (2 * n) * Math.Sin(minLat))) / n;
result.x = p * Math.Sin(a); //Convert to Map Px ?
result.y = p2 - (p * Math.Cos(a)); //Convert to Map Px ?
问题:
1)如何将Albers投影结果调整为X / Y像素放置的地图尺寸(宽度/高度,以像素为单位)中的系数?
2)我的Albers Math公式到C#代码转换是否正确?
3)参考经度(λ 0 )和参考纬度(φ 0 )是指什么?我猜这些意味着美国地图西长(minLng)和美国地图北纬(maxLat)。
4)标准平行(φ 1 和φ 2 )是指什么?我猜这些意味着美国地图北纬(maxLat)和美国地图南纬(minLat)。