gpt4 book ai didi

php - 在 mysql 表上使用空间索引选择最近的地理坐标不起作用

转载 作者:行者123 更新时间:2023-11-29 07:00:31 27 4
gpt4 key购买 nike

我有一个 mysql MyISAM 表,其中包含许多行,其中包含有关地点的信息,例如地理坐标和地名。

我想根据给定的输入纬度和经度从该表中选择最近的地方。我想创建一个包含地理坐标点的列,使用空间索引和 MBRContains 来选择数据。

我在选择数据时遇到错误。我将在这里写下我执行的步骤:

第一步

ALTER TABLE mytable ADD mypoint Point;

UPDATE mytable
SET mypoint = Point(lat, lon);

ALTER TABLE mytable MODIFY mypoint NOT NULL;

CREATE SPATIAL INDEX sx_mytable_coords ON mytable(mypoint );

结果:我在 mypoint 列中看到了这一点(我不确定这是否合适,但所有记录都相同):[GEOMETRY - 25Bytes]我看到添加了索引:Name: mypoint Type: SPATIAL Field: mypoint (32) Collat​​ion: A

第二步

我尝试通过两种方式选择数据:

  1. 推荐MySQL 5.1以下版本(我的情况)

    SET @lat = 40;
    SET @lon = -10;


    SELECT *
    FROM mytable
    WHERE MBRContains(LineFromText(CONCAT(
    '('
    , @lon + 10 / ( 111.1 / cos(RADIANS(@lon)))
    , ' '
    , @lat + 10 / 111.1
    , ','
    , @lon - 10 / ( 111.1 / cos(RADIANS(@lat)))
    , ' '
    , @lat - 10 / 111.1
    , ')' )
    ,mypoint)

    我收到这个错误:

    1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 30' at line 15

  2. 推荐MySQL 5.1以上版本

    SET @lat = 40;
    SET @lon = -10;

    SELECT *
    FROM mytable
    WHERE MBRContains
    (
    LineString
    (
    Point
    (
    @lon + 10 / ( 111.1 / COS(RADIANS(@lat))),
    @lat + 10 / 111.1
    )
    Point
    (
    @lon - 10 / ( 111.1 / COS(RADIANS(@lat))),
    @lat - 10 / 111.1
    )
    ),
    mypoint
    )

    我收到这个错误:

    1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Point ( ' at line 12

最佳答案

您缺少括号,您没有关闭 LineFromText。

尝试:

SELECT  *
FROM mytable
WHERE MBRContains(LineFromText(CONCAT(
'('
, @lon + 10 / ( 111.1 / cos(RADIANS(@lon)))
, ' '
, @lat + 10 / 111.1
, ','
, @lon - 10 / ( 111.1 / cos(RADIANS(@lat)))
, ' '
, @lat - 10 / 111.1
, ')' ))
,mypoint)

关于php - 在 mysql 表上使用空间索引选择最近的地理坐标不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10445429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com