簡體   English   中英

重疊情況下的 MySQL ST_CONTAINS

[英]MySQL ST_CONTAINS on Overlap case

我在 MySQL 5.6.31 上使用 ST_CONTAINS 地理空間函數時遇到問題。

我有以下 MULTIPOLYGON:

多面體

我需要檢查某個點是否在 MULTIPOLYGON 內,在這種情況下是圖像上的紅色,所以我這樣做:

SET @g1 = ST_GEOMFROMTEXT('MULTIPOLYGON(((41.94142040508967 12.41757292797851,41.94442097040815 12.419032049682611,41.93529115206086 12.43456740429687,41.91939065648979 12.425126028564447,41.92475512204906 12.407702398803705,41.94142040508967 12.41757292797851),(41.92552143745503 12.409933996704096,41.90987400689221 12.402638388183588,41.90252797153794 12.421864462402338,41.907446714803015 12.433194113281244,41.92603230927889 12.419461203124994,41.92552143745503 12.409933996704096,41.92552143745503 12.409933996704096),(41.906248516384416 12.397567221513638,41.89551602293968 12.423402258745083,41.90101026279693 12.430268713823208,41.90771770545893 12.420398184648404,41.91033661082307 12.39653725325192,41.906248516384416 12.397567221513599,41.906248516384416 12.397567221513599,41.906248516384416 12.397567221513638,41.906248516384416 12.39756722151363,41.906248516384416 12.39756722151363,41.906248516384416 12.39756722151363,41.906248516384416 12.39756722151363,41.906248516384416 12.39756722151363,41.906248516384416 12.39756722151363,41.906248516384416 12.39756722151363,41.906248516384416 12.39756722151363,41.906248516384416 12.39756722151363,41.906248516384416 12.397567221513638)))');

SET @g2 = POINT(41.9059998,12.4159939);

SELECT ST_CONTAINS(@g1,@g2);

結果是0。

如果我改變點,例如指定上多邊形中的一個點,我得到 1。

為什么會有這種行為? 似乎當兩個多邊形重疊時, ST_CONTAINS 將其視為它們的空部分。

我能做什么?

謝謝大家!

這是一個奇怪的(不符合標准並且可能無效)多面體。

多多邊形被描述為:

MULTIPOLYGON(((p1_shell), (p1_hole1), (p1_hole2)), ((p2_shell), (p2_hole1), (p2_hole2)))

即多邊形由雙圓括號分隔,多邊形殼與孔由單個圓括號分隔。 在您的情況下,它是單個括號 - 所以這個 WKT 描述了一個帶有兩個單個多邊形! 請注意,它不是一個有效的(您可以調用ST_IsValid來檢查)-該孔並未按照標准的要求完全包含在外殼中但無論如何 MySql 允許這樣做,並且由於紅點在孔內,因此它不包含在形狀,所以 MySql 結果是正確的。

如果所需的形狀語義是多邊形,而不是帶孔的多邊形,請替換),()),((以獲得該語義。請注意,這仍然不是有效的 WKT 形狀 - 多邊形中的單個多邊形不允許相交(再次檢查ST_IsValid )。但無論如何它應該給你正確的結果(盡管是非標准的,這有點未定義的行為)。

如果你想符合標准,你應該清理這個 WKT。 你做什么取決於你需要的語義。 也許 ST_UNION 這些多邊形並得到一個。 或者保留所有三個 - 描述由可能相交的多邊形組成的形狀的正確方法是將多邊形作為成員的GEOMETRYCOLLECTION

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM