为什么这个MySQL空间查询返回错误的行?

为什么这个MySQL空间查询返回错误的行?,mysql,spatial-query,Mysql,Spatial Query,我是基于列“latlng”的空间值来提取行的,但是我得到的是查询所使用的多边形之外的值。例如,其中一个返回值位于多边形外近5英里处的39.245231,-094.41976处。我的问题是什么 SELECT class, address, latitude, longitude, callsign, CONCAT(latitude,',',longitude) as koords, CONCAT(name,'<br>',add

我是基于列“latlng”的空间值来提取行的,但是我得到的是查询所使用的多边形之外的值。例如,其中一个返回值位于多边形外近5英里处的39.245231,-094.41976处。我的问题是什么

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
你可以看看正在制作的地图;出现后,单击右下角的“Police”标记查看返回的值。该地图显示了4个蓝色标志,标志着多边形的边界,红色标志是中心。以及位于多边形外部的两个“P”标记

是最小边界矩形函数。它计算第一个参数的值(在其周围绘制一个框),然后检查第二个参数是否在该框内。它被设计成在计算机循环和IO中使用的廉价工具,但折衷的是,它拾取MBR中但多边形之外的项目


试试看

我对你的建议知之甚少。我的where子句必须看起来像什么才能执行您所说的操作?我尝试设置$sg1=ST_=FromTextPolygon…我的点。。。;但这只是个错误。我将查询改为使用ST_CONTAINS,但现在我得到一个错误:ST_CONTAINS函数不存在。据我所知,语法应该与使用MBRContains相同。事实证明,我不能使用ST_CONTAINS,因为我使用的MySQL版本只有5.5,显然您需要5.6或更高版本。但这是正确的答案。如果你试图使用地理空间的东西,而你不在版本8+上,那么你可能是在浪费时间。自2010年底5.5面世以来,MySql取得了重大进展