Pergunta

Estou criando um mashup mapa Google e estou usando o SQL Server 2008.

Vou ter um grande número de pontos sobre a terra e vai querer realizar vários cálculos sobre eles em SQL -. Tais como selecionar todos os pontos contidos dentro de um polygone particular, ou selecione todos os pontos dentro de 10 km de XY

Eu nunca usei e recursos do SQL espacial antes. Devo usar o geography ou o tipo de dados geometry para isso?

Foi útil?

Solução

Geografia é o tipo que é destinado para traçar pontos na terra.

Se você tem uma tabela que armazena Google Maps pontos como este:

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

então você poderia preencher pontos em que com este procedimento armazenado:

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

Então, se você quiser consulta para a latitude, longitude e altitude, basta usar o seguinte formato de consulta:

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;

Outras dicas

Você pode acompanhar a resposta dada em PostGIS FAQ

Estou toda confusa. Que armazenamento de dados que eu deveria usar geometria ou geografia?

Resposta curta: a geografia é uma nova dados digite que suportes de longo alcance medições distâncias. Se você usar geografia - você não precisa de aprender muito sobre planar sistemas de coordenadas. Geografia é geralmente melhor se tudo que você cuidar distâncias aproximadamente está medindo e comprimentos e você tem dados de todos pelo mundo. Geometria tipo de dados é um tipo de dados mais antigo que tem muitas funções de apoio que e goza grande apoio de ferramentas de terceiros. Sua melhor se você está bastante confortável com sistemas de referência espacial ou você a lidar com dados localizados onde todos os seus acessos de dados em um único espaço sistema de referência (SRID), ou você precisa para fazer um monte de processamento espacial. Consulte a Seção 8.8, “PostGIS Função Matriz de suporte”para ver o que é suportada atualmente eo que é Não.

Os tipos de geometria e geografia em ambas as bases de dados, PostGIS e SQL Server, seguem o mesmo conceito, então a resposta dada no PostGIS FAQ é aplicável ao seu problema.

O mais provável é que você quer o tipo de geografia, uma vez que contribui para a curvatura da Terra. A geometria é mais para uma visão "flat" de coisas. Confira este artigo para mais informações http://www.mssqltips.com/tip.asp?tip=1847

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top