Створіть стовпчик географії / геометрії з полів x та y - SQL Server 2008


26

Я новачок у SQL Server 2008 і сподіваюся, що ви зрозумієте моє питання / потребу.

Таким чином, у мене є таблиця, яка містить 3 поля (Ім'я, Ширина та Довга) в моїй базі даних (просторові). Я хочу створити стовпчик з геометрії / географії на основі цих полів (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 для заповнення цього поля за допомогою значень lat / lon.


Яка буде різниця у використанні натомість наступного методу ...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.