Вопрос

Я создаю гибридную карту Google и использую SQL 2008.

У меня будет большое количество точек на земле, и я захочу выполнить над ними различные вычисления в SQL, например, выбрать все точки, содержащиеся в определенном многоугольнике, или выбрать все точки в пределах 10 км от XY.

Я никогда раньше не использовал пространственные функции SQL.Должен ли я использовать geography или geometry тип данных для этого?

Это было полезно?

Решение

География — это тип, предназначенный для нанесения точек на земной поверхности.

Если у вас есть таблица, в которой хранятся точки Google Maps, например:

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

то вы можете заполнить его точки с помощью этой хранимой процедуры:

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

Затем, если вы хотите запросить широту, долготу и высоту, просто используйте следующий формат запроса:

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;

Другие советы

Вы можете следовать ответу, данному в ПостГИС Часто задаваемые вопросы

Я весь в замешательстве.Какое хранилище данных следует использовать: геометрию или географию?

Короткий ответ:География - это новый тип данных, который поддерживает измерения расстояний на большие расстояния.Если вы используете географию - вам не нужно много узнать о плоских системах координат.География, как правило, лучше всего, если все, что вас волнует, это измерять расстояния и длины, и у вас есть данные со всего мира.Геометрия DataType - это более старый тип данных, который имеет много функций, поддерживающих его и пользуется большой поддержкой от сторонних инструментов.Лучше всего, если вам очень удобно пространственные справочные системы или вы имеете дело с локализованными данными, где все ваши данные вписываются в одну пространственную справочную систему (SRID), или вам нужно сделать много пространственной обработки.Обратитесь к разделу 8.8 «Матрица поддержки функций PostGIS», чтобы увидеть, что в настоящее время поддерживается, а что нет.

Типы геометрии и географии в обеих базах данных, PostGIS и SQL Server, следуют одной и той же концепции, поэтому ответ, приведенный в FAQ по PostGIS, применим к вашей проблеме.

Скорее всего, вам понадобится географический тип, поскольку он учитывает кривизну Земли.Геометрия больше подходит для «плоского» взгляда на вещи.Прочтите эту статью для получения дополнительной информацииhttp://www.mssqltips.com/tip.asp?tip=1847

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top