【问题标题】:Python generate lat/long points from addressPython从地址生成纬度/经度点
【发布时间】:2021-11-05 14:16:51
【问题描述】:

如何在 python 中获取地址并从中生成经纬度坐标?我有一些地址,我想获得 lat 点,long 点,但似乎不起作用。

我使用了 geopandas,但它什么也没给我。我也对 user_agent 使用什么感到有点困惑。这是我的代码,

import pandas as pd
from geopy.geocoders import Nominatim

df2['location_lat'] = ""
df2['location_long'] = ""

geolocator = Nominatim(user_agent="myApp")

for i in df2.index:
    try:
        #tries fetch address from geopy
        location = geolocator.geocode(df2['Location'][i])
        
        #append lat/long to column using dataframe location
        df2.loc[i,'location_lat'] = location.latitude
        df2.loc[i,'location_long'] = location.longitude
  
    except:
        #catches exception for the case where no value is returned
        #appends null value to column
        df2.loc[i,'location_lat'] = ""
        df2.loc[i,'location_long'] = ""
   

感谢任何帮助。谢谢。

【问题讨论】:

  • 您能否展示一些您正在尝试查找经纬度的地址?
  • 1) 2094 Valentine Avenue,Bronx,NY,10457。 2) 1123 East Tremont Avenue,Bronx,NY,10460。 3) 412 Macon Street,Brooklyn,NY,11233。这里有一些地址。谢谢。
  • User_agent 应该是一个相当独特的字符串来标识您的应用程序。例如,这可能是您的名字。关键是它应该足够独特,以确保其他人不会使用它。

标签: python pandas latitude-longitude geopandas geopy


【解决方案1】:

您可以直接在 DataFrame 列上使用apply

import pandas as pd
from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="myApp")

df2 = pd.DataFrame({'Location':
            ['2094 Valentine Avenue,Bronx,NY,10457',
             '1123 East Tremont Avenue,Bronx,NY,10460',
             '412 Macon Street,Brooklyn,NY,11233']})

df2[['location_lat', 'location_long']] = df2['Location'].apply(
    geolocator.geocode).apply(lambda x: pd.Series(
        [x.latitude, x.longitude], index=['location_lat', 'location_long']))

它应该给出:

                                  Location  location_lat  location_long
0     2094 Valentine Avenue,Bronx,NY,10457     40.852905     -73.899665
1  1123 East Tremont Avenue,Bronx,NY,10460     40.840130     -73.876245
2       412 Macon Street,Brooklyn,NY,11233     40.682651     -73.934353

【讨论】:

  • 完美运行。谢谢。
【解决方案2】:

我没有使用 pandas,但我认为你可以使用它

代码:

from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent='your_app_name')

addresses = [
            '20, Willmannstraße, Fechenheim, Ost, Frankfurt am Main, Hessen, 60386, Deutschland',
            '20, Willmannstraße, Fechenheim, Ost, Frankfurt am Main, Hessen, 60386, Deutschland',
            'Pöhlen, Schönberg, Sandesneben-Nusse, Herzogtum Lauenburg, Schleswig-Holstein, 22929, Deutschland',
            'Pöhlen, Schönberg, Sandesneben-Nusse, Herzogtum Lauenburg, Schleswig-Holstein, 22929, Deutschland',
            'Pöhlen, Schönberg, Sandesneben-Nusse, Herzogtum Lauenburg, Schleswig-Holstein, 22929, Deutschland'
]

coordinates = []

for address in addresses:
    location = geolocator.geocode(address)

    lat, lon = location.latitude, location.longitude

    coordinates.append((lat, lon))

print(coordinates)

# output:
[(50.1262402, 8.767057053362574),
 (50.1262402, 8.767057053362574),
 (53.6805214, 10.4282207),
 (53.6805214, 10.4282207),
 (53.6805214, 10.4282207)]

希望对你有帮助=D

【讨论】:

  • 代码返回超时错误。有什么理由会发生这种情况?谢谢。
  • 我不认识男人
猜你喜欢
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
相关资源
最近更新 更多