我有一个表格,用于表格中的段存储作为多边形。 然后我想得到另一个多边形所触及的所有线段,例如正方形或圆形。 在图片上:http://img.acianetmedia.com/GJ3
我将小灰框表示为段和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中有4个100%的细分, 但是如何获得big_BOX所触及的所有细分?
结果必须是16段。
答案 0 :(得分:1)
一个简单的解决方案:
不应使用MBRContains
,而应使用MBRIntersects
,这将返回任何与您的大框完全或部分跨越空间的结果。
谨慎和完整的解决方案: 根据您的数据和解决方案的其余部分(特别是关于如何形成大框),由于坐标使用的小数位数,您可能会返回超过16个段。虽然这是不太可能的,并且只有在极端情况下才有可能,这只是一种考虑的可能性。
小数点后7位,你的准确度为1.1厘米(在赤道处)。如果您的大框看起来与4x4段设置完全对齐,则可能(在绝对最大程度上)您实际得到36(6x6)的结果集,因为坐标重叠到所有边的下一个段中即使是最微小的测量。任何4到16和36之间的倍数都是可能的。
同样,这几乎不太可能,但如果您想要始终确保结果集为16,则可以使用Area(Intersection(@geom1, @geom2))
等方法的组合来计算大框和相交段之间的交叉地理位置,顺序在该列下降并取得前16个结果。
虽然这可以保证最合适的16个细分,但它会为所有查询增加额外的开销,以满足最极端的情况。
选择权在你手中。希望它有所帮助。