簡體   English   中英

找到MYSQL中兩點之間的距離。 (使用Point數據類型)

[英]Find the distance between two points in MYSQL. (using the Point Datatype)

假設我有一個像這樣的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)));

然后,我創建一個Spatial索引。

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)

順便說一下,我試圖在沒有PointFromWKB的情況下INSERT INTO ......它沒有用......這就是為什么有人向我建議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

更多在這個答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM