无法将 SSMS 中的列转换为数据类型地理

Posted

技术标签:

【中文标题】无法将 SSMS 中的列转换为数据类型地理【英文标题】:Unable to convert column in SSMS to data type geography 【发布时间】:2020-05-03 23:12:41 【问题描述】:

我目前有一项任务需要比较特定位置的纬度和经度距离,我有一个 Excel 电子表格,其中包含大量纬度和经度数据,需要将这些数据类型转换为 geography

问题是,在找出距离之前,我需要将列转换为geography。我尝试使用导入向导到 SSMS,但不幸的是,我没有将数据类型更改为地理的选项。将数据类型设置为decimal 并尝试手动更改会报错:

不允许从十进制数据类型显式转换为 Test.sys.geography。

我想手动创建一个表,但问题是纬度和经度的行数非常大。

请协助我将列转换为geography

【问题讨论】:

【参考方案1】:

您可以创建一个名为 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

【讨论】:

【参考方案2】:

将您的 Excel 电子表格导入为工作表,然后创建一个 INSERT INTO SELECT 即 transform to geometry you decimal

看看这里可以帮助你:

Create Geometry/Geography Field from Latitude & Longitude fields (SQL Server)

【讨论】:

您好,感谢您的评论,如果我错了,请纠正我,基本上我应该做的就是将excel导入SSMS,将经度和纬度设为小数。从那里,我应该将 insert into select 与 Juan Carlos Oropeza 用户发布的查询结合起来? @Zafear 是的,就是这样,但我看到 Kalyan 已经为您提供了 SQL(在插入到 select 时使用更新而不是,但那是一样的)。

以上是关于无法将 SSMS 中的列转换为数据类型地理的主要内容,如果未能解决你的问题,请参考以下文章

PySpark 将“map”类型的列转换为数据框中的多列

PHP将数据类型地理的结果转换为坐标

将Dataset中的列类型转换为python中具有特定格式的日期时间类型时出错

无法将数据类型更改为日期

如何将带有 POLYGON 的字符串类型转换为地理类型 - BigQuery

将我的日期列从 Excel 导入/转换为 SQL Server 中的日期时间数据类型?