[英]How can I query SQL Server database for the nearest store in a visitor's neighborhood?
我有一個商店列表,每個商店都有諸如street_address,經度,緯度之類的數據。
現在,當用戶訪問我的網站時,我想向他/她展示附近所有可用的商店(“距離最近”的10英里范圍內的收音機)
這是我所做的。 我創建一個名為StPoint
的新列,其類型為geography
。 我使用geography::Point(latitude, longitude, 4326)
函數將每個商店的經度/緯度轉換為這樣的點
UPDATE stores
SET StPoint = CASE WHEN latitude IS NOT NULL AND longitude IS NOT NULL
THEN geography::Point(latitude, longitude, 4326)
ELSE NULL END
我試圖找到游客的當前地點和所有商店之間的距離,就像這樣
SELECT
CASE WHEN StPoint IS NOT NULL THEN StPoint.STIntersection( geography::Point(42.2974416, -71.4478897, 4326) ).STAsText() ELSE NULL END AS distance
FROM stores
但這給了我類似的東西
幾何收集清空
或類似的東西
要點(-99.4478897 56.2974416)
最后,我嘗試使用STDistance
函數返回一個值(我不確定此處使用的單位)
SELECT StPoint.STDistance(geography::Point(42.2974416, -71.4478897, 4326))
FROM stores
這是上述查詢顯示的示例
27376.5070395886
3973.49722397033
27620.9636451663
50346.8940144233
7425.98548351235
34193.3513625182
如您所見,結果並非以英里為單位。 如何正確地找到最近的商店以及每個商店的訪客距離商店有多遠?
看起來STDistance
返回以Geog
單位的值。 要將其轉換為英里,您需要分割vy 1609.344(1英里= 1609.344米)
SQL Server 2008 GEOGRAPHY STDistance()值
嘗試以下
SELECT StPoint.STDistance(geography::Point(42.2974416, -71.4478897, 4326))/1609.344
FROM stores
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.