География и геометрия SQL 2008 - что использовать?
Я создаю mashup карты Google и использую SQL 2008.
У меня будет большое количество точек на земле и вы захотите выполнить различные вычисления на них в SQL - например, выбрать все точки, содержащиеся в определенном полигоне, или выбрать все точки в пределах 10 км от XY.
Я никогда раньше не использовал и пространственные функции SQL. Должен ли я использовать тип данных geography
или geometry
для этого?
Ответы
Ответ 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