与 geoDataFrames 相交

Intersects geoDataFrames

提问人:Diana Oryol 提问时间:11/16/2023 最后编辑:Diana Oryol 更新时间:11/16/2023 访问量:35

问:


我从问题
[https://stackoverflow.com/questions/45287150/identify-intersecting-polygons-in-single-geojson-file-with-geopandas][1] 中学到了解决方案

我得到了一个相交的 zid 的 geoDataFrame,但是,当我逐个测试时,它们没有相交。为什么?
我尝试了答案 1 和 2 的解决方案,但结果相同。
514、519区有共同边界

admzones = admzones[['zid', 'geometry']]
together = geopandas.sjoin(admzones, admzones.set_index('zid'))
together.loc[together.zid != together.index_right]

# zid|geometry|index_right
# 519|POLIGON()|514
#...

...

geo1 = admzones[admzones['zid']==519]
geo2 = admzones[admzones['zid']==514]
geo1['interssects'] = geo1.intersects(geo2)
geo1['interssects']
#False

geo1['intersection'] = geo1.intersection(geo2)
geo1['intersection']
#None

enter image description here

蟒蛇 空间 地理熊猫

评论


答:

0赞 Timeless 11/16/2023 #1

您没有分享示例,但 IIUC,您需要关闭索引对齐 ():align=False

geo_519 = admzones.loc[admzones["zid"]==519]
geo_514 = admzones.loc[admzones["zid"]==514]

geo_519.intersects(geo_514, align=False).any() # True
geo_519.intersection(geo_514, align=False).astype(bool).any() # True

enter image description here

admzones = admzones[["zid", "geometry"]]
together = admzones.sjoin(admzones.set_index("zid"))

print(together.loc[together["zid"] != together["index_right"]])

#    zid                                           geometry  index_right
# 0  514  POLYGON ((0.40000 0.10000, 0.75000 1.00000, 1....          519
# 1  519  POLYGON ((0.60000 0.50000, 0.59904 0.48040, 0....          514

您的代码很可能显示这样的:UserWarning

UserWarning:两个 GeoSeries 的索引不同。

从相交和相文档:

enter image description here

使用的输入 :

import geopandas as gpd
from shapely.geometry import Polygon, Point

admzones = gpd.GeoDataFrame(
    {"zid": [514, 519], "geometry":
     [Polygon([(0.4, 0.1), (0.75, 1), (1.5, 0.3)]),
      Point(0.4, 0.5).buffer(0.2)]})

评论

0赞 Diana Oryol 11/17/2023
in docs 说道: 我们还可以逐行检查两个 GeoSeries。上面的 GeoSeries 具有不同的索引。我们可以根据索引值对齐两个 GeoSeries 并使用 align=True 比较具有相同索引的元素,或者忽略索引并使用 align=False 根据它们的匹配顺序比较元素,我的 GeoDataFrame 由 1 行组成,相交必须以相同的方式工作。不?
1赞 Diana Oryol 11/17/2023
好的,我想通了。在 geo1 index=0 中,在 geo2.index=78 中。谢谢
0赞 Diana Oryol 11/17/2023
我明白了,这两个数字有一个共同的边界。我怎么能忽略共同边界?
0赞 Timeless 11/17/2023
不客气,但我认为这更适合一个新问题。随意打开它。