0

我是python和qgis的初学者。

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

首先,我尝试了与 QGIS 的交集,它可以工作。(EPSG : 4326) QGIS 图片

但问题是,当我试图在 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 个值。

4

2 回答 2

0

我不确定geopandas当它被交给两个GeoSeries大小不等的(?)时会发生什么行为。

你可能想要:

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

这将一次一个地针对整组区域测试每个建筑物,True如果any交叉口是,则返回True

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

于 2017-02-03T05:36:47.750 回答
0

您可能希望像这样使用叠加层

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

这将返回由两个数据框的交叉点形成的所有几何图形。

或者也许sjoin做你想要的:

gpd.sjoin(sb4326, sg4326, how='inner', op='intersection')

index_right会将 sb4326 中相交的所有几何图形的列添加到 sb4326。

于 2019-10-08T20:52:27.980 回答