簡體   English   中英

如何在SQL Server數據庫中查詢訪問者附近的最近商店?

[英]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.

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