代码之家  ›  专栏  ›  技术社区  ›  Stephen Newman

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

  •  1
  • Stephen Newman  · 技术社区  · 15 年前

    我目前正在尝试使用虚拟地球/必应地图Web服务对一系列lat/long坐标进行反向地理编码。虽然我可以成功地检索到位置的地址,但我还需要能够检索到该位置最近的重要人口中心,以便显示到最近城镇/城市/大都市等中心的方向和距离。这适用于位置在位置之间旅行的情况,例如在高速公路/高速公路上。

    有没有人知道该怎么做,因为我已经用头撞了它几天了,我什么也没找到!

    提前干杯…

    5 回复  |  直到 15 年前
        1
  •  2
  •   Ewan Todd    15 年前

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

    假设你在(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
  •  2
  •   Lorenzo Boccaccia    15 年前

    尝试使用wikipedia定位服务,记录在这里 http://www.geonames.org/export/wikipedia-webservice.html

        3
  •  0
  •   John D. Cook    15 年前

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

        4
  •  0
  •   pavium    15 年前

    听起来你在找一个主要城市纬度和经度的数据库,这样你就可以计算距离了。

    This 是一个链接到一个网页,提供几十个,全世界。

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

        5
  •  0
  •   Darknight    15 年前

    我将执行以下操作:

    表1:

    城市人口

    领域:

    CityTowninfo,人口,Lonlat

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

    编辑:

    即使您不想维护一个表,它也必须存储在某个地方,我认为如果您自己维护它,那么至少您可以控制它,而不是依赖其他服务。