Подтвердить что ты не робот

География и геометрия SQL 2008 - что использовать?

Я создаю mashup карты Google и использую SQL 2008.

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

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

4b9b3361

Ответ 1

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

Если у вас есть таблица, в которой хранятся точки 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;

Ответ 2

Вы можете выполнить ответ, указанный в PostGIS FAQ

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

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

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

Ответ 3

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