城市和纬度经度的距离

时间:2010-02-09 23:06:21

标签: sql mysql

我有一张桌子:

城市 纬度 经度

我需要一个sql查询才能知道距离纽约100英里的所有城市。

3 个答案:

答案 0 :(得分:3)

这是我们的。您可能需要为表结构修改它。我们查找零售地点(和设施),而不是城市,但困难的部分是“距离最近”,在此声明中有效。

CREATE PROCEDURE [dbo].[GetNearbyLocations] @CenterLatitude FLOAT, @CenterLongitude FLOAT
AS

DECLARE @CntXAxis FLOAT 
DECLARE @CntYAxis FLOAT 
DECLARE @CntZAxis FLOAT 

SET @CntXAxis = COS(RADIANS(@CenterLatitude)) * COS(RADIANS(@CenterLongitude)) 
SET @CntYAxis = COS(RADIANS(@CenterLatitude)) * SIN(RADIANS(@CenterLongitude)) 
SET @CntZAxis = SIN(RADIANS(@CenterLatitude)) 

SELECT LocationId, LocationName, Address, City, State, Zip, Phone, Latitude, Longitude,
               hasATM, hasCarWash, hasDiesel, hasE85, is24hr, hasTrendar, hasWiFi, isTravelCenter, isMiniTravelCenter, isTruckerFriendly, hasScale, hasHotFood,
               ProxDistance = 3961 * ACOS( dbo.XAxis(latitude, longitude)*@CntXAxis + dbo.YAxis(latitude, longitude)*@CntYAxis + dbo.ZAxis(latitude)*@CntZAxis) 
FROM Locations 
WHERE latitude IS NOT NULL 
ORDER BY ProxDistance ASC
GO

编辑 - 添加(抱歉,我最初错过了这些)

-- USER-DEFINED FUNCTIONS
-- XAxis #########################################
CREATE FUNCTION [dbo].[XAxis] (@lat float, @lon float)  
RETURNS float
AS  
BEGIN 
   RETURN COS(4 * (4 * atn2(1, 5) - atn2(1, 239)) / 180 * @lat) * COS(4 * (4 * atn2(1, 5) - atn2(1, 239)) / 180 * @lon) 
END

CREATE FUNCTION [dbo].[YAxis] (@lat float, @lon float)  
RETURNS float AS  
BEGIN 
RETURN COS(4 * (4 * atn2(1,5) - atn2(1,239)) / 180 * @lat) * SIN(4 * (4 * atn2(1,5) - atn2(1,239)) / 180 * @lon)
END

CREATE FUNCTION [dbo].[ZAxis] (@lat float)  
RETURNS float AS  
BEGIN 
RETURN SIN(4 * (4 * atn2(1,5) - atn2(1,239)) / 180 * @lat)
END

答案 1 :(得分:1)

也许这有助于你:http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL
这是一个很好的介绍。或者只是google for mysql distance queries,你会找到一些教程。

如果您有可能并希望更轻松,请切换到支持远程查询的PostgreSQL

答案 2 :(得分:0)

您需要纽约的长途汽车,或者您想要分析的任何一个城市。然后使用数学简单地测量两组坐标之间的英里数。在Excel中,公式为

getDistance(latitude1, longitude1, latitude2, longitude2)

https://gis.stackexchange.com/questions/88484/excel-distance-calculation