sql-server-2008 – 在sqlserver 2008中使用Geography数据类型的两点之间的距离?

前端之家收集整理的这篇文章主要介绍了sql-server-2008 – 在sqlserver 2008中使用Geography数据类型的两点之间的距离?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的代码.
  1. Create Table [dbo].[MajorCities]
  2. (
  3. [CityID] int Identity(1,1),[CityName] varchar(60),[Latitude] float,[Longitude] float,GeoRef Geography
  4. )
  5.  
  6. INSERT INTO dbo.[MajorCities] values
  7. ('New Delhi,India',28.6,77.2,null),('Paris,France',48.86667,2.3333,('Rio de Janeiro,Brazil',-22.9,-43.23333,('Sydney,Australia',-33.88306,151.21667,('New York City,USA',40.78333,-73.96667,null)
  8.  
  9. select * from [MajorCities]
  10.  
  11.  
  12. UPDATE [dbo].[MajorCities]
  13. SET [GeoRef] = geography::STPointFromText ('POINT (' + CAST ([Longitude] AS VARCHAR (20)) + ' ' +
  14. CAST ([Latitude] AS VARCHAR (20)) + ')',4326)

我想找到KM中两个位置之间的距离.

请帮我.
谢谢.

解决方法

如果你有纬度和经度的度数(就像你的表中一样),那么你可以使用以下功能
  1. CREATE FUNCTION dbo.DictanceKM(@lat1 FLOAT,@lat2 FLOAT,@lon1 FLOAT,@lon2 FLOAT)
  2. RETURNS FLOAT
  3. AS
  4. BEGIN
  5.  
  6. 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
  7. END

或者,如果您坚持使用地理类型,则使用方法是:

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

猜你在找的MsSQL相关文章