QGIS 和 Python(geopandas) 之间的不同输出
different output between QGIS and Python(geopandas)
我是 python 和 qgis 的初学者。
我尝试使用交集将两个 shapefile 相交。 (多边形)
首先,我尝试了与 QGIS 的交集,它起作用了。 (EPSG : 4326)
QGIS picture
但问题是,当我试图在 python 处相交时,只有一个值 returns。
怎么了??
这是我的代码
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 个值。
我不确定当 geopandas
被交给两个大小不等的 GeoSeries
(?) 时它的行为是什么。
你可能想要:
sb4326.geometry.map(lambda building: any(sg4326.intersects(building))
这将针对整个区域集测试每个建筑物,并且 return True
如果 any
的交叉点是 True
。
请注意,这 运行 相当缓慢。有一些技巧可以使它 运行 更快(QGIS 可能使用),但这是一个起点。
您可能想像这样使用 overlay:
gpd.overlay(sg4326, sb4326, how='intersection')
这returns两个数据框相交形成的所有几何图形。
或者 sjoin 做你想做的事:
gpd.sjoin(sb4326, sg4326, how='inner', op='intersection')
这会为 sb4326 中的所有相交几何添加一个 index_right
列。
我是 python 和 qgis 的初学者。
我尝试使用交集将两个 shapefile 相交。 (多边形)
首先,我尝试了与 QGIS 的交集,它起作用了。 (EPSG : 4326) QGIS picture
但问题是,当我试图在 python 处相交时,只有一个值 returns。 怎么了??
这是我的代码
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 个值。
我不确定当 geopandas
被交给两个大小不等的 GeoSeries
(?) 时它的行为是什么。
你可能想要:
sb4326.geometry.map(lambda building: any(sg4326.intersects(building))
这将针对整个区域集测试每个建筑物,并且 return True
如果 any
的交叉点是 True
。
请注意,这 运行 相当缓慢。有一些技巧可以使它 运行 更快(QGIS 可能使用),但这是一个起点。
您可能想像这样使用 overlay:
gpd.overlay(sg4326, sb4326, how='intersection')
这returns两个数据框相交形成的所有几何图形。
或者 sjoin 做你想做的事:
gpd.sjoin(sb4326, sg4326, how='inner', op='intersection')
这会为 sb4326 中的所有相交几何添加一个 index_right
列。