我正在一個項目中,我有我的數據庫中存儲有經度和緯度座標的地方。我使用Google地圖將這些地點標記爲地圖上的標記。我不想將任何「不可見」標記(當前視口/邊界框外的標記)繪製到地圖上。因此我遵循Googles advice regarding viewport marker management。存儲過程獲取邊界框內的所有點考慮負經度
我在那裏我使用AJAX來查詢每當我的地圖檢視已經改變了一個ASP.NET Web服務的工作方案。此Web服務調用MSSQL數據庫中的存儲過程以獲取當前視口/邊界框內具有座標的所有位置。該存儲過程是這樣的:
ALTER PROCEDURE dbo.GetPlacesInsideBoundingBox
(
@swLat VarChar(11), /* south-west point latitude */
@swLng VarChar(11), /* south-west point longitude */
@neLat VarChar(11), /* north-east point latitude */
@neLng VarChar(11) /* north-east point longitude */
)
AS
/* SET NOCOUNT ON */
SELECT * FROM dbo.Place WHERE
place_lat >= CONVERT(Decimal(11,8), @swLat)
AND place_lat <= CONVERT(Decimal(11,8), @neLat)
AND place_lng >= CONVERT(Decimal(11,8), @swLng)
AND place_lng <= CONVERT(Decimal(11,8), @neLng)
RETURN
發送到存儲過程的參數是簡單的西南部和視口的東北角/邊框的經度和緯度。然後我將這些點與存儲在我的數據庫中的經度和緯度值進行比較,以查看哪些位置在當前視口/邊界框內。
這工作正常!但是我讀到,如果你對經度(Prime Prime子以西)有負值,並且簡單的解決方案是在經度爲負值的情況下增加360度,那麼你會遇到問題。
我有兩個問題:
我如何改變我的存儲過程(上圖)考慮到負 經度?
有沒有其他修改我應該考慮做到這個 存儲過程,使其萬無一失?
如果你想知道從VARCHAR到十進制的轉換,我發現它更容易與客戶端簡單的字符串(JavaScript)的工作,然後將其轉換爲十進制數的我的存儲過程,當我需要做計算。
在此先感謝!
謝謝你這個鼓舞人心的問題和有用的鏈接!我可能會用同樣的方法! – TMS