2009-12-08 3 views
12

Я создаю mashup карты Google и использую SQL 2008.География и геометрия SQL 2008 - что использовать?

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

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

ответ

15

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

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

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

6

Вы можете использовать вл ответ дан в PostGIS FAQ

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

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

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