簡體   English   中英

包含多邊形的MYSQL多邊形

[英]MYSQL polygons that contains a polygon

我有一個表,用於將表中的段存儲為多邊形。 然后,我想獲取被另一個多邊形(例如正方形或圓形)接觸的所有線段。 圖片上: http : //img.acianetmedia.com/GJ3

我將小灰色框表示為segment和big_BOX。 使用此查詢:

SELECT id, position, ASTEXT( value ) 
FROM segment
WHERE MBRCONTAINS( GEOMFROMTEXT( 'POLYGON(( 20.617202597319 -103.40838420263,20.617202597319 -103.3795955521,20.590250599403 -103.3795955521,20.590250599403 -103.40838420263,20.617202597319 -103.40838420263))' ) , value ) 

我在big_BOX內有100%的4個細分,但是如何獲取big_BOX涉及的所有細分?

結果必須是16個細分。

一個簡單的解決方案:您應該使用MBRIntersects代替MBRContains ,它會返回與大盒子完全或部分跨越空間的所有結果。

謹慎而完整的解決方案:根據您的數據以及解決方案的其余部分(尤其是形成多大的框),由於坐標使用的小數位數,可能會返回16個以上的段。 然而,這是極不可能的,只有在極端情況下才有可能考慮。

在7位小數點處,您的精確度為1.1厘米(在赤道處)。 如果您的大盒子看上去正好與4x4線段集對齊,則由於坐標在所有面上都重疊到下一個線段上,因此您可能(絕對最大程度)實際得到36(6x6)的結果集即使是最細微的測量。 16到36之間的4的倍數是可能的。

同樣,這在很大程度上不太可能,但是如果您始終要確保結果集為16,則可以使用諸如Area(Intersection(@geom1, @geom2))之類的方法組合來計算大盒子與相交處的相交地理細分,則該列的降序排列並獲取前16個結果。

雖然這將保證最合適的16個段,但會為所有查詢增加額外的開銷,以迎合最極端的情況。

這是你的選擇。 希望能幫助到你。

暫無
暫無

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

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