【发布时间】:2012-11-18 12:32:27
【问题描述】:
我想知道特定地理坐标与城市列表的距离(“远”表示坐标与城市之间的欧几里德距离,不考虑道路)。为此,我需要为每个城市找到一个边界框 - 所有城市都位于以色列。
This post 讨论国家边界框,但我在城市级别需要它们。
除了在地图上手动绘制矩形并提取坐标之外,还有什么方法可以获取一长串城市的这些信息?
【问题讨论】:
标签: gis
我想知道特定地理坐标与城市列表的距离(“远”表示坐标与城市之间的欧几里德距离,不考虑道路)。为此,我需要为每个城市找到一个边界框 - 所有城市都位于以色列。
This post 讨论国家边界框,但我在城市级别需要它们。
除了在地图上手动绘制矩形并提取坐标之外,还有什么方法可以获取一长串城市的这些信息?
【问题讨论】:
标签: gis
您可以在www.mapdevelopers.com/geocode_bounding_box.php 找到这些城市的边界框。进入城市会在地图上显示一个方框,并给出每一边的纬度和经度。希望这将为您提供所需的信息。
【讨论】:
要查看长长的城市列表,请使用Google Geocoding service。设置完成后,您可以使用任何语言访问 REST API。例如,您可以使用 Python 的流行标准 requests 库。
或者,您可以使用 Google 自己的 Google 地图 Java API、Python API 或 JavaScript API。其中任何一个都包含 Google 地理编码服务。
在此处查看 Python 和 Java 库的一些简单示例:https://developers.google.com/maps/documentation/webservices/client-library。
这是地理编码结果的架构:
results[]: {
types[]: string,
formatted_address: string,
address_components[]: {
short_name: string,
long_name: string,
postcode_localities[]: string,
types[]: string
},
partial_match: boolean,
place_id: string,
postcode_localities[]: string,
geometry: {
location: LatLng,
location_type: GeocoderLocationType
viewport: LatLngBounds,
bounds: LatLngBounds
}
}
边界框位于geometry>viewport变量中,如下所示
"viewport" : {
"northeast" : {
"lat" : 37.4238253802915,
"lng" : -122.0829009197085
},
"southwest" : {
"lat" : 37.4211274197085,
"lng" : -122.0855988802915
}
}
【讨论】:
geometry对象只对地址本身有效,对所在城市无效,如何获取父城市的viewport?
您可以在以下位置找到这些城市的边界框 http://boundingbox.klokantech.com/ 输入城市/国家将在地图上显示一个框,并给出每一侧的纬度和经度。但准确度高于http://www.mapdevelopers.com/geocode_bounding_box.php(感谢@Fred 的回答)
【讨论】:
我认为,您不需要边界框,而是城市边界。因为使用边界框,您的分析会非常粗糙,而且要获得边界框,您首先需要一个边界。
如果您现在只有城市列表,则需要获取空间数据,即所有城市的边界。要查找此数据,您可以尝试this links。我建议检查 Open Street Maps。然后您可以使用任何 GIS 软件(例如,开源 Quantum GIS)并在那里计算您的点与城市边界之间的欧几里得距离。
希望这会有所帮助。
【讨论】: