赤道圓周=40,075.017km = 40075017m
兩極圓周=40,007.860km = 40007860m
但是因為我們的距離是 500m ~ 5000m,弧度影響甚小.所以可視為地球是平面.
360 經度 = 40075017 m ---> 每1m
為 0.000008983152770715 經度, 取10位 =0.0000089832
360 緯度 = 40007860 m ---> 每1m
為 0.000008998231847442 緯度, 取10位 =0.0000089982
因為台灣不會跨0, 直接加減就好了.
孟諺是建議型別使用: decimal(10,7)
我覺得, 其實也可以開到 decimal(18,8)
孟諺給的範例 SQL 如下:
SELECT *
FROM dbo.旅館座標表格
WHERE (經度 BETWEEN @基本經度 - @經度差距 AND @基本經度 + @經度差距)
AND (緯度 BETWEEN @基本緯度 - @緯度差距 AND @基本緯度 + @緯度差距)
我的情況是, 要把旅館(HotelInfo) 坐標的3.5公里裡的景點(RouteDetail) 資料取出來, 放到一個 路線(RouteMain) 和 旅館(HotelInfo) 的Mapping對應表(RouteHotel) 中.
insert into RouteHotel(RID,HotelInfoID) SELECT distinct M.RID, H.hotelInfoID FROM RouteMain M inner join RouteDetail D on M.RID = D.RID inner join HotelInfo H on (D.DetailLongitude BETWEEN H.HotelLongitude - (0.0000089832 * 3500) AND H.HotelLongitude+ (0.0000089832 * 3500)) and (D.DetailLatitude BETWEEN H.HotelLatitude - (0.0000089832 * 3500) AND H.HotelLatitude + (0.0000089832 * 3500))
附上, 百大路線 + HotelInfo mapping Table schema.
CREATE TABLE [dbo].[RouteHotel]( [RHID] [int] IDENTITY(1,1) NOT NULL, [RID] [int] NOT NULL, [HotelInfoID] [int] NOT NULL CONSTRAINT [PK_RouteHotel] PRIMARY KEY CLUSTERED ( [RID] ASC, [HotelInfoID] ASC ) ) ON [PRIMARY]
沒有留言:
張貼留言