2D Reliure Boîte de requête
-
21-09-2019 - |
Question
Je colonnes de table ProductID, latitude,longitude,timestampGMT
et la recherche d'une requête pour compter le nombre de numéros d'identification sont dans ce cadre de sélection ou enveloppe.
Toutes les suggestions utiles.
La solution
SQL Server 2008
soutient type de données GEOGRAPHY
.
Vous devez stocker lat, lon
dans une seule colonne de ce type de données, créer un index de SPATIAL
dessus et l'utiliser dans une requête:
SELECT m.*
FROM mytable
ON coords.STDistance(@mypoint) <= @mydistance
Autres conseils
Vous cherchez la formule de distance « orthodromique »
http://www.sqlteam.com/forums/topic.asp ? topic_id = 81360
Pourquoi devriez-vous indiquer l'algorithme SQL correcte
Cette question ne devrait pas être un wiki communautaire. Mettez si vous le pouvez. De toute façon, voici votre réponse.
@Quassnoi a donné une excellente solution pour SQL 2008, mais vous demandez pour 2003, non? 2003 n'a pas le même soutien que la géographie 2008. Vous devrez rouler votre propre comme je l'ai fait. Il n'est pas difficile, selon le niveau de précision dont vous avez besoin. Voici une fonction scalaire que je suis venu avec base d'une formule populaire pour calculer la distance entre deux ensembles de coordonnées:
-- =====================================================================
-- Author: Byron Sommardahl
-- Create date: June 15, 2007
-- Description: Calculates the distance between two sets of coordinates.
-- ======================================================================
CREATE FUNCTION [dbo].[Distance]
(
@lat1 float,
@long1 float,
@lat2 float,
@long2 float
)
RETURNS float
AS
BEGIN
RETURN (3958*3.1415926*sqrt((@lat2-@lat1)*(@lat2-@lat1) + cos(@lat2/57.29578)*cos(@lat1/57.29578)*(@long2-@long1)*(@long2-@long1))/180);
END
GO
Pour l'utiliser, nourrir juste dans vos coords en utilisant SELECT:
SELECT dbo.Distance(MyPlace.Lat, MyPlace.Long, TheirPlace.Lat, TheirPlace.Long);
Ensuite, vous pouvez simplement vérifier si un produit est dans un certain rayon de votre point focal. Pas exactement boîte englobante, mais il vous fait bouger dans la bonne direction.
Vous pouvez également jeter un oeil à ceci:
SQL Server ZipCode Latitude Longitude proximité Distance Recherche