2013-08-18 153 views
0

好吧,我有一个相当复杂的查询,它查看包含一组经纬度坐标(为了便于阅读,我用-41.000000 & 174.000000代替)的点变量是否包含在多边形中,该多边形是从我的名为squares的表格(其中包含2.25米行坐标代表正方形的左上角,然后通过将0.5/60添加到每个坐标来创建正方形)。它使用MySQL MBRContains函数检查是否匹配。唯一的问题是,它不工作,我只是得到这个消息:返回空结果集的MySQL空间关系查询?

MySQL returned an empty result set (i.e. zero rows).

这里的查询:

SELECT `square_id` FROM `squares` WHERE 

MBRContains(
    GeomFromText(
      CONCAT(
        'POLYGON((', 
         `coord_lat`,' ',`coord_long`,',', 
         `coord_lat`,' ',(`coord_long` + (0.5/60)),',', 
         (`coord_lat` + (0.5/60)),' ',(`coord_long` + (0.5/60)),',', 
         (`coord_lat` + (0.5/60)),' ',`coord_long`, 
        '))' 
       ) 
       ), 
    GeomFromText('POINT(-41.000000 174.000000)') 
) 

任何想法,这是为什么?肯定有一个正方形,它包含我的点对象内的坐标,并且在我的SQL语法中看不到任何明显的错误。思考?

+0

你能提供的纬度/经度 – lreeder

回答

0

两件事情会在这里:

  1. 顶点WKT定义被定义为(X,Y),不同于经/纬度,它被定义为 “X,Y”。您正在使用(lat lng)构建WKT POLYGON和POINT字符串,但应使用(lng lat)。既然你对此一致,这可以在这里工作,但可能在其他情况下破坏。

  2. 实际问题是您创建的POLYGON未关闭。当GeomFromText传递一个无效的WKT字符串时,MySQL安静地返回null,所以MBRContains没有找到任何交点。要关闭POLYGON,您需要将起点添加到多边形字符串的末尾。试着改变你的SQL这样的:

SELECT `square_id` FROM `squares` WHERE 
MBRContains(
    GeomFromText(
     CONCAT(
       'POLYGON((', 
        `coord_lat`,' ',`coord_long`,',', 
        `coord_lat`,' ',(`coord_long` + (0.5/60)),',', 
        (`coord_lat` + (0.5/60)),' ',(`coord_long` + (0.5/60)),',', 
        (`coord_lat` + (0.5/60)),' ',`coord_long`,',', 
        `coord_lat`,' ',`coord_long` 
       '))' 
      ) 
      ), 
    GeomFromText('POINT(-41.000000 174.000000)') 
)