OGR几何关系与操作

OGR几何关系与操作

关系

本文脚本需要导入ogr模块

from osgeo import ogr

Equals

两个几何的边界、内部和外部重合

a1=ogr.CreateGeometryFromWkt("POINT(1 1)")
a2=ogr.CreateGeometryFromWkt("POINT(1 1)")

print(a1.Equals(a2)) # True

Contains

几何包含另一个几何的内部和边界,并且边界不接触,适用于所有几何类型,并且a.Contains(b)==b.Within(a)

p=ogr.CreateGeometryFromWkt("POLYGON((0 0,0 2,2 2,2 0,0 0))")
l=ogr.CreateGeometryFromWkt("LINESTRING(0.5 0.5,1.5 1.5)")

a=ogr.CreateGeometryFromWkt("POINT(0.5 0.5)")
b=ogr.CreateGeometryFromWkt("POINT(1 1)")
c=ogr.CreateGeometryFromWkt("POINT(1.5 1.5)")

print(p.Contains(l)) # True
print(p.Contains(a)) # b,c True
print()
print(l.Contains(a)) # False
print(l.Contains(b)) # True
print(l.Contains(c)) # False
print()
print(a.Within(l)) # False
print(b.Within(l)) # True
print(c.Within(l)) # False

点的边界为空,线的边界就是线的两个端点,因此线不包含本身的两个端点,多边形的边界是组成边界的线。

Crosses

几何与另一个几何内部相交,但不包含它,且相交的维度小于其中一个几何的维度,适用于线–>线,线–>面。

在这里插入图片描述

p=ogr.CreateGeometryFromWkt("POLYGON((0 0,0 2,2 2,2 0,0 0))")
l1=ogr.CreateGeometryFromWkt("LINESTRING(1 1,3 2)")
l2=ogr.CreateGeometryFromWkt("LINESTRING(2 3,3 1)")

print(l1.Crosses(p)) # True
print(l1.Crosses(l2)) # True

Disjoint

两个几何边界、内部都不相交

a1=ogr.CreateGeometryFromWkt("POINT(0 0)")
a2=ogr.CreateGeometryFromWkt("POINT(1 1)")

print(a1.Disjoint(a2)) # True

Touches

两个几何边界相交,内部不相交

在这里插入图片描述

l1=ogr.CreateGeometryFromWkt("LINESTRING(4 2,3 1)")
l2=ogr.CreateGeometryFromWkt("LINESTRING(3 1,2 2)")

p1=ogr.CreateGeometryFromWkt("POLYGON((0 0,0 1,1 1,2 0,0 0))")
p2=ogr.CreateGeometryFromWkt("POLYGON((1 1,1 2,2 2,2 0,1 1))")

print(l1.Touches(l2)) # True
print(p1.Touches(p2)) # True
print(l2.Touches(p2)) # True

Intersects

两个几何的Contains、Crosses、Equals、Touches、Within其中一个为True,则为True

Overlaps

两个多边形相交,但相互不包含

在这里插入图片描述

p1=ogr.CreateGeometryFromWkt("POLYGON((0 0,0 3,3 3,3 0,0 0))")
p2=ogr.CreateGeometryFromWkt("POLYGON((1 1,1 2,2 2,2 1,1 1))")
p3=ogr.CreateGeometryFromWkt("POLYGON((2 1,2 2,4 2,4 1,2 1))")

print(p2.Overlaps(p1)) # False
print(p3.Overlaps(p1)) # True

操作

Buffer

缓冲区

在这里插入图片描述

l=ogr.CreateGeometryFromWkt("LINESTRING(0 0,1 1)")
print(l.ExportToJson())
buffer=l.Buffer(0.5)

Boundary

提取边界

在这里插入图片描述

p=ogr.CreateGeometryFromWkt("POLYGON((0 0,1 2,3 1,2 0,0 0))")
print(p.ExportToJson())
boundary=p.Boundary()
print(boundary.ExportToJson())

# { "type": "Polygon", "coordinates": [ [ [ 0.0, 0.0 ], [ 1.0, 2.0 ], [ 3.0, 1.0 ], [ 2.0, 0.0 ], [ 0.0, 0.0 ] ] ] }
# { "type": "LineString", "coordinates": [ [ 0.0, 0.0 ], [ 1.0, 2.0 ], [ 3.0, 1.0 ], [ 2.0, 0.0 ], [ 0.0, 0.0 ] ] }

Intersection

相交

在这里插入图片描述

p1=ogr.CreateGeometryFromWkt("POLYGON((0 0,1 2,3 1,2 0,0 0))")
p2=ogr.CreateGeometryFromWkt("POLYGON((0 0,1 2,3 1,2 0,0 0))")

p1.Intersection(p2)

SymDifference

对称差

在这里插入图片描述

p1.SymDifference(p2)

Difference

相减

在这里插入图片描述

p1.Difference(p2)

在这里插入图片描述

p2.Difference(p1)

Union

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J92yMuEc-1580799795474)(./assets/image-20200121155455428.png)]

p1.Union(p2)

Envelope

最小外包矩形

p=ogr.CreateGeometryFromWkt("POLYGON((0 0,1 2,3 1,2 0,0 0))")
envelope=p.GetEnvelope()
print("envelope:",envelope)

# envelope: (0.0, 3.0, 0.0, 2.0)

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

llc的足迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值