Đối với mã hóa địa lý với ArcGIS, thông tin đăng nhập phải được cung cấp gis = GIS["//www.arcgis.com", "username", "password"]
.
Về mặt gấu trúc, mã này nên thực hiện công việc [được điều chỉnh từ câu trả lời của @marcelo Villa]
from arcgis.geocoding import reverse_geocode
from arcgis.geometry import Geometry
from arcgis.gis import GIS
import pandas as pd
gis = GIS["//www.arcgis.com", "***", "***"]
def get_zip[df, lon_field, lat_field]:
location = reverse_geocode[[Geometry[{"x":float[df[lon_field]], "y":float[df[lat_field]], "spatialReference":{"wkid": 4326}}]]]
return location['address']['Postal']
df = pd.DataFrame[{
'Lat': [29.39291, 29.39923, 29.40147, 29.38752, 29.39291, 29.39537, 29.39343, 29.39291, 29.39556],
'Lon': [-98.50925, -98.51256, -98.51123, -98.52372, -98.50925, -98.50402, -98.49707, -98.50925, -98.53148]
}]
zipcodes = df.apply[get_zip, axis=1, lat_field='Lat', lon_field='Lon']
Có lẽ không thông minh như gấu trúc nhưng sử dụng mô -đun nội bộ của Python và API của ArcGIS cho mã hóa địa lý ngược Python.
from arcgis.geocoding import reverse_geocode
from arcgis.geometry import Geometry
from arcgis.gis import GIS
import csv
gis = GIS["//www.arcgis.com", "***", "***"]
coords = [
[29.39291, -98.50925],
[29.39923, -98.51256],
[29.40147, -98.51123],
[29.38752, -98.52372],
[29.39291, -98.50925],
[29.39537, -98.50402],
[29.39343, -98.49707],
[29.39291, -98.50925],
[29.39556, -98.53148]
]
result = []
for lat, lon in coords:
pt = Geometry[{
"x": float[lon],
"y": float[lat],
"spatialReference": {
"wkid": 4326
}
}]
try:
result.append[{'lat': lat, 'lon': lon, 'geocoded': reverse_geocode[pt]}]
except:
pass
result_zip = []
for item in result:
result_item = {
'lat': item['lat'],
'lon': item['lon'],
'zip': item['geocoded']['address']['Postal']
}
result_zip.append[result_item]
keys = result_zip[0].keys[]
with open['output.csv', 'w', encoding='utf8', newline=''] as output_file:
dict_writer = csv.DictWriter[output_file, keys, delimiter=';', quoting=csv.QUOTE_NONE, lineterminator='\r']
dict_writer.writeheader[]
dict_writer.writerows[result_zip]
Đầu ra CSV-File trông như sau
Tôi có một khung dữ liệu về tọa độ vĩ độ và kinh độ trên tệp CSV này: Longlat.
Tôi đã sử dụng mã này để cố gắng lấy mã zipcodes:
import copy
def get_zipcode[df, geolocator, lat_field, lon_field]:
location = geolocator.reverse[[df[lat_field], df[lon_field]]]
return location.raw['address']['postcode']
geolocator = geopy.Nominatim[user_agent='myusername'] #My OpenMap username
zipcodes = longlat.apply[get_zipcode, axis=1, geolocator=geolocator, lat_field=longlat['LATITUDE_X'], lon_field=longlat['LONGITUDE_X']]
Tôi đã gặp lỗi:
KeyError
"None of [Float64Index[[39.0962320000896, 39.1462010000896, 39.1347670000896,\n 39.1076250000897, 39.0928490000897, 39.1648900000896,\n 39.1846440000895, 39.0970790000897, 39.1491220000896,\n 39.1145560000896,\n ...\n 39.1039560000896,
Làm thế nào để tôi sửa chữa nó?
Mã bưu điện mã hóa và tính toán khoảng cách
Pgeocode là một thư viện Python để truy vấn ngoại tuyến hiệu suất cao của tọa độ GPS, tên khu vực và tên đô thị từ mã bưu chính. Khoảng cách giữa các mã bưu chính cũng như các truy vấn khoảng cách chung cũng được hỗ trợ. Cơ sở dữ liệu Geonames đã qua sử dụng bao gồm mã bưu chính cho 83 quốc gia.
Hiện tại, chỉ có các truy vấn trong cùng một quốc gia được hỗ trợ.
Để biết thêm tài liệu, xem pgeocode.readthedocs.io.
Cài đặt
Pgeocode yêu cầu Python 3.6+ cũng như các gói Numpy và Pandas. Nó có thể được cài đặt với,numpy and pandas packages. It can be installed with,
pip install pgeocode
Bắt đầu nhanh
Truy vấn mã bưu điện
>>> import pgeocode
>>> nomi = pgeocode.Nominatim['fr']
>>> nomi.query_postal_code["75013"]
postal_code 75013
country_code FR
place_name Paris 13
state_name Île-de-France
state_code 11
county_name Paris
county_code 75
community_name Paris
community_code 751
latitude 48.8322
longitude 2.3561
accuracy 5
>>> nomi.query_postal_code[["75013", "69006"]]
postal_code place_name state_name latitude longitude
0 75013 Paris 13 Île-de-France 48.8322 2.3561
1 69006 Lyon 06 Auvergne-Rhône-Alpes 45.7679 4.8506
Tính toán khoảng cách
>>> dist = pgeocode.GeoDistance['fr']
>>> dist.query_postal_code["75013", "69006"]
389.156
>>> dist.query_postal_code[["75013", "75014", "75015"], ["69006", "69005", "69004"]]
array[[ 389.15648697, 390.12577967, 390.49857655]]
Định dạng mã hóa địa lý
Kết quả của một truy vấn địa lý địa lý là một pandas.dataframe với các cột sau,pandas.DataFrame with the following columns,
Country_code: Mã quốc gia ISO, 2 ký tự: iso country code, 2 characters
Mã số bưu điện : postal code
place_name: Tên địa điểm [ví dụ: thị trấn, thành phố, v.v.] : place name [e.g. town, city etc]
State_Name: 1. Đặt hàng phân khu [trạng thái] : 1. order subdivision [state]
State_Code: 1. Đơn hàng phân khu [trạng thái] : 1. order subdivision [state]
County_name: 2. Đặt hàng phân khu [quận/tỉnh] : 2. order subdivision [county/province]
County_code: 2. Đơn đặt hàng phân khu [quận/tỉnh] : 2. order subdivision [county/province]
Community_name: 3. Đơn đặt hàng phân khu [cộng đồng] : 3. order subdivision [community]
Community_code: 3. Đơn đặt hàng phân khu [cộng đồng] : 3. order subdivision [community]
Vĩ độ: Vĩ độ ước tính [WGS84] : estimated latitude [wgs84]
Kinh độ: Kinh độ ước tính [WGS84] : estimated longitude [wgs84]
Độ chính xác: Độ chính xác của LAT/LNG từ 1 = ước tính đến 6 = Centroid : accuracy of lat/lng from 1=estimated to 6=centroid
Cấu hình và mặc định
Thư mục lưu trữ
Mặc định là ~/pgeocode_data, đó là thư mục nơi dữ liệu được tải xuống để tiêu thụ sau này. Nó có thể được thay đổi bằng cách sử dụng biến môi trường pgeocode_data_dir, tức là xuất pgeocode_data_dir =/tmp/pgeocode_data.~/pgeocode_data, it is the directory where data is downloaded for later consumption. It can be changed using the environment variable PGEOCODE_DATA_DIR, i.e. export PGEOCODE_DATA_DIR=/tmp/pgeocode_data.
Nguồn dữ liệu
Nguồn dữ liệu được cung cấp dưới dạng danh sách trong biến pgeocode.doad_url. Giá trị mặc định là,pgeocode.DOWNLOAD_URL variable. The default value is,
DOWNLOAD_URL = [
"//download.geonames.org/export/zip/{country}.zip",
"//symerio.github.io/postal-codes-data/data/geonames/{country}.txt",
]
Nguồn dữ liệu được thử từ đầu đến cuối cho đến khi một hoạt động. Ở đây liên kết thứ hai là một tấm gương của thứ nhất.
Cũng có thể mở rộng biến này với các nguồn dữ liệu của bên thứ ba, miễn là chúng tuân theo cùng một định dạng. Xem ví dụ Kho lưu trữ dữ liệu mã hóa mã bưu điện để biết các ví dụ về các tệp dữ liệu.
Giấy phép
Gói Pgeocode được phân phối theo giấy phép BSD 3 mệnh đề.
Các quốc gia được hỗ trợ
Danh sách các quốc gia có sẵn trong cơ sở dữ liệu Geonames, với các mã quốc gia tương ứng, được đưa ra dưới đây,
Andorra [AD], Argentina [AR], Samoa Mỹ [AS], Áo [AT], Úc [AU], Quần đảo Åland [AX], Bangladesh [BD], Bỉ [BE], Bulgaria [BG], Bermuda [BM ], Brazil [BR], Belarus [bởi], Canada [CA], Thụy Sĩ [CH], Colombia [CO], Costa Rica [CR], Séc [CZ], Đức [DE], Đan Mạch [DK], Cộng hòa Dominican . GG], Greenland [GL], Guadeloupe [GP], Guatemala [GT], Guam [Gu], Croatia [HR], Hungary [HU], Ireland [IE], Isle of Man [IM], Ấn Độ [IN], Iceland [IS], Ý [IT], Jersey [JE], Nhật Bản [JP], Liechtenstein [LI], Sri Lanka [LK], Litva [LT], Luxembourg [Lu], Latvia [LV], Monaco [MC] , Cộng hòa Moldova [MD], Quần đảo Marshall [MH], Cộng hòa Nam Tư cũ của Macedonia [MK], Quần đảo Bắc Mariana [MP], Martinique [MQ], Malta [MT], Mexico [MX], Malaysia [MY] , New Caledonia [NC], Hà Lan [NL], Na Uy [không], N EW Zealand [New Zealand], Philippines [PH], Pakistan [PK], Ba Lan [PL], Saint Pierre và Miquelon [PM], Puerto Rico [PR], Bồ Đào Nha [PT], Réunion [Re], Romania [RO], Liên đoàn Nga [RU], Thụy Điển [SE], Slovenia [SI], Quần đảo Svalbard và Jan Mayen [SJ], Slovakia [SK], San Marino [SM], Thái Lan [TH], Thổ Nhĩ Kỳ [TR], Ukraine [UA] , Hoa Kỳ [Hoa Kỳ], Uruguay [UY], Holy See [VA], Quần đảo Virgin thuộc Hoa Kỳ [VI], Quần đảo Wallis và Futuna [WF], Mayotte [YT], Nam Phi [ZA]
Xem cơ sở dữ liệu Geonames để biết thêm thông tin.