2009-12-08 11 views
12

Tworzę mapę Google mashup i używam SQL 2008.Geografia i geometria SQL 2008 - z której skorzystać?

będę mieć dużą liczbę punktów na ziemi i będzie chciał wykonywać różne operacje na nich w SQL - takich jak wybranie wszystkich punktów zawartych w konkretny wielokąt lub wybierz wszystkie punkty w promieniu 10 km od XY.

Nigdy wcześniej nie używałam funkcji przestrzennych SQL. Czy powinienem używać tego typu danych: geography lub geometry?

Odpowiedz

15

Geografia jest typem przeznaczonym do wykreślania punktów na ziemi.

Jeśli masz tabelę, która przechowuje Google Maps punkty tak:

CREATE TABLE geo_locations (
    location_id  uniqueidentifier NOT NULL, 
    position_point geography   NOT NULL 
); 

następnie można wypełnić punkty w nim z tej procedury przechowywanej:

CREATE PROCEDURE proc_AddPoint 
    @latitude     decimal(9,6), 
    @longitude    decimal(9,6), 
    @altitude     smallInt 
AS 

DECLARE @point     geography = NULL; 

BEGIN 

    SET NOCOUNT ON; 

    SET @point = geography::STPointFromText('POINT(' + CONVERT(varchar(15), @longitude) + ' ' + 
                                                       CONVERT(varchar(15), @latitude) + ' ' + 
                                                       CONVERT(varchar(10), @altitude) + ')', 4326) 

    INSERT INTO geo_locations 
    (
        location_id, 
        position_point 
   ) 
    VALUES 
    (
        NEWID(), 
        @point 
   ); 

END 

Następnie, jeśli chcesz zapytać o szerokość, długość i wysokość, po prostu użyj następującego formatu zapytania:

SELECT 
    geo_locations.position_point.Lat AS latitude, 
    geo_locations.position_point.Long AS longitude, 
    geo_locations.position_point.Z AS altitude 
FROM 
    geo_locations; 
4

Najprawdopodobniej chcesz typ geograficzny, ponieważ odpowiada za krzywiznę ziemi. Geometria jest bardziej dla "płaskiego" widoku rzeczy. Aby uzyskać więcej informacji, zapoznaj się z tym artykułem. http://www.mssqltips.com/tip.asp?tip=1847

6

Możesz śledzić odpowiedzi udzielonej w PostGIS FAQ

I'm all confused. Which data store should I use geometry or geography?

Krótka odpowiedź: geografia to nowy typ danych, który obsługuje Long Range odległościach pomiarów. Jeśli korzystasz z geografii - nie musisz uczyć się wiele o planarnych układach współrzędnych. Geografia jest ogólnie najlepsza, jeśli zależy Ci tylko na mierzeniu odległości i długościach , a na całym świecie masz dane ze wszystkich . Typ danych Geometria to starszy typ danych, który obsługuje wiele funkcji i cieszy się dużym wsparciem narzędzi stron trzecich. Jej najlepiej, jeśli są dość wygodne z przestrzennych układów odniesienia lub do czynienia z danymi zlokalizowanymi gdzie wszystkie dane wpisuje się w jednym przestrzenny układu odniesienia (SRID), albo trzeba zrobić wiele przetwarzania przestrzennego. Patrz sekcja 8.8, "PostGIS Funkcja" Matrix ", aby sprawdzić, co aktualnie obsługuje , a co nie jest .

Geometria i rodzaj geograficzny w obu bazach danych, PostGIS i SQL Server, są zgodne z tą samą koncepcją, więc odpowiedź podana w PostGIS FAQ dotyczy Państwa problemu.

Powiązane problemy