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

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

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

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


person Mr. Flibble    schedule 08.12.2009    source источник


Ответы (3)


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

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

Вы можете следить за ответом, приведенным в разделе часто задаваемых вопросов PostGIS.

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

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

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

person mloskot    schedule 25.01.2010

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

person ktharsis    schedule 08.12.2009