В чем разница между пространственными предикатами «Обложки» и «Содержит»?

9

Я пытаюсь понять Пространственные предикаты матрицы пересечения DE-9IM. Я не вижу разницы между предикатами Covers (соответственно CoveredBy ) и Contains (соответственно внутри ).

Я пытаюсь рисовать геометрии с помощью JTS Topology Suite , они всегда Covers = True и Contains = True (или оба являются ложными), но мне не удается их различить, то есть увидеть разницу между Coversи Contains. У кого-нибудь есть пример (желательно WKT или картинка), который иллюстрирует разницу?

Вернфрид Домшайт
источник

Ответы:

14

Посмотрите на Мартина Дэвиса (создателя JTS Topology Suite ), Lin.ear th.inking: Причуды пространственного предиката "Содержит"

  1. Геометрия A содержит геометрию B, если ни одна точка B не лежит снаружи A, и хотя бы одна точка внутренней части B лежит внутри A
  2. Геометрия A покрывает геометрию B, если ни одна точка B не лежит вне A

Все, что необходимо для определения этого условия, - выполнить простое сравнение ограничивающего прямоугольника. Это невозможно при использовании содержимого, поскольку даже если ограничивающий прямоугольник геометрии покрыт прямоугольником, требуется дополнительная дорогостоящая операция для проверки того, находится ли геометрия целиком на границе прямоугольника (в этом случае предикат не выполняется). Обложки «упрощают» определение содержимого, делая его более общим (включительно)

Если вы посмотрите на DE-9IM , вы увидите, что содержит (T*****FF*)особый случай обложек(T*****FF*, *T****FF*, ***T**FF*)

Например, определение содержит подразумевает, что полигон не содержит своей границы, но полигон покрывает его границу.

введите описание изображения здесь

ген
источник