Фигурный точечный объект и фрейм данных Geopandas дают пустой вывод

#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) и получил правильный результат. Еще раз спасибо за вашу поддержку.