Dérangeant le paysage, me cassant l'esprit. Fais ceci, ne fais pas cela, ne peux-tu pas lire la <\/SPAN>LINE ? <\/SPAN>Dans Hey Neighbor? What's Your Value?<\/A> , Rasters, Pixels and Code Oh My!,<\/A> et Using SQL to Auto-Populate XY Values<\/A> j'avais introduit quelques astuces SQL pour automatiser certaines saisies de données. J'aurais probablement dû mentionner que ces méthodes fonctionnent principalement sur des points....<\/P><\/P>Pour notre standard de données SIG, nous voulons également collecter les mêmes valeurs administratives et automatisations pour les types de lignes telles que routes, sentiers et autres entités linéaires. Le problème est qu'il y a beaucoup de sommets (nœuds, paires de coordonnées) sur une ligne, lequel utiliser pour l'astuce SQL ?<\/P><\/P>Il existe certaines méthodes SQL Geography pour manipuler le well-known-text d'une instance Geography line, mais aucune ne me donne une valeur de point médian, et elles ne se prêtent certainement pas bien à être utilisées dans un trigger.<\/P><\/P>Pour obtenir facilement une valeur de point médian d'une ligne à partir de Geography, vous aurez besoin des SQL Server Spatial Tools - Home<\/A> installés, ce qui est aussi simple que d'enregistrer une DLL via SQL sur votre instance de base de données - fonctionne sur 2008 et 2012.<\/P><\/P>Un point médian de ligne peut être interrogé comme suit:<\/P><\/P>SELECT dbo.LocateAlongGeog(SHAPE, SHAPE.STLength()\/2).Lat FROM [dbo].[SOMELINE<\/SPAN>]SELECT dbo.LocateAlongGeog(SHAPE, SHAPE.STLength()\/2).Long FROM [dbo].[SOMELINE<\/SPAN>]<\/PRE><\/P>En encapsulant cela dans un trigger pour remplir les champs LAT, LON et Elevation nous obtenons :<\/P><\/P>CREATE TRIGGER [dbo].[SOMELINE_GEO]ON [dbo].[SOMELINE<\/SPAN>]AFTER INSERT, UPDATE NOT FOR REPLICATIONAS BEGIN SET NOCOUNT ON; UPDATE p SET LON = CASE WHEN p.SHAPE IS NULL THEN p.STStartPoint.LON ELSE p.SHAPE.Long END, LAT = CASE WHEN p.SHAPE IS NULL THEN p.STStartPoint.LAT ELSE p.SHAPE.Lat END,ELEVATION = (SELECTpdata.getValueByLoc(1,p.SHAPE.Long,p.SHAPE.Lat) FROM [dbo].[DEM10MP]) FROM dbo.SOMELINE AS p INNER JOIN inserted AS i ON i.GlobalID = p.GlobalID ENDGO<\/PRE><\/P>Les polygones ne nécessitent pas la "fonction spéciale" et peuvent simplement être interrogés pour des valeurs médianes avec : <\/P><\/P>SELECT SHAPE.EnvelopeCenter().LatFROM [SOMEPOLYSELECT SHAPE.EnvelopeCenter().LongFROM [SOMEPOLY]<\/PRE><\/BODY><\/HTML>
<\/P>
Pour notre standard de données SIG, nous voulons également collecter les mêmes valeurs administratives et automatisations pour les types de lignes telles que routes, sentiers et autres entités linéaires. Le problème est qu'il y a beaucoup de sommets (nœuds, paires de coordonnées) sur une ligne, lequel utiliser pour l'astuce SQL ?<\/P>
Il existe certaines méthodes SQL Geography pour manipuler le well-known-text d'une instance Geography line, mais aucune ne me donne une valeur de point médian, et elles ne se prêtent certainement pas bien à être utilisées dans un trigger.<\/P>
Pour obtenir facilement une valeur de point médian d'une ligne à partir de Geography, vous aurez besoin des
Un point médian de ligne peut être interrogé comme suit:<\/P>
SELECT dbo.LocateAlongGeog(SHAPE, SHAPE.STLength()\/2).Lat FROM [dbo].[SOMELINE<\/SPAN>]SELECT dbo.LocateAlongGeog(SHAPE, SHAPE.STLength()\/2).Long FROM [dbo].[SOMELINE<\/SPAN>]<\/PRE><\/P>En encapsulant cela dans un trigger pour remplir les champs LAT, LON et Elevation nous obtenons :<\/P><\/P>CREATE TRIGGER [dbo].[SOMELINE_GEO]ON [dbo].[SOMELINE<\/SPAN>]AFTER INSERT, UPDATE NOT FOR REPLICATIONAS BEGIN SET NOCOUNT ON; UPDATE p SET LON = CASE WHEN p.SHAPE IS NULL THEN p.STStartPoint.LON ELSE p.SHAPE.Long END, LAT = CASE WHEN p.SHAPE IS NULL THEN p.STStartPoint.LAT ELSE p.SHAPE.Lat END,ELEVATION = (SELECTpdata.getValueByLoc(1,p.SHAPE.Long,p.SHAPE.Lat) FROM [dbo].[DEM10MP]) FROM dbo.SOMELINE AS p INNER JOIN inserted AS i ON i.GlobalID = p.GlobalID ENDGO<\/PRE><\/P>Les polygones ne nécessitent pas la "fonction spéciale" et peuvent simplement être interrogés pour des valeurs médianes avec : <\/P><\/P>SELECT SHAPE.EnvelopeCenter().LatFROM [SOMEPOLYSELECT SHAPE.EnvelopeCenter().LongFROM [SOMEPOLY]<\/PRE><\/BODY><\/HTML>
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.