Mysql
 sql >> база данни >  >> RDS >> Mysql

градове и разстояние по географска ширина-дължина

Ето нашия. Може да се наложи да го промените за структурата на вашата таблица. Нашият търси търговски обекти (и удобства), а не градове, но трудната част е „най-близкото разстояние“, което работи в това твърдение.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да прехвърля int към bit в MySQL 5.1?

  2. Как да актуализирам mysql база данни с ajax и php във innerhtml

  3. Показване на всички дати между тях, дори и да няма резултат

  4. Добър инструмент за визуализиране на схема на база данни?

  5. Красноречив много-към-много-към-много - как да заредите лесно отдалечена връзка