Я использую библиотеку OSMNX с OpenStreetMaps, чтобы получить административные границы этих населенных пунктов.
Вот ссылка на файл :
https://docs.google.com/spreadsheets/d/ ... ue&sd=true
Дело в том, что в OpenStreetMaps, некоторые из местности отмечены точками, а не полигонами, поэтому я не могу использовать опцию Features_from_place (потому что она находит только полигоны)
Затем я попробовал использовать ox.geocoder.geocode_to_gdf(thelist , Which_result=1, by_osmid=False), где "thelist" содержит мои 2 тыс. названий населенных пунктов.
То же самое - i получить ошибку недостаточного ответа для первой локальности, которую невозможно найти из списка.
Есть ли идеи, как заставить OSMNX игнорировать элементы, которые он не смог найти?
Я пробовал гуглить, но результатов нет...
На самом деле это очень расстраивает, потому что для меня это больше похоже на ошибку, а не на осмысленное поведениеОБНОВЛЕНИЕ:
Я пытался найти свои населенные пункты с помощью функции Features_from_place и получил очень странные результаты.
В документации говорится, что функция Features_from_place дает нам какой-либо результат только в том случае, если есть Тип объекта многоугольника (или мультиполя).
Итак, я попробовал использовать 2 типа запроса:
код выглядит так:
Код: Выделить всё
dat = pd.read_excel('oren.xlsx')
lists = dat['Населённый пункт'][dat['Сроки'] =="-"].unique()
thelist=lists.tolist()
tags = {"name": thelist}
gdf = ox.features_from_place("Оренбургская Область", tags)
gdf2 = ox.features_from_place(thelist, {'addr:region':'Оренбургская Область'})
И вы знаете что? Он нашел много данных, а также POINT, Lines и другие типы объектов, а не только Polygons или MPolygons.
Второй способ попробовать этот код:
Код: Выделить всё
gdf2 = ox.features_from_place(thelist, {'addr:region':'Оренбургская Область'})
и этот выдал ошибку.
Вот полный текст ошибки:
C:\Users\SSulyan\AppData\Local\anaconda3\Lib\site-packages\osmnx_overpass.py:254:
Предупреждение пользователя: эта область в 81 раз превышает настроенный максимальный запрос Overpass
размер площади. Он будет автоматически разделен на несколько
подзапросов соответственно. Это может занять много времени. multi_poly_proj
= utils_geo._consolidate_subdivide_geometry(poly_proj)
---------------------------------- ----------------------------------------- TypeError Traceback (последний вызов
последняя) Ячейка In[191], строка 3
1 tags = {"name": thelist}
2 gdf = ox.features_from_place("Оренбургская область", tags)
----> 3 gdf2 = ox.features_from_place(thelist, {'addr:region':'Оренбургская область'})
Файл
~\AppData\Local\anaconda3\Lib\site-packages\osmnx\features.py:294, in
features_from_place(query, tags, Which_result, buffer_dist)
289 gdf_place = geocoder.geocode_to_gdf(
290 query, Which_result=what_result, buffer_dist=buffer_dist
291 )
292 elif isinstance(запрос, список):
293 # если это список, он содержит несколько мест для получения
--> 294 gdf_place = geocoder.geocode_to_gdf(query, buffer_dist=buffer_dist)
295 else: # pragma: no Cover
296 msg = "запрос должен быть словарем, строкой или списком строк"
Файл
~\AppData\Local\anaconda3\Lib\site-packages\osmnx\geocoder.py:139, в
geocode_to_gdf(query, Which_result, by_osmid,uffer_dist)
137 gdf = gpd.GeoDataFrame( )
138 для q, записываем в zip(query,what_result):
--> 139 gdf = pd.concat([gdf, _geocode_query_to_gdf(q, wr, by_osmid)])
141 # сброс индекса GeoDataFrame и установка его CRS
142 gdf = gdf.reset_index(drop =True)
Файл
~\AppData\Local\anaconda3\Lib\site-packages\osmnx\geocoder.py:194, в
_geocode_query_to_gdf(query, Which_result, by_osmid)
190 result = results[0]
192 elif Which_result равен None:
193 # else, if that_result=None, автоматически выбрать первый (Multi)Polygon
--> 194 result = _get_first_polygon(results, query)
196 elif len(results) >= Which_result:
197 # else, если мы получили хотя бы какой_результат, выберите этот
198 result = results[what_result - 1]
Файл
~\AppData\Local\anaconda3\Lib\site-packages\osmnx\geocoder.py:259, в
_get_first_polygon(results, query)
257 # if мы так и не нашли многоугольник, выдает ошибку
258 msg = f"Nominatim не удалось геокодировать запрос {query!r} в геометрию типа (Multi)Polygon"
--> 259 поднять TypeError(msg)
TypeError: Nominatim не удалось геокодировать запрос 'Чабла' в геометрию
типа (Multi) )Polygon
ВЕСЬ КОД выглядит так:
Код: Выделить всё
dat = pd.read_excel('oren.xlsx')
lists = dat['Населённый пункт'][dat['Сроки'] =="-"].unique()
thelist=lists.tolist()
tags = {"name": thelist}
gdf = ox.features_from_place("Оренбургская Область", tags)
gdf2 = ox.features_from_place(thelist, {'addr:region':'Оренбургская Область'})
Я пробую этот код:
Код: Выделить всё
ox.geocoder.geocode_to_gdf('W366775538', which_result=1, by_osmid=True)
Ошибка
Подробнее здесь: https://stackoverflow.com/questions/792 ... r-in-osmnx
Мобильная версия