如何高效地将经纬度反向地理编码为行政区划?

3

我正在使用纽约市出租车数据集。该数据集包括日期时间、上车纬度/经度、下车纬度/经度等列。现在我想反向地理编码以找到区域/社区。我发现geopy可以完美地处理这样的问题:

from geopy.geocoders import Nominatim
geolocator = Nominatim()

borough = []
loc = ['40.764141, -73.954430', '40.78993085, -73.9496098723']
for l in loc:
    sub = str(geolocator.reverse(l))
    borough.append(sub.split(', ')[2])
borough
## ['Upper East Side', 'East Harlem']

这个方法很完美,正是我需要的。但是我的数据集有数百万行,并且由于这是一个在线API,所以不太可行。有没有更好的方法来完成这个任务?


2
如果你能获得行政区的形状文件(这不应该太难),你就可以使用各种形状文件操作工具来确定一个给定点是否在给定行政区的形状内。 - BrenBarn
听起来很有趣。如果您不介意的话,能否提供更多细节? - ytk
例如,查看此页面。如果您在谷歌上搜索“确定点是否在shapefile形状中”或类似的查询,您可以找到很多东西。由于纽约市的行政区是县,因此从美国人口普查等来源获取其边界的shapefile应该相当容易。 - BrenBarn
尝试在一个庞大的数据集上进行相同的处理。你能解决这个问题吗? - kthouz
1
我下载了这个文件:https://data.cityofnewyork.us/City-Government/Neighborhood-Names-GIS/99bc-9p23。它包含了社区名称和它们的质心。然后,我使用了[这个](https://dev59.com/_mUo5IYBdhLWcg3w1yPH)问题中的答案来找到最近的质心所在的社区,然后将数据点分类到该社区。 - ytk
亲爱的 @ytk,我有和你一样的问题和数据集。我已经寻找在线解决方案好几天了,但是没有找到任何东西(我正在使用R上的Spark)。你能在这里分享你的解决方案吗?或者私下发送至pablopicciau@gmail.com?我将不胜感激。 - HABLOH
2个回答

1

我相信你可以尝试使用Reverse Geocoder,它提供了你需要的功能。
它接受一个纬度/经度坐标,并返回(离线)最近的城镇/城市、国家、行政1和2地区。


请花一分钟时间解释一下反向地理编码器的作用,因为这只是一个链接答案,这是不被赞同的。答案应该能够独立存在,而不依赖于外部来源。 - DᴀʀᴛʜVᴀᴅᴇʀ
反向地理编码器获取纬度/经度坐标,并返回最近的城镇/城市、国家、行政1和2区域。 - Yannis

-1

推荐查看this answer,这是一种好的方法。不过可能需要为形状定义自己的多边形。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接