#python #geopandas
#python #геопанды #geopandas
Вопрос:
У меня есть таблица полигонов всех выходных областей Великобритании, структурированная таким образом:
newpoly
OBJECTID OA11CD LAD11CD Shape__Are Shape__Len TCITY15NM geometry
67519 67520 E00069658 E06000018 3.396296e 04 1006.464423 Nottingham POLYGON ((456069.067 340766.874, 456057.000 34...
67520 67521 E00069659 E06000018 1.014138e 05 1404.327776 Nottingham POLYGON ((456691.549 340778.104, 456557.864 34...
67521 67522 E00069660 E06000018 1.812783e 04 731.882609 Nottingham POLYGON ((456945.994 340821.233, 456969.220 34...
67522 67523 E00069661 E06000018 2.765546e 04 1112.317587 Nottingham POLYGON ((456527.178 340669.119, 456484.993 34...
67523 67524 E00069662 E06000018 3.647822e 04 964.989153 Nottingham POLYGON ((456301.845 340419.759, 456244.357 34...
и таблица пунктов, структурированная следующим образом:
restaurants
name latitude longitude geometry
0 Restaurant Sat Bains with rooms 52.925050 -1.167712 POINT (-1.16771 52.92505)
1 Revolution Hockley 52.954090 -1.144025 POINT (-1.14403 52.95409)
2 Revolution Cornerhouse 52.955517 -1.150088 POINT (-1.15009 52.95552)
но когда я делаю:
spatial_join = gpd.sjoin(restaurants, newpoly, op = 'contains')
spatial_join
0 строк совпадают.
геометрическая колонка ресторанов была составлена с помощью:
restaurants = pd.read_csv('Restaurants_clean.csv')
restaurants = gpd.GeoDataFrame(
restaurants, geometry=gpd.points_from_xy(restaurants.longitude, restaurants.latitude))
Я пробовал разные аргументы ‘op’, но возникает та же проблема. Я убежден, что должно быть объединение, потому что в таблице существуют все области вывода Великобритании.
Я что-то упускаю?
Ответ №1:
Вы используете разные проекции. Я уверен, что GeoPandas sjoin
на самом деле предупреждает вас об этом. Создайте свой точечный слой следующим образом:
restaurants = pd.read_csv('Restaurants_clean.csv')
restaurants = gpd.GeoDataFrame(
restaurants,
geometry=gpd.points_from_xy(restaurants.longitude, restaurants.latitude),
crs=4326)
restaurants = restaurants.to_crs(newpoly.crs)
Сначала я указываю CRS ввода (как 4326, что является кодом EPSG WS84, то есть координатами lon / lat), а затем повторно проецирую данные на те же CRS, которые newpoly
есть (я предполагаю, 27700).
Комментарии:
1. Да, это решаемая проблема. Я не получал предупреждения, но это может быть связано с тем, что я использую vscode
2. Да, по какой-то причине VSCode по умолчанию подавляет предупреждения.