我有一个运行OpenLayers的应用程序,并遇到了一个有趣的问题。
我创建了一个名为Project的多边形。 然后我有多边形内的子项目。
第一次创建子项目时,我剪切子项目,使其位于项目内。
SpatialManager.ClipShape(subShape, projectShape);
当您去编辑项目时,我想确保您将子项目保留在项目中。
if(projectShape.STContains(subShape).isFalse)
剪辑/包含问题。剪切时,项目和子项目共享相同的边界线。
STContains
不会是真的,因为他们共享线条。
无论如何检查多边形是否包含另一个形状的百分比,或者包含共享线?
感谢。
答案 0 :(得分:2)
您正在寻找STIntersects,如果任何一个多边形与另一个多边形有任何共同点(包括边缘),则返回true。您可能还会发现STTouches有用,如果两个多边形接触,即使在单个点处也会返回,但在另一个内部没有任何内部点,这将返回true。 STContains
并不适合您,因为多边形共享一个共同的边界,或者引用下面解释的DE-9IM:
几何b位于a的内部。另一个定义:" a'包含' b如果没有b点位于a的外部,并且b内部的至少一个点位于a的内部
有一些稍微可怕的名字Dimensionally Extended nine-Intersection Model,由于显而易见的原因缩写为DE-9IM,这解释了空间谓词的基本理论。