Encontrei este belo trecho de código que usa uma cadeia de linha e posso obter os pontos dela:
DECLARE @GeographyToConvert geography
SET @GeographyToConvert = geography::STGeomFromText('LINESTRING (26.6434033 -81.7097817, 26.6435367 -81.709785, 26.6435783 -81.7098033, 26.6436067 -81.709825, 26.6435883 -81.709875, 26.64356 -81.7100417, 26.6434417 -81.710125, 26.6433167 -81.7101467, 26.643195 -81.7101033, 26.6431533 -81.7099517, 26.643175 -81.7097867, 26.643165 -81.7097917, 26.6431633 -81.7097367, 26.6431583 -81.7097083)',4326);
select @GeographyToConvert.STPointN(1)
select @GeographyToConvert.STPointN(2)
select @GeographyToConvert.STPointN(3)
Retorna:
0xE6100000010C273339106D6D54C073A32314B6A43A40
0xE6100000010C3F8C101E6D6D54C0984638D2BEA43A40
0xE6100000010CF205D26A6D6D54C050EA268CC1A43A40
A partir daqui, posso fazer o que preciso por meio do código mencionado.
No entanto, em vez da linha de demonstração pré-preenchida, tenho uma tabela com coordenadas de GPS que contém os dados dos quais preciso preencher o@GeographyToConvert geography
declare @Geo table(long float, lat float)
insert into @Geo( long, lat ) values
( -121.527200, 45.712113 ),
( -121.517265, 45.714240 ),
( -121.511536, 45.714825)
Select * from @Geo
Posso, por favor, pedir ajuda para colocar os @Geo
valores da tabela no@GeographyToConvert geography
Você pode usar SQL dinâmico para construir a string para alimentar
STGeomFromText()
. Eu não acho que você será capaz de fazer isso de forma relacional (embora, para ser justo, essa não seja minha especialidade). Isso fará com que você continue até (se) algo melhor aparecer.Aqui está uma variação de como lidei com isso no passado.
Adicionei colunas grp e seq ao @Geo para demonstrar como construir várias linhas e obter a ordem dos pontos na linha correta. O seq poderia alternativamente ser datetime.
SQLFiddle não gostou da geografia, mas isso mostra a cadeia de linha construída