Невозможно преобразовать столбец в SSMS в тип данных географии - PullRequest
0 голосов
/ 04 мая 2020

В настоящее время у меня есть задача, в которой мне нужно сравнить расстояния по широте и долготе для указанных местоположений c, и у меня есть электронная таблица Excel, в которой много данных о широте и долготе, и мне необходимо преобразовать эти типы данных в geography .

Проблема в том, что перед тем, как определить расстояния, мне нужно преобразовать столбцы в geography. Я попытался использовать мастер импорта в SSMS, но, к сожалению, у меня нет возможности изменить тип данных на географический. Установка типа данных в decimal и попытка изменения вручную приведут к ошибке:

Явное преобразование десятичного типа данных в Test.sys.geography не допускается.

Я думал о создании таблицы вручную, но проблема в том, что количество строк, которые имеют широта и долгота, ОГРОМНО.

Пожалуйста, помогите мне, как я могу преобразовать столбец в geography .

Ответы [ 2 ]

1 голос
/ 04 мая 2020

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

ALTER TABLE [dbo].[Your Table Name]
ADD [GeoLocation] GEOGRAPHY

Затем обновите этот столбец, используя следующий SQL запрос

UPDATE [dbo].[Your Table Name]
SET [GeoLocation] = geography::STPointFromText('POINT(' + CAST([Longitude] AS VARCHAR(20)) + ' ' + 
                    CAST([Latitude] AS VARCHAR(20)) + ')', 4326)

Более подробную информацию можно найти по этой ссылке http://www.sql-server-helper.com/sql-server-2008/convert-latitude-longitude-to-geography-point.aspx

https://docs.microsoft.com/en-us/sql/t-sql/spatial-geography/point-geography-data-type?view=sql-server-ver15

0 голосов
/ 04 мая 2020

Импортируйте свою таблицу Excel в качестве рабочей таблицы, затем создайте INSERT INTO SELECT, который преобразует в вашу десятичную геометрию

Посмотрите здесь, чтобы помочь вам :

Создание поля геометрии / географии из полей широты и долготы (SQL Сервер)

...