2010-02-16 38 views
7

假設我有一個2列的表是這樣的:查找MYSQL中兩點之間的距離。 (使用點數據類型)

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

正如你所看到的,這是非常簡單的。 utm是點數據類型。我這樣插入:

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) 

順便說一句,我試圖INSERT INTO沒有PointFromWKB ...它沒有工作......這就是爲什麼有人建議PointFromWKB給我。

回答

3

已解決。這是我做的:

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

這是根據地理座標或平面座標計算距離嗎? – 2012-06-01 07:23:29

1

你也可以這樣做。不知道它是否更快。

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

據我所知,我只好試試這個way-

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

this answer