В GeoPandas список точек широты и долготы не классифицируется как граничная область.Python

Программы на Python
Ответить
Anonymous
 В GeoPandas список точек широты и долготы не классифицируется как граничная область.

Сообщение Anonymous »

Я работаю с шейп-файлом границ церемониального графства Англии, который доступен здесь:
https://www.data.gov.uk/dataset/0fb911e ... of-england
Шейп-файл находится в британской национальной сетке. (EPSG:27700).
У меня также есть DataFrame с местоположениями с широтой и долготой (WGS84). Я хочу определить, к какому церемониальному графству относится каждая точка.
Для большинства округов пространственное соединение работает правильно.
Однако для Корнуолла, Большого Лондона и Ратленда соединение всегда возвращает NaN, даже если при построении точки точки явно находятся внутри границы округа.
Код

Код: Выделить всё

import geopandas as gpd
from shapely.geometry import Point

regions = gpd.read_file("Ceremonial_County_Boundaries.shp")

points = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df["lon"], df["lat"])
points_bng = points.to_crs(regions.crs)

# Spatial join
joined = gpd.sjoin(points_bng, regions, how="left", predicate="within")
Что происходит не так
Пространственное соединение правильно соответствует примерно 90% местоположений.
Но все точки в Корнуолле, Большом Лондоне и Ратленде возвращаются как несовпадающие (index_right = NaN).
Я изолировал полигоны из шейп-файла:

Код: Выделить всё

county_poly = regions[regions["NAME"] == "Cornwall"]
print("Valid:", county_poly.geometry.is_valid.unique())
Выход:

Код: Выделить всё

Valid: [False]
И то же самое происходит с Большим Лондоном и Ратлендом — все три возвращают неверную геометрию.
Все остальные округа возвращают Valid: [True] и работают правильно.
Что я пробовал
  • Визуально подтверждено, что точки лежат внутри многоугольника
Точки показаны на графике заметно внутри границ Корнуолла/Лондона/Ратленда.
  • CRS правильный
Shapefile: EPSG:27700
Очки: EPSG:4326 → преобразовано в 27700
Будем благодарны за помощь или мысли?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ied-into-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»