在MYSQL中查找两点之间的距离。 (使用点数据类型)

假设我有这样的2列表:

| user_id      | int(11) | NO   | UNI | NULL    |                |
| utm          | point   | NO   | MUL | NULL    |                |

正如你所看到的,这很简单。 utm是Point数据类型。 我像这样插入它:

INSERT INTO mytable(user_id, utm) VALUES(1, PointFromWKB(point(50, 50)));

然后,我创建一个空间索引。

ALTER TABLE mytable ...add spatial index on(utm) or something. (forgot)

好吧,一切都很好。 现在,我想选择距离<99999的地方。但它不起作用!

//This is supposed to select all where the distance is less than 99999999.
set @mypoint = PointFromWKB(point(20,20))
select * from mytable where GLength(LineString(utm, @mypoint)) < 9999999;
Empty set (0.00 sec)
select * from mytable where GLength(LineStringFromWKB(LineString(utm, @mypoint))) < 9999;
Empty set (0.00 sec)

顺便说一句,我试图插入INTO没有PointFromWKB ...并没有工作......这就是为什么有人建议PointFromWKB给我。


解决了。 这就是我所做的:

where GLength(LineStringFromWKB(LineString(asbinary(utm), asbinary(@mypoint)))) < 9999999999999;

你也可以这样做。 不知道它是否更快。

select * from mytable where glength(geomfromtext(concat('linestring(', x(utm), ' ', y(utm), ',20 20', ')'))) < 99999999

据我所知,你必须尝试这种方式 -

select * from mytable
   where 
    (
        GLength(
          LineStringFromWKB(
            LineString(
              geoPoint, 
              GeomFromText('POINT(51.5177 -0.0968)')
            )
          )
        )
      ) < 99999999

更多在这个答案

链接地址: http://www.djcxy.com/p/44785.html

上一篇: Find the distance between two points in MYSQL. (using the Point Datatype)

下一篇: Profiling g++ app on MacOSX?