使用 Geopy 和 Python 进行地理编码 [英] Geocoding using Geopy and Python
问题描述
我正在尝试对包含位置名称和解析出的地址的 CSV 文件进行地理编码,该地址包括地址编号、街道名称、城市、邮政编码、国家/地区.我想通过 Geopy 使用 GEOPY 和 ArcGIS Geocodes.我想创建一个代码,循环遍历我的 5000 多个条目的 csv,并在我的 CSV 的不同列中为我提供纬度和经度.我想通过 Geopy 使用 ArcGIS Geocoding 服务.谁能给我一个代码来开始?谢谢!
I am trying to Geocode a CSV file that contains the name of the location and a parsed out address which includes Address number, Street name, city, zip, country. I want to use GEOPY and ArcGIS Geocodes through Geopy.I wanted to create a code that loops through my csv of 5000+ entries and gives me the latitude and longitude in separate columns in my CSV. I want to use ArcGIS Geocoding service through Geopy. Can anyone provide me with a code to get started? Thanks!
这是我的脚本:
import csv
from geopy.geocoders import ArcGIS
geolocator = ArcGIS() # here some parameters are needed
with open('C:/Users/v-albaut/Desktop/Test_Geo.csv', 'rb') as csvinput:
with open('output.csv', 'w') as csvoutput:
output_fieldnames = ['Name','Address', 'Latitude', 'Longitude']
writer = csv.DictWriter(csvoutput, delimiter=',', fieldnames=output_fieldnames)
reader = csv.DictReader(csvinput)
for row in reader:
# here you have to replace the dict item by your csv column names
query = ','.join(str(x) for x in (row['Name'], row['Address']))
Address, (latitude, longitude) = geolocator.geocode(query)
# here is the writing section
output_row = {}
output_row['Name'] = Name
output_row['Address'] = Address
output_row['Latitude'] = Latitude
output_row['Longitude'] =Longitude
writer.writerow(output_row)
推荐答案
我一直在使用这个脚本从 .csv 做一些批量地理编码.它要求一列包含您希望对其进行地理编码的完整文本地址,并且一列的标题为UniqueID",它对 .csv 中的每个项目都有一个唯一标识符.它还将打印出无法进行地理编码的所有地址的列表.它还会快速检查邮政编码是否可能不正确/是否会取消地理编码:
I've been using this script to do some batch-geocoding from .csv. It requires that one column contain the complete text address that you wish to geocode, and that one column be titled 'UniqueID', which has a unique identifier for each item in the .csv. It will also print out a list of any addresses that it failed to geocode. It also does a quick check to see if the zip code might be incorrect/throwing off the geocoding:
def main(path, filename):
# path to where your .csv lives, and the name of the csv.
import geopy
from geopy.geocoders import ArcGIS
import pandas as pd
Target_Addresses = pd.read_csv(path+'\\'+filename)
Target_Addresses['Lat'] = np.nan
Target_Addresses['Long'] = np.nan
Indexed_Targets = Target_Addresses.set_index('UniqueID')
geolocator = ArcGIS() #some parameters here
Fails = []
for index, row in Indexed_Targets.iterrows():
Address = row['Address']
Result = geolocator.geocode(Address)
if Result == None:
Result = geolocator.geocode(Address[:-7])
if Result == None:
Fails.append[Address]
else:
Indexed_Targets.set_value(index, 'Lat', Result.latitude)
Indexed_Targets.set_value(index, 'Long', Result.longitude)
else:
Indexed_Targets.set_value(index, 'Lat', Result.latitude)
Indexed_Targets.set_value(index, 'Long', Result.longitude)
for address in Fails:
print address
Indexed_Targets.to_csv(filename[:-4]+"_RESULTS.csv")
if __name__ == '__main__':
main(path, filename) # whatever these are for you...
这将输出一个带有_RESULTS"的新 csv(例如,'addresses.csv' 的输入将输出 'addresses_RESULTS.csv'),其中包含两个新的 'Lat' 和 'Long' 列.
This will output a new csv with "_RESULTS" (e.g., an input of 'addresses.csv' will output 'addresses_RESULTS.csv') with two new columns for 'Lat' and 'Long'.
这篇关于使用 Geopy 和 Python 进行地理编码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!