如何从经度和纬度获得最接近的重要人口中心?

时间:2009-11-02 11:46:48

标签: c# web-services virtual-earth reverse-geocoding

我目前正在尝试使用Virtual Earth / Bing Maps网络服务来反转地理编码一系列纬度/经度坐标。虽然我可以成功检索这些位置的地址,但我还需要能够找到该位置最近的重要人口中心,这样我才能显示到最近的城镇/城市/大都市中心的航向和距离等。这是为了位置在位置之间行进的情况,例如在高速公路/高速公路上。

有没有人有任何想法如何做到这一点,因为我已经对它持续了几天,我已经无处可去了!

提前干杯......

5 个答案:

答案 0 :(得分:2)

尝试使用此处记录的维基百科位置服务 http://www.geonames.org/export/wikipedia-webservice.html

答案 1 :(得分:2)

我认为可以安全地假设最近的城市与地球的大小相比总是非常接近,所以你可以使用一个简单的毕达哥拉斯三角形。

假设您位于(lat0,long0)且试用城市位于(lat1,long1)。

水平(EW)距离大致为

d_ew = (long1 - long0) * cos(lat0)

这乘以cos(lat0)来说明经度线在高纬度地区越来越靠近。

垂直(NS)距离更容易

d_ns = (lat1 - lat0)

所以两点之间的距离是

d = sqrt(d_ew * d_ew + d_ns * d_ns)

您可以针对更严格的任务优化此方法,但这对于最近的城市来说应该足够了。

为了比较距离,可以比较d平方,这意味着你可以省略sqrt操作。

答案 2 :(得分:0)

如果你能找到主要人口中心的坐标列表,这里有一些code用于根据坐标计算大圆距离。

答案 3 :(得分:0)

听起来您正在寻找主要城市的纬度和经度数据库,因此您可以计算距离。

This是一个指向全世界几十个页面的链接。

可能还有其他人,很可能以美国为中心(但可能是你想要的)。

答案 4 :(得分:0)

我会做以下事情:

表1:

T_CityPopulation

字段:

CityTownInfo,人口,LonLat

然后计算表1中每条记录的当前LonLat之间的距离,使用阈值忽略城镇/城市超过x英里。然后按人口排序结果。

编辑:

即使你不想维护一个表,它也必须存放在某个地方,我想如果你自己维护它至少你可以控制它,而不是依赖另一个服务。