преобразование значений широты и долготы из dms в dd в sql server

#sql-server #sql-server-2008 #type-conversion

#sql-сервер #sql-server-2008 #тип-преобразование

Вопрос:

У меня есть latitude longitude значения и в DegreesMinutesSeconds(DMS) like 17264496N,78223862E .

Мне нужно преобразовать в DecimalDegrees(DD) like 17.8688,078.12547 .

Есть ли какой-либо способ преобразовать из dms в dd.

В поиске Google я нашел только преобразование dms для значений, которые имеют отдельные столбцы по градусам, минутам, секундам, таким как градусы 17, минуты 26, секунды 44.

Комментарии:

1. вам нужно будет разделить строку и применить к функции, подобной этой: (или встроить разделение в функцию) spatialdbadvisor.com/sql_server_blog/189 /…

2. здесь градусы, минуты и секунды разделены, но в моем случае это не так.

Ответ №1:

Я получил ответ, сначала мы должны разделить значение dms на градусы, минуты и секунды следующим образом. Все, что вам нужно сделать, это Шаг 1: создать функцию, которая принимает значение широты dms в качестве параметра. Шаг 2: Теперь функция возвращает значение десятичного градуса

      ALTER FUNCTION [dbo].[GetLatitudeConversionFromDMSToDD] 

  (
@LatitudeInDMS NVARCHAR(100)
  )
 Returns FLOAT
 As

Begin
            Declare @FirstTwoCharForStartLat nvarchar(100),@CharElimForStartLat          
             nvarchar(100), @RemCharForStartLat nvarchar(100),
            @CharElimcountForStartLat float, @DegreetodecimalcalcForStartLat float

            select @FirstTwoCharForStartLat= LEFT(@LatitudeInDMS,2)
            select @CharElimForStartLat=LEFT(@LatitudeInDMS,LEN(@LatitudeInDMS)-1)
            select @RemCharForStartLat=RIGHT(@CharElimForStartLat,6)
            select @CharElimcountForStartLat=((CAST(@RemCharForStartLat as    
            float))/600000) 
            select @DegreetodecimalcalcForStartLat=(cast(@FirstTwoCharForStartLat as
            float)) @CharElimcountForStartLat 


   Return @DegreetodecimalcalcForStartLat

 END

      --select dbo.GetLatitudeConversionFromDMSToDD('17264496N')
      --The output is:17.4408266666667