python - 我应该如何对 1,100,000 行坐标信息进行地理定位?

标签 python pandas geolocation google-geocoder

好的,所以我正在尝试为此设想一个解决方案。我有一个超过一百万行的数据库,其中包括美国的城市名称和该城市的一组坐标。问题是有多个城市同名:例如,新泽西州斯普林菲尔德和马萨诸塞州斯普林菲尔德。所以我需要获取状态信息。

数据中也有重复项。只有大约 6500 组唯一坐标,所以可以想象,我可以找到它们,然后将它们分配给数据库中的其他条目。这是一个可行的计划吗?我该怎么做?

以下是该数据库中条目的一些示例:

2015-09-01 00:00:00,Buffalo,"42.9405299,-78.8697906",10.1016/s0894-7317(12)00840-1,42.9405299,-78.8697906,43.0,-79.0
2015-09-01 00:00:00,New York,"40.7830603,-73.9712488",10.1016/j.jmv.2014.04.008,40.783060299999995,-73.9712488,41.0,-74.0
2015-09-01 00:00:04,Scottsdale,"33.4941704,-111.9260519",10.1016/j.euroneuro.2014.05.008,33.494170399999994,-111.9260519,33.0,-112.0
2015-09-01 00:00:09,Provo,"40.2338438,-111.6585337",10.1016/j.toxac.2014.07.002,40.233843799999995,-111.6585337,40.0,-112.0
2015-09-01 00:00:13,New York,"40.7830603,-73.9712488",10.1016/j.drugalcdep.2014.09.015,40.783060299999995,-73.9712488,41.0,-74.0
2015-09-01 00:00:16,Fremont,"37.5482697,-121.9885719",10.1016/j.ajic.2012.04.160,37.548269700000006,-121.98857190000001,38.0,-122.0
2015-09-01 00:00:24,Provo,"40.2338438,-111.6585337",10.1016/j.chroma.2015.01.036,40.233843799999995,-111.6585337,40.0,-112.0

我正在使用 geocoder地理定位包。这是我编写的一些可以处理该问题的代码:

def convert_to_state(lati, long):
    lat, lon = float(lati), float(long)
    g = geocoder.google([lat, lon], method='reverse')
    state_long, state_short = g.state_long, g.state
    return state_long, state_short

我只是不确定该怎么做。事实证明地理编码非常昂贵,因此使用重复项可能是最好的方法。对于如何实现这一点有什么建议吗?

最佳答案

几乎可以肯定,避免做额外工作的最好方法是使用哈希表来检查是否已有映射:

processed_coords = {}
def convert_to_state(lati, long):
    lat, lon = float(lati), float(long)
    if (lat, lon) not in processed_coords:
        g = geocoder.google([lat, lon], method='reverse')
        state_long, state_short = g.state_long, g.state
        processed_coords[(lat,lon)] = (state_long, state_short)
        return state_long, state_short
    else:
        return processed_coords[(lat,lon)]

这样你就可以做一个简单的 O(1) 检查,看看你是否已经有了数据,这根本不需要太多额外的计算,如果你确实已经完成了,你就不会重做。

如果你是对的并且只有 6500 组唯一坐标,那么就此技术的内存使用而言你应该没问题,但如果你错了并且有更多唯一坐标,你可能会遇到一些内存问题如果这百万中有更多的东西是独一无二的。

关于python - 我应该如何对 1,100,000 行坐标信息进行地理定位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38819915/

相关文章:

android - android 中的 GeoPoint 创建

android - 如何根据当前位置设置正确的纬度和经度

python - 如何使用 Python 从 Windows 7 中迭代连接的 iPhone 上的照片?

python - 如何为所有 true 和 false 映射 1 和 0

python - KeyError 0 在 pandas 中选择带有字符串的位置

python - 如何创建时间重叠的邻接矩阵?

python - 在 Jupyter 中使用 plotly 在离线模式下创建动画图表

python - 迭代动态创建的项目列表的首选方法是什么?

python - 如何使用groupby选择条件行?

iphone - 当前城市为零;