Столбец геометрии: STGeomFromText и SRID (что такое SRID?) - PullRequest
24 голосов
/ 17 декабря 2008

Я играю с новым столбцом географии в 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?

Ответы [ 5 ]

19 голосов
/ 18 декабря 2008

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

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

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

17 голосов
/ 01 января 2009

Есть много систем для картографирования Земли. Например, вы хотите нанести на карту какой-нибудь штат в США. Вы можете установить самую юго-восточную точку как 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

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

16 голосов
/ 17 декабря 2008

SRID = Идентификатор пространственной привязки

координаты должны использовать один и тот же SRID, чтобы быть сопоставимыми. в противном случае вы бы сравнили километры и мили. или что-то подобное.

2 голосов
/ 28 октября 2009

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

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

1 голос
/ 25 августа 2010

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

В приведенном ниже примере используется значение по умолчанию SRID из 4336, см. Второй аргумент STGeomFromText . Это означает, что возвращаемое расстояние выражено в метрах, вы можете найти его, запросив представление каталога atial_reference_systems , т.е. 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
...