为什么此 MySQL 空间查询返回错误行?
Why is this MySQL spatial query returning false rows?
我正在根据“latlng”列的空间值提取行,但我得到的值在查询使用的多边形之外。例如,其中一个返回值位于 39.245231,-094.41976,距离多边形将近 5 英里。我的查询有什么问题?
SELECT class, address, latitude, longitude, callsign,
CONCAT(latitude,',',longitude) as koords,
CONCAT(name,'<br>',address,'<br>',city,'<br>',latitude,', ',longitude) as addr,
REPLACE(tactical,'-','') AS tactical
FROM poi
WHERE MBRContains(GeomFromText('POLYGON(( 39.6697989 -95.029305 , 39.6697989 -94.293333 , 38.899486 -94.293333 , 38.899486 -95.029305 , 39.6697989 -95.029305 ))'),latlng)
AND class = 'Sheriff'
ORDER BY class
您可以查看正在制作的地图; https://net-control.us/map1Rose3.php 点击右下角的“警察”标记查看返回值。地图显示 4 个标记多边形边界的蓝色旗帜,红色旗帜是中心。以及多边形外的两个“P”标记。
MBRContains()
is a minimum bounding rectangle function. It computes the minimum bounding rectangle 它的第一个参数——在它周围绘制一个框——然后检查第二个参数是否在该框内。它被设计成在计算机周期和 IO 中使用起来很便宜,但权衡是它会拾取 MBR 中但在多边形之外的项目。
试试 ST_Contains()
。
我正在根据“latlng”列的空间值提取行,但我得到的值在查询使用的多边形之外。例如,其中一个返回值位于 39.245231,-094.41976,距离多边形将近 5 英里。我的查询有什么问题?
SELECT class, address, latitude, longitude, callsign,
CONCAT(latitude,',',longitude) as koords,
CONCAT(name,'<br>',address,'<br>',city,'<br>',latitude,', ',longitude) as addr,
REPLACE(tactical,'-','') AS tactical
FROM poi
WHERE MBRContains(GeomFromText('POLYGON(( 39.6697989 -95.029305 , 39.6697989 -94.293333 , 38.899486 -94.293333 , 38.899486 -95.029305 , 39.6697989 -95.029305 ))'),latlng)
AND class = 'Sheriff'
ORDER BY class
您可以查看正在制作的地图; https://net-control.us/map1Rose3.php 点击右下角的“警察”标记查看返回值。地图显示 4 个标记多边形边界的蓝色旗帜,红色旗帜是中心。以及多边形外的两个“P”标记。
MBRContains()
is a minimum bounding rectangle function. It computes the minimum bounding rectangle 它的第一个参数——在它周围绘制一个框——然后检查第二个参数是否在该框内。它被设计成在计算机周期和 IO 中使用起来很便宜,但权衡是它会拾取 MBR 中但在多边形之外的项目。
试试 ST_Contains()
。