#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