首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL空间关系查询是否返回空结果集?

MySQL空间关系查询是否返回空结果集?
EN

Stack Overflow用户
提问于 2013-08-18 16:05:45
回答 1查看 418关注 0票数 0

好的,我有一个相当复杂的查询,它检查一个点变量是否包含在一个多边形中,其中包含一组latitude+longitude坐标(为了可读性,我用-41.000000 & 174.000000替换了它),这个多边形是从我的名为squares的表创建的(它包含2.25m行坐标,表示正方形的左上角,然后我通过向每个坐标添加0.5 / 60来外推它,以创建一个正方形)。它使用MySQL MBRContains函数检查是否匹配。唯一的问题是,它根本不起作用,我只是得到了这样的信息:

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

下面是查询:

代码语言:javascript
复制
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)')
)

知道为什么会这样吗?在我的point对象中肯定有一个包含坐标的正方形,并且我在SQL语法中看不到任何明显的错误。有什么想法?

EN

回答 1

Stack Overflow用户

发布于 2013-08-24 23:39:14

这里有两件事:

与纬度/经度不同,WKT定义中的

  1. 顶点定义为(X,Y),而纬度/经度定义为"X,Y“。您正在使用(lat lng)构建WKT多边形和点字符串,但应该使用(lng lat)。因为你对它是一致的,所以这在这里是可行的,但在其他situations.
  2. The中可能会中断实际问题是你创建的多边形不是闭合的。当传递给GeomFromText一个无效的WKT字符串时,MySQL会悄悄地返回一个null,所以MBRContains不会找到任何交叉点。要闭合多边形,需要将起点添加到多边形字符串的末尾。尝试将SQL更改为:

SELECT square\_id FROM squares WHERE MBRContains( GeomFromText( '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(-41.000000 174.000000)' )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18297006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档