Em Valores de Atributos Repetitivos Automatizados com SQL<\/A> adicionamos alguma automação para entrada repetitiva de dados usando classes de feição que utilizam o tipo de armazenamento Microsoft Geography.<\/P><\/P>Mas e quanto a outros pontos de dados repetitivos? Voltando ao nosso "Data Standard", grande parte dos dados que coletamos também precisa ser atribuída com valores discretos ou contínuos obtidos de um raster, como elevação. Claro, eu poderia escrever algum código em Python ou C# para lidar com isso, mas eu pulei essa aula...<\/P><\/P>Isso pressupõe que você tenha um Modelo Digital de Elevação raster no SDE que foi PRIMEIRO configurado usando ST_RASTER (Ajuda ArcGIS 10.1<\/A>) e então copiado para uma tabela ST_PIXEL com SRID 4269.<\/P><\/P>Neste exemplo, eu tenho um DEM com resolução de 10 m chamado DEM10MP. Na minha convenção de nomenclatura, o "P" indica que a tabela é do tipo ST_PIXEL.<\/P><\/P>Estendendo o gatilho apresentado em Valores de Atributos Repetitivos Automatizados com SQL<\/A> eu simplesmente adiciono uma consulta Get Value By Location usando o valor LAT\/LON da coluna Geography inserida ou atualizada. O gatilho completo fica assim. As linhas 25\/26 incluem a consulta de elevação.<\/P><\/P>ALTER TRIGGER [dbo].[TEST_GEOGRAPHY]ON [dbo].[TEST]\****** dispara em inserções e atualizações ******\\****** desabilita o gatilho quando replicação ou espelhamento SQL está habilitado ******\after INSERT,UPDATE NOT FOR REPLICATIONAS BEGIN SET NOCOUNT ON; UPDATE p SET \****** hipoteticamente poderíamos inserir lat\/lon como texto e criar um objeto geography ******\ SHAPE = CASE WHEN i.SHAPE IS NOT NULL THEN p.SHAPE ELSE Geography::STPointFromText('POINT(' + CAST(p.LON AS VARCHAR(20)) + ' ' + CAST(p.LAT AS VARCHAR(20)) + ')', 4269) END, \****** caso usual ponto é criado com ARC e converte LAT\/LON como texto ******\\****** do objeto geography ******\ LON = CASE WHEN p.SHAPE IS NULL THEN p.LON ELSE p.SHAPE.Long END, LAT = CASE WHEN p.SHAPE IS NULL THEN p.LAT ELSE p.SHAPE.Lat END, QuadName = COALESCE(b.name, p.QuadName), Watershed = COALESCE(c.HUC_12_Name, p.Watershed), County = COALESCE(d.Name, p.County), State= COALESCE(e.Name, p.State), PARKDISTRICT = COALESCE(f.District, p.PARKDISTRICT), ELEVATION = (SELECT<\/STRONG><\/SPAN>pdata.getValueByLoc(1,p.SHAPE.Long,p.SHAPE.Lat) FROM [dbo].[DEM10MP])<\/STRONG><\/SPAN> FROM TEST AS p \****** permite atualização de lat\/lon na atualização ******\ INNER JOIN inserted AS i ON i.globalid = p.globalid LEFT OUTER JOIN USGS_24K_TOPOMAP_BOUNDARIES AS b ON b.Shape.STIntersects(i.Shape) = 1 LEFT OUTER JOIN WATERSHEDS AS c ON c.Shape.STIntersects(i.Shape) = 1 LEFT OUTER JOIN GRSM_COUNTIES AS d ON d.Shape.STIntersects(i.Shape) = 1 & nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ; LEFT OUTER JOIN GRSM_States AS e ON e.Shape.STIntersects(i.Shape) = 1 LEFT OUTER JOIN GRSM_SUB_RANGER_DISTRICTS AS f ON f.Shape.STIntersects(i.Shape) = 1 ;ENDGO<\/PRE><\/P>Agora para cada novo ponto que adiciono a esta classe de feição, ou edito, todos os campos exceto um são automaticamente preenchidos ou atualizados.<\/P><\/P>Sempre.<\/P><\/P>Sem entrada do usuário.<\/P><\/P><\/P><\/P>Este é um blog pessoal e não recomenda, endossa ou apoia os métodos descritos acima. Alteração de dados usando SQL fora do stack de software ESRI, claro, não é suportada e não deve ser aplicada a um banco de dados de produção sem um entendimento completo e plano de recuperação de desastres.<\/EM><\/P><\/BODY><\/HTML>
<\/P>
Mas e quanto a outros pontos de dados repetitivos? Voltando ao nosso "Data Standard", grande parte dos dados que coletamos também precisa ser atribuída com valores discretos ou contínuos obtidos de um raster, como elevação. Claro, eu poderia escrever algum código em Python ou C# para lidar com isso, mas eu pulei essa aula...<\/P>
Isso pressupõe que você tenha um Modelo Digital de Elevação raster no SDE que foi PRIMEIRO configurado usando ST_RASTER (
Neste exemplo, eu tenho um DEM com resolução de 10 m chamado DEM10MP. Na minha convenção de nomenclatura, o "P" indica que a tabela é do tipo ST_PIXEL.<\/P>
Estendendo o gatilho apresentado em
ALTER TRIGGER [dbo].[TEST_GEOGRAPHY]ON [dbo].[TEST]\****** dispara em inserções e atualizações ******\\****** desabilita o gatilho quando replicação ou espelhamento SQL está habilitado ******\after INSERT,UPDATE NOT FOR REPLICATIONAS BEGIN SET NOCOUNT ON; UPDATE p SET \****** hipoteticamente poderíamos inserir lat\/lon como texto e criar um objeto geography ******\ SHAPE = CASE WHEN i.SHAPE IS NOT NULL THEN p.SHAPE ELSE Geography::STPointFromText('POINT(' + CAST(p.LON AS VARCHAR(20)) + ' ' + CAST(p.LAT AS VARCHAR(20)) + ')', 4269) END, \****** caso usual ponto é criado com ARC e converte LAT\/LON como texto ******\\****** do objeto geography ******\ LON = CASE WHEN p.SHAPE IS NULL THEN p.LON ELSE p.SHAPE.Long END, LAT = CASE WHEN p.SHAPE IS NULL THEN p.LAT ELSE p.SHAPE.Lat END, QuadName = COALESCE(b.name, p.QuadName), Watershed = COALESCE(c.HUC_12_Name, p.Watershed), County = COALESCE(d.Name, p.County), State= COALESCE(e.Name, p.State), PARKDISTRICT = COALESCE(f.District, p.PARKDISTRICT), ELEVATION = (SELECT<\/STRONG><\/SPAN>pdata.getValueByLoc(1,p.SHAPE.Long,p.SHAPE.Lat) FROM [dbo].[DEM10MP])<\/STRONG><\/SPAN> FROM TEST AS p \****** permite atualização de lat\/lon na atualização ******\ INNER JOIN inserted AS i ON i.globalid = p.globalid LEFT OUTER JOIN USGS_24K_TOPOMAP_BOUNDARIES AS b ON b.Shape.STIntersects(i.Shape) = 1 LEFT OUTER JOIN WATERSHEDS AS c ON c.Shape.STIntersects(i.Shape) = 1 LEFT OUTER JOIN GRSM_COUNTIES AS d ON d.Shape.STIntersects(i.Shape) = 1 & nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ; LEFT OUTER JOIN GRSM_States AS e ON e.Shape.STIntersects(i.Shape) = 1 LEFT OUTER JOIN GRSM_SUB_RANGER_DISTRICTS AS f ON f.Shape.STIntersects(i.Shape) = 1 ;ENDGO<\/PRE><\/P>Agora para cada novo ponto que adiciono a esta classe de feição, ou edito, todos os campos exceto um são automaticamente preenchidos ou atualizados.<\/P><\/P>Sempre.<\/P><\/P>Sem entrada do usuário.<\/P><\/P><\/P><\/P>Este é um blog pessoal e não recomenda, endossa ou apoia os métodos descritos acima. Alteração de dados usando SQL fora do stack de software ESRI, claro, não é suportada e não deve ser aplicada a um banco de dados de produção sem um entendimento completo e plano de recuperação de desastres.<\/EM><\/P><\/BODY><\/HTML>
Membros conectados podem postar, seguir atualizações e mais. Novo aqui? Registre uma conta gratuita.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.