Создание столбца географии / геометрии из полей x и y - SQL Server 2008


26

Я новичок в SQL Server 2008, и я надеюсь, что вы поймете мой вопрос / необходимость.

Таким образом, у меня есть таблица, которая содержит 3 поля (Name, Lat и Long) в моей базе данных (пространственной). Я хочу создать столбец геометрии / географии на основе этих полей (широта и долгота), но, к сожалению, безуспешно.

У меня вопрос: как мне это сделать?


Ответы:


36

Вы можете добавить вычисляемый столбец, как это

alter table yourTable add geographyColumn as geography::STGeomFromText('POINT('+convert(varchar(20),Long)+' '+convert(varchar(20),Lat)+')',4326)

Я добавил преобразование из lng или lat, потому что храню Long и Lats в виде чисел.


3
Спасибо за ваши ответы, мне удалось решить мою проблему с помощью этой строки: ОБНОВИТЬ вашу базу данных SET geometry_column = geometry :: Point ([ColX], [ColY], SRID)
Tudor

3
Можно ли для этого создать триггер? Например, когда вы заполняете свои поля (столбцы X и Y) информацией, запускается упомянутый выше скрипт.
Тудор

10

Похоже, вы хотите метод STGeomFromText()или STPointFromText()SQL:

DECLARE @g geography;
SET @g = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

или

DECLARE @g geography;
SET @g = geography::STPointFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

Создайте свое поле Geometryили Geography, затем используйте SQL, чтобы заполнить это поле, используя значения широты / долготы.


Какая будет разница в использовании следующего метода вместо ...DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
awesomo

@awesomo - Да, вы можете использовать это, если хотите, на самом деле.
Чед Купер


1

Если при использовании CONVERT(VARCHAR,оператора происходит округление исходных значений Long / Lat .

Попробуйте использовать:

GeoData = geometry:: STGeomFromText('POINT(' + CAST(CAST(X AS decimal(13, 2)) AS varchar) + ' '  + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ')', 4326)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.