Я использую функцию ST_Intersection
в Postgis с геометрией Multipoint и Polygon и не могу понять результат.
Вот пример моего SQL-запроса с использованием ST_Intersection :
SELECT ST_AsText(
ST_Intersection(
ST_GeomFromText('MULTIPOINT(1 1, 1 1)'),
ST_GeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))')
)
);
Вывод :
'POINT(1 1)' /* I expected MULTIPOINT(1 1, 1 1) as result */
Как видим ST_Intersection
удалил дубликаты, а я этого не ожидал
Результат одинаков для всех библиотек, использующих GEOSlib.
В математическом подходе рассмотрим 2 набора чисел:
Логически, пересечение этих двух наборов должно возвращать все числа, входящие в оба, даже если они дублируются, например:
S1 = {1, 2, 3, 4}
S2 = {1, 1}
S1 пересечение S2 = {1, 1}
Итак, я что-то упускаю?
Ой! мой плохой, поэтому я только что провел поиск о пересечении мешков и нашел свой ответ здесь cs.appstate.edu/~dap/classes/1100/sect2_2.html Таким образом, пересечение двух мешков удаляет дубликаты Спасибо за ваш комментарий !
Вы можете написать ответ на свой вопрос.
В отличие от множества , мультимножество может содержать повторяющиеся элементы, но результатом пересечения двух мультимножеств является мультимножество, содержащее минимальную кратность элемента обоих мультимножеств.
Например: {1,1,2,3} intersection {1,2,2,4} = {1,2}
Таким образом, ST_intersection(Geometry A, Geometry B)
удалит дубликаты, включенные в обе геометрии.
Если вы хотите использовать «математический» подход, почему вы рассматриваете наборы как нечто, что может содержать повторяющиеся значения? Это будет сумка, а не набор.