En Valores de Atributo Repetitivos Automatizados con SQL<\/A> añadimos algo de automatización para la entrada repetitiva de datos usando clases de entidades que utilizan el tipo de almacenamiento Microsoft Geography.<\/P><\/P>¿Pero qué pasa con otros puntos de datos repetitivos? Volviendo a nuestro "Estándar de Datos", gran parte de los datos que recopilamos también necesitan ser atribuidos con valores discretos o continuos obtenidos de un raster, como la elevación. Claro, podría escribir algo de código en Python o C# para manejar esto, pero me salté esa clase...<\/P><\/P>Esto asume que tienes un Modelo Digital de Elevación raster en SDE que ha sido PRIMERO configurado usando ST_RASTER (Ayuda ArcGIS 10.1<\/A>) y luego copiado a una tabla ST_PIXEL con SRID 4269.<\/P><\/P>En este ejemplo, tengo un DEM con resolución de 10 m llamado DEM10MP. En mi convención de nombres, la "P" indica que la tabla es del tipo ST_PIXEL.<\/P><\/P>Extendiendo el trigger presentado en Valores de Atributo Repetitivos Automatizados con SQL<\/A> simplemente agrego una consulta Get Value By Location usando el valor LAT\/LON de la columna Geography insertada o actualizada. El trigger completo se ve así. La línea 25\/26 incluye la consulta de elevación.<\/P><\/P>ALTER TRIGGER [dbo].[TEST_GEOGRAPHY]ON [dbo].[TEST]\****** se activa en inserciones y actualizaciones ******\\****** deshabilitar trigger cuando la replicación o el mirroring SQL están habilitados ******\after INSERT,UPDATE NOT FOR REPLICATIONAS BEGIN SET NOCOUNT ON; UPDATE p SET \****** hipotéticamente podríamos ingresar latitud/longitud como texto y crear un 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: el punto se crea con ARC y convierte LAT/LON a texto ******\\****** desde el 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 \****** permitir actualización de lat/lon en actualización ******\ 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 ; LEFT OUTER JOIN GRSM_States AS e  ; & nbsp ; & nbsp ; & nbsp ; ON e.Shape.STIntersects(i.Shape) = 1 & nbsp ; & nbsp ; LEFT OUTER JOIN GRSM_SUB_RANGER_DISTRICTS AS f on f.Shape.STIntersects(i.Shape) = 1 & nbsp ; ; ENDGO< /PRE >< P >< / P >< P > Ahora para cada nuevo punto que agrego a esta clase de entidad, o edito, todos menos un campo se llenan o actualizan automáticamente.< / P >< P >< / P >< P > Cada vez.< / P >< P >< / P >< P > Sin entrada del usuario.< / P >< P >< / P >< P >< IMG __jive_id = "46010" alt = "rewr.JPG" class = "jive-image image-1" src = "https:\/\/us.v-cdn.net\/6038851\/uploads\/legacyfs\/online\/46010_rewr.JPG" style = "height: auto; display: block; margin-left: auto; margin-right: auto;" />< / P >< P >< / P >< P >< EM style = "font-size: 13px; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;" > Este es un blog personal y no recomienda, respalda ni apoya los métodos descritos arriba. La alteración de datos usando SQL fuera del stack de software ESRI, por supuesto, no está soportada y no debe aplicarse a una base de datos en producción sin una comprensión completa y un plan de recuperación ante desastres.< / EM >< / P >< / BODY >< / HTML >
<\/P>
¿Pero qué pasa con otros puntos de datos repetitivos? Volviendo a nuestro "Estándar de Datos", gran parte de los datos que recopilamos también necesitan ser atribuidos con valores discretos o continuos obtenidos de un raster, como la elevación. Claro, podría escribir algo de código en Python o C# para manejar esto, pero me salté esa clase...<\/P>
Esto asume que tienes un Modelo Digital de Elevación raster en SDE que ha sido PRIMERO configurado usando ST_RASTER (
En este ejemplo, tengo un DEM con resolución de 10 m llamado DEM10MP. En mi convención de nombres, la "P" indica que la tabla es del tipo ST_PIXEL.<\/P>
Extendiendo el trigger presentado en
ALTER TRIGGER [dbo].[TEST_GEOGRAPHY]ON [dbo].[TEST]\****** se activa en inserciones y actualizaciones ******\\****** deshabilitar trigger cuando la replicación o el mirroring SQL están habilitados ******\after INSERT,UPDATE NOT FOR REPLICATIONAS BEGIN SET NOCOUNT ON; UPDATE p SET \****** hipotéticamente podríamos ingresar latitud/longitud como texto y crear un 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: el punto se crea con ARC y convierte LAT/LON a texto ******\\****** desde el 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 \****** permitir actualización de lat/lon en actualización ******\ 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 ; LEFT OUTER JOIN GRSM_States AS e  ; & nbsp ; & nbsp ; & nbsp ; ON e.Shape.STIntersects(i.Shape) = 1 & nbsp ; & nbsp ; LEFT OUTER JOIN GRSM_SUB_RANGER_DISTRICTS AS f on f.Shape.STIntersects(i.Shape) = 1 & nbsp ; ; ENDGO< /PRE >< P >< / P >< P > Ahora para cada nuevo punto que agrego a esta clase de entidad, o edito, todos menos un campo se llenan o actualizan automáticamente.< / P >< P >< / P >< P > Cada vez.< / P >< P >< / P >< P > Sin entrada del usuario.< / P >< P >< / P >< P >< IMG __jive_id = "46010" alt = "rewr.JPG" class = "jive-image image-1" src = "https:\/\/us.v-cdn.net\/6038851\/uploads\/legacyfs\/online\/46010_rewr.JPG" style = "height: auto; display: block; margin-left: auto; margin-right: auto;" />< / P >< P >< / P >< P >< EM style = "font-size: 13px; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;" > Este es un blog personal y no recomienda, respalda ni apoya los métodos descritos arriba. La alteración de datos usando SQL fuera del stack de software ESRI, por supuesto, no está soportada y no debe aplicarse a una base de datos en producción sin una comprensión completa y un plan de recuperación ante desastres.< / EM >< / P >< / BODY >< / HTML >
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate gratis.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.