zoukankan      html  css  js  c++  java
  • 收藏:用DE9IM判断二维空间位置关系

    很有用的一篇资料,经常用,经常找,不如搬过来。感谢原作者!

    来源:Classicning Daily Log

    http://www.classicning.com/blog/post/388.html

    DE-9IM:The Dimensionally Extended Nine-Intersection Model要使用DE-9IM首先要建立几何对象的interior,boundary和exterior。首先boundary是指对几何进行一次降维之后得到对 象,举例来说一个点的boundary为空,未封闭的线的boundary为其两个端点,封闭线的boundary为空,多边形的boundary为它的 环状边界。interior是指几何对象的边界被移除之后剩下的部分。exterior则是指不在boundary和interior中点构成的几何对 象。

    约定:以I(a),B(a),E(a)表示几何对象a的interior,boundary和exterior,以dim(a)表示几何对象的维度,在二维空间中他的取值为{-1, 0, 1, 2},其中-1代表空。为了便于表示,用下面一些符号来表示取值的集合:
    T : {0, 1, 2}
    F : {-1}
    * : {-1, 0, 1, 2}
    0 : {0}
    1 : {1}
    2 : {2}

    那么就可以用这样一个矩阵来判断几何对象a和b的位置关系:

     

    Interior

    Boundary

    Exterior

    Interior

    dim(I(a)∩I(b))

    dim(I(a)∩B(b))

    dim(I(a)∩E(b))

    Boundary

    dim(B(a)∩I(b))

    dim(B(a)∩B(b))

    dim(B(a)∩E(b))

    Exterior

    dim(E(a)∩I(b))

    dim(E(a)∩B(b))

    dim(E(a)∩E(b))

    另外,将零维对象简写为P,一维对象简写为L,二维对象简写为A。

    根据这个矩阵的值可以构造一个字符串,这个字符串称为IntersectionPattern。另外JTS中的IntersectionMatrix也封装了这个矩阵。

    以下是几个预定义的空间关系
    Equal 两个几何对象完全相同,它的定义表示为DE-9IM即"TFFFTFFFT"
    Disjoint 两个对象的边界和内部都没有任何公共部分,表示为DE-9IM是"FF*FF****"
    Intersection Disjoint取反
    Touches 简单地说Touches表示两个对象的边缘相接触,这个关系是以下几类几何对象间特有的:A/A, L/L, L/A, P/A ,P/L。用DE-9IM表示,可以为"FT*******", "F**T*****"或"F***T****"
    Crosses Crosses表示一个对象穿过另一个对象,它应用于P/L, P/A, L/L和L/A之间。用DE-9IM表示为:"T*T******"(P/L, P/A,L/A),"0********"(L/L)
    Within 包含于。DE-9IM表示:"T*F**F***"
    Overlaps 相叠,应用于A/A, L/L 和P/P之间。DE-9IM:"T*T***T**"(A/A, P/P),"1*T***T**"(L/L)
    Contains 包含,对立于Within。

    JTS的Geometry类实现了以上的所有方法,而由于这些方法不能表示全部的空间位置关系,因此OGC的Simple Feature Specification和JTS都提供了一个relate方法,用来测试指定的DE-9IM关系。

  • 相关阅读:
    使用Distinct()内置方法对List集合的去重 问题
    TCP连接与HTTP请求
    ASP.NET MVC 使用 Authorize 属性过滤器验证用户是否已登录
    C#进阶系列——WebApi 跨域问题解决方案:CORS
    关于设计模式的六大原则
    C# WebApi 接口传参详解
    数据库数据流量太大-问题诊断
    docker的build生成镜像和启动container
    docker生成dotnet core镜像
    NET Core 源码浏览站点工具
  • 原文地址:https://www.cnblogs.com/flyingfish/p/922231.html
Copyright © 2011-2022 走看看