带有POLYGON的mysql ST_WITHIN

时间:2015-10-03 08:59:01

标签: mysql

我无法从以下测试中获得任何回报。

mysql版本:5.6.16(win32)

SELECT  (ST_WITHIN(GeomFromText('POINT(110.341903 1.558064)'), ST_GeomFromText(
         "POLYGON((1.558467 110.341781 1.558081 110.342317 1.557764 110.34175 1.558467 110.341781 ))"
         )))

我只想看到多边形内的那个点。从地图上可以看出,我做错了什么?

我试了一下,也行不通了

mysql> SET @g1 = ST_GEOMFROMTEXT('POINT(110.341903 1.558064)');
Query OK, 0 rows affected (0.00 sec)

mysql> SET @g2 = ST_GEOMFROMTEXT('POLYGON((1.558467 110.341781 1.558081 110.3423
17 1.557764 110.34175 1.558467 110.341781 ))');
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT ST_WITHIN(@g1,@g2);
+--------------------+
| ST_WITHIN(@g1,@g2) |
+--------------------+
|               NULL |
+--------------------+
1 row in set (0.00 sec)

2 个答案:

答案 0 :(得分:1)

在多边形的定义中,您没有在每对值之后添加逗号。

你有:

POLYGON((1.558467 110.341781 1.558081 110.342317 1.557764 110.34175 1.558467 110.341781 ))

应该是:

POLYGON((1.558467 110.341781, 1.558081 110.342317, 1.557764 110.34175, 1.558467 110.341781 ))

另外,我怀疑你已经交换了坐标值,因为POINT(110.341903 1.558064)显然不能位于该多边形内,而POINT(1.558064 110.341903)可以。{/ p>

这没有问题:

SELECT (
  ST_WITHIN(
    GeomFromText(
      'POINT(1.558064 110.341903)'
    ), 
    ST_GeomFromText(
      'POLYGON((1.558467 110.341781, 1.558081 110.342317, 1.557764 110.34175, 1.558467 110.341781 ))'
    )
  )
)

答案 1 :(得分:0)

对不起。我的错。它是正确的,我更新了错误的数据库并查询了另一个数据库。