Обратное геокодирование глобальных точек для адресов на английском языке sh с использованием Nominatim и geodataframe - PullRequest
1 голос
/ 16 июня 2020

Я новичок в программировании, stackoverflow, python и геопространстве! Я играю с небольшим набором данных csv из 13 строк и 2 столбцов - широты и долготы. Я пытаюсь отменить геокодирование и получить адреса на английском языке sh.

Мой набор данных -

 Longitude Latitude
54.34      24.47
55.6       24.78
16.36      48.2
151.21    -33.87
4.36       50.85
50.57      26.21
-43.24    -22.92
-49.05    -22.34
-114.07    50.91
8.54       47.41
-70.52    -33.39
116.17     39.92
116.51     39.79

Я пробовал 2 способа отменить геокодирование. Каждый раз я получаю сообщение об ошибке.

1) Сначала я создал столбец с координатами и использовал этот столбец

data['coordinates'] = '{},{}'.format(data['Latitude'], data['Longitude']) 
location = reverse_geocode ((data['coordinates'].progress_map(reverse_geocode)), addressdetails = True)

Я получаю - ValueError: Должна быть пара координат или точка

2) Из-за указанной выше ошибки я создал фрейм геоданных и использовал столбец геометрии. Столбец геометрии создан (data_gdf.head ()).

data_gdf = gpd.GeoDataFrame(
data, geometry = gpd.points_from_xy(data['Longitude'], data['Latitude']))
location = reverse_geocode ((data_gdf['geometry'].progress_map(reverse_geocode)), addressdetails = True) 

Однако я получаю сообщение об ошибке - getTypeError: не удалось создать экземпляр Point

Собираем все вместе -

import shapely
import geopandas as gpd
import os
import geopy
from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter

# for the progress bar
from tqdm import tqdm, tqdm_notebook   
# instantiate
tqdm.pandas(tqdm_notebook)

# get the csv data and convert to geodataframe
csv = os.path.join (data_folder,filename)
data = pd.read_csv(csv)

data['coordinates'] = '{},{}'.format(data['Latitude'], data['Longitude']) 

data_gdf = gpd.GeoDataFrame(data, geometry = gpd.points_from_xy(data['Longitude'],data['Latitude']))
data_gdf.crs = 'EPSG:4326'

# reverse geocode
geo_service = Nominatim (user_agent = "Reverse Geocoding", timeout=10)
reverse_geocode = RateLimiter (geo_service.reverse, min_delay_seconds=0.001)

#location = reverse_geocode ((data['coordinates'].progress_map(reverse_geocode)), addressdetails = True)
location = reverse_geocode ((data_gdf['geometry'].progress_map(reverse_geocode)), addressdetails = True)
location.raw

Моя цель во время изоляции состояла в том, чтобы изучить / понять геопространственную сцену. Я учусь на бесплатных онлайн-ресурсах. У меня нет учителя / наставника, который помог бы мне с моими ошибками. Мы будем благодарны за любые указатели. Спасибо.

...