2011-05-31 188 views
0

我目前有一個數據庫查詢,用於計算數據庫中每個商店與「家」位置之間的距離。我正在用這個公式計算飛行距離。緯度/經度數學問題(兩個座標之間的距離)

http://www.movable-type.co.uk/scripts/latlong.html

然後,我命令他們並顯示它們。我發現一個更好的方法是隻搜索經緯度在一定範圍內的商店。

例如,不是計算數據庫中每個商店之間的距離(超過30000),而是僅計算具有特定範圍內經度/長度的組,並計算它們之間的距離。

現在我試圖找出如何計算實際邊界。距離必須在5公里以下。所以我把5乘100除以那些數量的經緯度。

SELECT storeid, storedescription, address, city, storebannerdescription, lat, lon, 
     ROUND (gc_dist (lat, lon, 43.758152, -79.746639), 1) AS distance 
     FROM storelatlon 
     WHERE ((lat-43.758152) < 0.05 AND (lat -43.758152) > -0.05) AND ((lon-(-79.746639)) < 0.05 AND (lon-(-79.746639)) > -0.05) 
     ORDER BY Distance 
+6

你的問題是? – 2011-05-31 16:07:19

+3

我不確定你在問什麼,但我會注意到,減去角度測量並不能告訴你任何有關距離的信息。 – 2011-05-31 16:08:38

+0

什麼問題?我認爲這是「這是一個有效或良好的實施?」另外,你使用的是什麼數據庫?一些數據庫支持緯度/經度計算(比如Oracle Locator),但這不是必需的(Oracle Spatial不是),而且很難判斷線路以Locator結束並以Spatial開頭。其他數據庫也提供基本的支持,包括MySQL。 – pickypg 2011-05-31 16:10:10

回答

1

這種方法可以工作,但是這取決於如何廣泛分佈的商店,因爲當你在latitute上去,你在給定的距離跨越多個經度,你可能需要細化界限一點。您可能會得到太多或太少的點,只是在所有緯度上過濾0.05度。

0

我假設你使用的是基於你使用gc_dist的PostgreSQL。只要您安裝了PostGIS,就可以使用內置功能執行所需的邏輯。

你將不得不準備表如下:

首先,存儲您的位置作爲PostGIS的點。我建議使用WGS-84進行地理計算。

之後你這樣做,那麼你就可以查詢從您想要的位置使用ST_ContainsST_Buffer,其中ST_Buffer包裝您想找到長(-79.746639,43.758152)鄰居中心點任何給定距離內的所有點/ lat訂單。

我從來沒有用過PostgreSQL,但我已經用Oracle做過這個。它似乎採用與Oracle相同的PostgreSQL設置:

A.告訴數據庫您將創建一個基於幾何的列。 Found syntax here

SELECT AddGeometryColumn('db_name', 'table_name', 'desired_column_name', 4326, 
'POINT', 2); 

以上,4326是表示WGS-84的常數「SRID」。

B.向該列添加索引。 Found syntax here(這個頁面好像是很有用)。 C.加入你的數據。

INSERT INTO table_name (desired_column_name) 
VALUES('SRID=4326;POINT(-79.746639 43.758152)'); 

(我很好奇,如果上面的字符串需要由ST_GeomFromText基於其他例子包含)

或(I found here

INSERT INTO table_name (desired_column_name) 
VALUES (ST_Transform(ST_MakePoint(-79.746639, 43.758152), 4326)); 

注:我認爲這是(X,Y ),這意味着經度和緯度排序。 D.查詢您的數據。

D.查詢您的數據。

SELECT * FROM table_name 
WHERE 
    ST_Contains(
     ST_Buffer(
      ST_Transform(ST_MakePoint(-79.746639, 43.758152), 4326), 
      distance_probably_in_meters), 
     desired_column_name); 
相關問題