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





SRID = Идентификатор пространственной привязки
Для сравнения координаты должны использовать один и тот же SRID. в противном случае вам пришлось бы сравнивать километры и мили. или что-то подобное.
Итак, вчера я разговаривал с бывшим военным, который был специалистом по радиолокации / картографии. По сути, он точно знал, что это за число (4326), откуда оно взялось и почему оно там есть.
Это отраслевой стандарт для вычисления географии. Проблема в том, что Земля не является идеальной сферой (она выпирает посередине), и SRID 4326 объясняет это.
Как я уже сказал, таблица sys.spatial_reference_systems перечисляет весь код и то, что они из себя представляют. Но краткая версия заключается в том, что вы действительно собираетесь использовать только 4326, если у вас нет очень конкретной причины использовать что-то другое.
Существует множество систем для картографирования Земли. Например, вы хотите нанести на карту какой-нибудь штат в США. Вы можете установить самую юго-восточную точку как 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
В любом случае, пока вы не выполняете никаких пространственных преобразований из одной системы в другую, вам все равно, какая система использует ваши данные.
Эта последняя строчка меня действительно беспокоит, продвигая незнание, потому что это, вероятно, не имеет значения?
Я нашел этот веб-сайт: http://spatialreference.org/ref/epsg/4326/ весьма полезен для понимания того, какой SRID вы собираетесь использовать. Он предоставляет удобную карту, некоторую информацию о границах и другие ссылки.
Для других SRID просто измените цифры в конце URL-адреса на то, что вам нужно.
Возвращаемое расстояние зависит от «Идентификатор пространственной привязки (SRID)», которое вы определяете для своих географических типов.
В приведенном ниже примере используется значение SRID по умолчанию, равное 4336, см. Второй аргумент STGeomFromText. Это означает, что возвращаемое расстояние выражается в метрах, это можно найти, запросив представление каталога пространственная_ссылка_системы, то есть select srs.unit_of_measure from sys.spatial_reference_systems as srs where srs.spatial_reference_id = 4326.
В качестве альтернативы STGeomFromText вы можете использовать разбирать, который предполагает 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
Я не согласен с вашим утверждением: «Вы действительно собираетесь использовать только 4326, если у вас нет очень конкретной причины». Каждый раз, когда вы имеете дело с данными в небольшой области (представьте себе штат или округ, а не весь мир), вы будете использовать локальную спроецированную систему координат. Эти системы предназначены для лучшего представления земной поверхности на двухмерной плоскости, а не на трехмерном глобусе. Чаще всего вы получаете данные в проекции, отличной от WGS84, и вам нужно будет преобразовать. Если вы имеете дело только с точками GPS, то вы правы, предполагая, что данные находятся в 4326 99% случаев.