Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL包含多边形的多边形_Mysql_Database_Polygon_Spatial - Fatal编程技术网

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!非常感谢你的建议。