QGIS和Python(geopandas)的不同输出

2024-05-16 02:26:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python和qgis的初学者。在

我试图用交集使两个shapefile相交。(多边形)

首先,我尝试了与QGIS的交集,它是有效的。(EPSG:4326) QGIS picture

但问题是,当我试图在python上相交时,只返回一个值。 怎么了??在

这是我的密码

sb_4326 = buildings polygon
sg_4326 = city_polygon
import geopandas as gpd
###
###
sg4326 = gpd.read_file('sg_4326/sg4326.shp')
sb4326 = gpd.read_file('sb_4326/sb4326.shp')
mm = sb4326.intersects(sg4326)

Out[35]:
0        False
1        False
2        False
3        False
4        False
5        False
6        False
7        False
8        False
9        False
10       False
11       False
12       False
13       False
14       False
15       False
16       False
17       False
18       False
19        True
20       False
21       False
22       False
23       False
24       False
25       False
26       False
27       False
28       False
29       False

有27000个值。在


Tags: falsereadsgfilesbshapefilepolygon初学者
2条回答

您可能需要像这样使用overlay

gpd.overlay(sg4326, sb4326, how='intersection')

这将返回由两个数据帧的交集形成的所有几何图形。在

或者sjoin做你想做的事情:

^{pr2}$

这会将一个index_right列添加到sb4326,用于从sg4326相交的所有几何图形。在

我不确定geopandas被两个大小不等的GeoSeries的行为是什么。在

你可能想要:

sb4326.geometry.map(lambda building: any(sg4326.intersects(building))

这将一次一个针对整个区域测试每个建筑,如果交叉点的anyTrue,则返回True。在

请注意,这将运行得相当缓慢。有一些技巧可以让它运行得更快(QGIS可能会使用这些技巧),但这只是一个起点。在

相关问题 更多 >