在美国地图图像上将纬度/长度转换为X / Y用于Albers投影

时间:2014-04-22 00:14:19

标签: c# javascript wolfram-mathematica

我正在尝试使用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)。

0 个答案:

没有答案