MYSQL包含多边形的多边形
我有一个表格,用于存储多边形表格上的线段。 然后,我想得到被另一个多边形(例如正方形或圆形)接触的所有线段。 关于图像: 我将小灰盒表示为段和大灰盒。 使用此查询:MYSQL包含多边形的多边形,mysql,database,polygon,spatial,Mysql,Database,Polygon,Spatial,我有一个表格,用于存储多边形表格上的线段。 然后,我想得到被另一个多边形(例如正方形或圆形)接触的所有线段。 关于图像: 我将小灰盒表示为段和大灰盒。 使用此查询: SELECT id, position, ASTEXT( value ) FROM segment WHERE MBRCONTAINS( GEOMFROMTEXT( 'POLYGON(( 20.617202597319 -103.40838420263,20.617202597319 -103.3795955521,20.5902
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 )
我有4段100%在大盒子里,
但是如何得到所有被大盒子接触的部分呢
结果必须是16段。一个简单的解决方案: 您应该使用
mbrcomsects
,而不是mbrcomsects
,它将返回与大框完全或部分交叉的任何结果
谨慎和完整的解决方案:
根据您的数据和解决方案的其余部分(特别是框的大小),由于坐标使用的小数位数,您可能返回超过16个段。然而,在极端情况下,这是不可能的,而且只有可能的情况下,才有可能考虑。
小数点后7位,精度为1.1厘米(在赤道处)。如果您的大盒子看起来与4x4段集完全对齐,则可能(在绝对最大程度上)您实际得到36(6x6)的结果集,因为即使是最微小的测量,坐标也会在所有侧面重叠到下一段中。16和36之间(含16和36)的4的任意倍数都是可能的
同样,这在很大程度上是不可能的,但如果您希望始终确保结果集为16,则可以使用多种方法组合,例如Area(Intersection(@geom1,@geom2))
来计算大方框和相交线段之间的相交地理位置,按该列的降序排列,并获取前16个结果
虽然这将保证最合适的16个段,但它将增加所有查询的额外开销,以满足最极端的情况
选择权在你。希望能有帮助。Gracias Jon!非常感谢你的建议。