2015-05-19 8 views
9

Sono un principiante di sql che sa come ottenere la posizione dei miei utenti nelle coordinate di longitudine e latitudine. Il mio obiettivo è in ultima analisi essere in grado di selezionare tutte le righe da myTable Dove la distanza è inferiore a 2 km. Comunque, nel mio cammino verso questo obiettivo, ci sono alcune cose che mi confondono, quindi cercherò di elencare ciò che non riesco a capire.Come memorizzare longitute e latitudine come geografia in SQL Server 2014?

  1. Come posso usare il longitute e latitute per memorizzare posizione all'interno di una colonna di geografia? (Perché si suppone di essere solo un punto geografico non due a destra? Non uno per longitute e uno per latitute?)

  2. Ora che ho i punti geografici, come posso selezionare tutte le righe entro una distanza specifica (nel mio caso 2 km)?

Ho visto alcune domande simili già, ma la quantità di comprensione pre per la loro risoluzione ottiene oltre la mia conoscenza di SQL dato che io sono un principiante assoluto, questo può essere fatto facilmente, qualcuno sa come? Qualsiasi aiuto o input molto apprezzato, grazie!

+1

['geography :: Point()'] (https://msdn.microsoft.com/en-us/library/bb933811.aspx). –

risposta

8

Come posso usare il longitute e latitute per memorizzare posizione all'interno di una colonna di geografia? (Perché si suppone di essere solo un punto geografico non due a destra? Non uno per longitute e uno per latitute?)

È possibile utilizzare geography::STPointFromText/geography::Point per memorizzare longitudine e latitudine in un tipo di dati geografici.

SELECT geography::STPointFromText('POINT(' + CAST([Longitude] AS VARCHAR(20)) + ' ' + CAST([Latitude] AS VARCHAR(20)) + ')', 4326) 

o

SELECT geography::Point(Latitude, Longitude , 4326) 

Riferimento Link:

Update Geography column in table

Ora che ho i punti di geografia, come posso selezionare tutte le righe all'interno di una distanza specifica (nel mio caso 2km)?

È possibile utilizzare STDistance come questo.

DECLARE @g geography; 
DECLARE @h geography; 
SET @g = geography::STGeomFromText('POINT(-122.35900 47.65129)', 4326); 
SET @h = geography::STGeomFromText('POINT(-122.34720 47.65100)', 4326); 
SELECT @g.STDistance(@h); 

Riferimento Link:

Distance between two points using Geography datatype in sqlserver 2008?

Inserisci query

DECLARE @GeoTable TABLE 
(
    id int identity(1,1), 
    location geography 
) 
--Using geography::STGeomFromText 
INSERT INTO @GeoTable 
SELECT geography::STGeomFromText('POINT(-122.35900 47.65129)', 4326) 

--Using geography::Point 
INSERT INTO @GeoTable 
SELECT geography::Point(47.65100,-122.34720, 4326); 

Get Distanza Query

DECLARE @DistanceFromPoint geography 
SET @DistanceFromPoint = geography::STGeomFromText('POINT(-122.34150 47.65234)', 4326); 

SELECT id,location.Lat Lat,location.Long Long,location.STDistance(@DistanceFromPoint) Distance 
FROM @GeoTable; 
+0

Grazie, proviamo! – mattias

+0

Ok, usando questo, come posso inserire un modo per selezionare tutte le righe entro una distanza specifica? Ho provato qualcosa di simile a WHERE @DistanceFromPoint> 400 ma ovviamente non è il modo di farlo poiché mi dà errori, grazie ancora per la risposta! – mattias

+0

dovresti usare 'WHERE location.STDistance (@DistanceFromPoint)> 400' – ughai

Problemi correlati