如何将GPS exif转换为地理?

时间:2018-04-24 07:49:02

标签: sql-server tsql exif geography sql-server-2016-sp1

我有附件表,每个附件都有GPSLatitudeGPSLongitude列。填充字段的遗留代码和值如下所示:

GPSLatitude
50/1,5/1,1897/100

GPSLongitude
14/1,25/1,4221/100

我是否可以使用任何功能构建,以便将它们转换为纬度和经度十进制值,如下所示:

Location Latitude   
41.5803 
Location Longitude
-83.9124

如果使用.net可以更轻松地完成此操作,我可以实现SQL CLR功能。

现在最困难的是了解这些价值所代表的含义。遗留代码使用的是一些API,没有关于返回格式的文档以及如何阅读它。

上述值仅用于显示数据的格式。以下库用于获取值 - chestysoft,如下所示:

 IF Image.ExifValueByName("GPSLatitude") <> "" THEN GPSLatitude = Image.ExifValueByName("GPSLatitude") ELSE GPSLatitude = NULL END IF
 IF Image.ExifValueByName("GPSLongitude") <> "" THEN GPSLongitude = Image.ExifValueByName("GPSLongitude") ELSE GPSLongitude = NULL END IF

2 个答案:

答案 0 :(得分:1)

假设@ Cool_Br33ze是正确的,并且数据是度,分和秒,您可以使用以下方法计算所需的值:

declare @v varchar(30) = '50/1,5/1,1897/100'

select  @v Original_Value,
        convert(decimal(18,4), left(@v, charindex('/', @v) - 1)) [Degrees],
        convert(decimal(18,4), substring(
                                            @v, 
                                            charindex(',', @v) + 1, 
                                            charindex('/', @v, charindex(',', @v)) - (charindex(',', @v) + 1)
                                        ) / 60.0
        ) [Minutes],
        convert(decimal(18,4), substring(
                                            @v, 
                                            charindex(',', @v, (charindex(',', @v) + 1)) + 1, 
                                            charindex('/', @v, charindex(',', @v, (charindex(',', @v) + 1))) - (charindex(',', @v, (charindex(',', @v) + 1)) + 1)
                                        ) / 360000.0
        ) [Seconds]

它看起来有点混乱,但它会分出度数,分钟和秒数(转换为DECIMAL(18,4)),您只需要将三个值相加以获得Lat / Long值度。

在实施之前我会彻底测试它。

答案 1 :(得分:1)

我相当肯定你应该把它读作:

50/1: 50 Degrees
5/1: 5 Minutes
1897/100: 18.97 Seconds

这会把你在纽约给出的位置(假设为N / W),这有意义吗?如果您无法验证输出,则很难提出任何其他建议...另请参阅here

在您提供的链接中,您可以上传图片以查看exif数据。在那里,您可以测试已知位置。同样显而易见的是,在您提到的值中,GPSLatitudeRefGPSLongitudeRef丢失了。您需要将这些值更改为某个位置。你的桌子上有这些价值吗?否则你必须做出(狂野的)假设。

这是纬度/经度的standard EXIF表示方式;我假设有很多很多工具可以转换它。