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

Геометрия: STGeomFromText и SRID (что такое SRID?)

Я играю с новым столбцом географии в SQL Server 2008 и функцией STGeomFromText. Вот мой код (работает с AdventureWorks2008)

DECLARE @region geography;
set @region = geography::STGeomFromText('POLYGON((
        -80.0 50.0, -90.0 50.0,
        -90.0 25.0, -80.0 25.0,
        -80.0 50.0))', 4326);

SELECT @region;

Мой вопрос о 4326 в коде. Предполагается, что это пространственный ссылочный идентификатор. Когда я перехожу в MSDN, на нем не так много. Если я изменил значение на 56, я получаю сообщение об ошибке, указывающее, что значение должно быть в таблице sys.spatial_reference_systems.

Вы можете посмотреть эту таблицу, выполнив:

select * from sys.spatial_reference_systems 

В этой таблице есть столбец well_known_text, но это не говорит мне многого. Значение для 4326:

GEOGCS["WGS 84", DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84", 6378137, 298.257223563]], PRIMEM["Greenwich", 0], UNIT["Degree", 0.0174532925199433]]

Может ли кто-нибудь объяснить эту тайну мне? Что такое SRID?

4b9b3361

Ответ 1

Итак, вчера я поговорил с бывшим военным парнем, который был специалистом по радиолокации/картографии. В принципе, он точно знал, что это за номер (4326), откуда он появился, и почему он там.

Это промышленный стандарт для вычисления географии. Проблема в том, что земля не является идеальной сферой (она выпучивается посередине), и SRID 4326 объясняет это.

Как я уже сказал, в таблице sys.spatial_reference_systems перечислены все коды и каковы они. Но короткая версия заключается в том, что вы действительно собираетесь использовать только 4326, если у вас нет особых причин использовать что-то другое.

Ответ 3

Существует множество систем для отображения земли. Например, вы хотите отобразить какое-то государство в США. Вы можете установить самую юго-восточную точку как 0,0 и отобразить все остальные пространственные координаты в соответствии с этой точкой. С другой стороны, вы можете отобразить некоторые пространственные данные, которые охватывают всю карту. В любом случае вы должны выбрать какую-то точку как 0,0. Кроме того, вы должны выбрать какую-то измерительную единицу: мили/километры/градусы/какая-то другая магическая единица, которая вам подходит. На протяжении многих лет многие такие системы развивались. Каждый из них имеет свою собственную нулевую точку, свои собственные координаты, свои правила о том, плотно ли земля или нет. SRID или SRS является идентификатором такой системы. Используя этот идентификатор, вы можете сопоставить точку, выраженную в одной системе, другой системой, хотя иногда она включает в себя довольно сложную математику.

И около 4326 SRID. Он также назывался "WGS 84", (http://en.wikipedia.org/wiki/World_Geodetic_System). Это самая распространенная система для представления точки на сферической (не плоской) земле. Он использует градусы, минуты, вторую нотацию, а координаты x и y обычно называются широтой и долготой.

Наиболее часто используемая несферическая проекция земли называется UTM. Вы можете прочитать об этом здесь: http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system

В любом случае, пока вы не выполняете каких-либо пространственных преобразований из одной системы в другую, вам действительно не нужна система, которую вы используете.

Ответ 4

Я нашел этот веб-сайт: http://spatialreference.org/ref/epsg/4326/ весьма полезен в понимании SRID, который вы собираетесь использовать. Он предоставляет удобную карту, некоторую информацию о ограничительных коробках и другие ссылки.

Для других SRID просто измените цифры в конце URL-адреса на то, что вам нужно.

Ответ 5

Возвращаемое расстояние зависит от "Идентификатор пространственных ссылок (SRID)" , который вы определяете для своих типов географии.

В приведенном ниже примере используется стандартный SRID 4336, см. второй аргумент STGeomFromText. Это означает, что полученное расстояние находится в метрах, вы найдете это, обратившись к просмотру каталога spaces_reference_systems i.e. select srs.unit_of_measure from sys.spatial_reference_systems as srs where srs.spatial_reference_id = 4326

В качестве альтернативы STGeomFromText вы можете использовать parse, который предполагает SRID из 4326, и вам не нужно явно указывать его.

При расчете расстояния между двумя точками вы должны использовать тот же SRID для обоих типов географии, иначе вы получите сообщение об ошибке. Пример:

DECLARE @address1 GEOGRAPHY
DECLARE @address2 GEOGRAPHY
DECLARE @distance float
SET @address1 = GEOGRAPHY::STGeomFromText ('point(53.046908 -2.991673)',4326)
SET @address2 = GEOGRAPHY::STGeomFromText ('point(51.500152 -0.126236)',4326)
SET @distance = @address1.STDistance(@address2)
SELECT @distance --this is the distance in meters