#python #pandas #shapely
Вопрос:
У меня есть геопанда df «районы» всех районов Парижа и объект shapley point «eiffel_tower» Эйфелевой башни. Когда я выполню
mask=districts.contains(eiffel_tower) districts[mask]
Спасибо. Я попробовал districts.geometry.contains(eiffel_tower); но безуспешно. «eiffel_tower» и районы, как показано ниже:
from shapely.geometry import Point eiffel_tower = Point(255422.6, 6250868.9) districts=geopandas.read_file('Paris/paris_districts_utm.geojson')
районы.глава(2) показывает: идентификатор имя района геометрия населения 0 1 ПОЛИГОН Сен-Жермен-л’Оксерруа 1672 ((451922.133 5411438.484,… 1 2 ПОЛИГОН Халлеса 8984 ((452278.419 5412160.893,…
Я получаю пустой вывод. Что может быть не так?
ТИА Шери
Комментарии:
1. Что такое тип данных
district
? Я спрашиваю, потому что только геосерия имеет такую функциюcontains()
. В противном случае ваш код выглядит хорошо, и я думаю, что вам нужно проверить свои данные. Не пропал ли какой-нибудь район? Есть ли опечатка в координатах? Можете ли вы вручную найти правильный район в своих данных?2. Спасибо. район имеет тип данных geopandas.geodataframe. Геодезический каркас
3. Трудно догадаться, как называются ваши столбцы, но если у вас есть, например
geometry
, в нем, когда попробуйтеdistricts.geometry.contains(eiffel_tower)
. Если это не решит вашу проблему, пожалуйста, расширьте свой пример, покажите, как ваш геодезический кадр и ваша точка eiffel_tower защищены.4. Спасибо. Я попробовал districts.geometry.contains(eiffel_tower); но безуспешно. «eiffel_tower» и районы, как показано ниже: из точки импорта shapely.geometry eiffel_tower = Точка(255422.6, 6250868.9) районы=геопандас.read_file («Париж/париж_район_утм.геойсон») районы.глава(2) показывает: идентификатор имени района геометрия населения 0 1 ПОЛИГОН Сен-Жермен-л’Оксерруа 1672 ((451922.133 5411438,484, … 1 2 ПОЛИГОНА Халлес 8984 ((452278.419 5412160,893,…
Ответ №1:
Ваша геолокация Эйфелевой башни, похоже, не соответствует районам. Первое значение намного меньше (255422), чем одно из двух (451922,…).
Чтобы быть уверенным в этом, выполните district.geometry.bounds
, что вернется minx
miny
, maxx
и maxy
, тогда вы сможете проверить вручную и , вероятно, увидите, что расположение Эйфелевой башни находится не в этом районе.
Угадывание: Моей первой мыслью было, что у вас есть опечатка, eiffel_tower = Point(255422.6, 6250868.9)
и она должна быть eiffel_tower = Point(455422.6, 6250868.9)
.
Комментарии:
1. Большое спасибо. Вы правы. Я только что использовал значение UTM точки Эйфелевой башни(448265.91, 5411920.65) и получил правильный результат. Еще раз спасибо за вашу поддержку.