2012-01-18 33 views
7

Đây là mã của tôi.Khoảng cách giữa hai điểm sử dụng datatype địa lý trong sqlserver 2008?

Create Table [dbo].[MajorCities] 
(
[CityID] int Identity(1,1), 
[CityName] varchar(60), 
[Latitude] float, 
[Longitude] float, 
GeoRef Geography 
) 

INSERT INTO dbo.[MajorCities] values 
('New Delhi, India', 28.6, 77.2, null), 
('Paris, France', 48.86667, 2.3333, null), 
('Rio de Janeiro, Brazil', -22.9, -43.23333, null), 
('Sydney, Australia', -33.88306, 151.21667, null), 
('New York City, USA', 40.78333, -73.96667, null) 

select * from [MajorCities] 


UPDATE [dbo].[MajorCities] 
SET [GeoRef] = geography::STPointFromText ('POINT (' + CAST ([Longitude] AS VARCHAR (20)) + ' ' + 
        CAST ([Latitude] AS VARCHAR (20)) + ')', 4326) 

Tôi muốn tìm khoảng cách giữa hai vị trí trong KM.

Hãy giúp tôi. Cảm ơn.

+0

thể trùng lặp của [tìm địa điểm gần nhất trong ms-sql] (http://stackoverflow.com/questions/8667647/find-the-nearest-location-in-ms-sql) –

Trả lời

20

Nếu bạn có Latitude và Longitude của bạn dưới dạng độ (giống như trong bảng của bạn), sau đó bạn có thể sử dụng chức năng sau:

CREATE FUNCTION dbo.DictanceKM(@lat1 FLOAT, @lat2 FLOAT, @lon1 FLOAT, @lon2 FLOAT) 
RETURNS FLOAT 
AS 
BEGIN 

    RETURN ACOS(SIN(PI()*@lat1/180.0)*SIN(PI()*@lat2/180.0)+COS(PI()*@lat1/180.0)*COS(PI()*@lat2/180.0)*COS(PI()*@lon2/180.0-PI()*@lon1/180.0))*6371 
END 

HOẶC nếu bạn nhấn mạnh vào kiểu Địa lý, sử dụng là:

DECLARE @g geography; 
DECLARE @h geography; 
SET @g = geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326); 
SET @h = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326); 
SELECT @g.STDistance(@h); 
+1

Lưu ý rằng spheroid comp utations như thế này là chính xác đến khoảng 10 mét trên hàng ngàn km. Nếu cần độ chính xác cao hơn, hãy sử dụng thuật toán của Vincenty hoặc Karney. – N8allan

+1

@OlegDok - Tôi cũng đã cố gắng để tìm hiểu việc thực hiện thuật toán bằng cách sử dụng sql script.I không thể tìm thấy bất cứ điều gì ... –

+0

@ N8allan - chỉ ra các thuật toán – Shajo

Các vấn đề liên quan