Zamíchání scény, lámaní mé mysli. Dělej to, nedělej tamto, nemůžeš číst tu <\/SPAN>LINE? <\/SPAN>V Hey Neighbor? What's Your Value?<\/A> , Rasters, Pixels and Code Oh My!,<\/A> a Using SQL to Auto-Populate XY Values<\/A> jsem představil nějaké SQL triky pro automatizaci zadávání dat. Pravděpodobně jsem měl zmínit, že tyto metody většinou fungují jen na bodech....<\/P><\/P>Pro náš GIS datový standard chceme také sbírat stejné administrativní hodnoty a automatizaci pro typy linií jako jsou silnice, stezky a další lineární prvky. Problém je v tom, že na linii je hodně vrcholů (uzlů, párů souřadnic), který použít pro SQL triky?<\/P><\/P>Existují některé stávající SQL Geography metody pro manipulaci s well-known-text z instance Geography linie, ale žádná mi nedá hodnotu středu a rozhodně nejsou vhodné být součástí triggeru.<\/P><\/P>Pro snadné získání hodnoty středu linie z Geography budete potřebovat nainstalovat SQL Server Spatial Tools - Home<\/A>, což je tak jednoduché jako zaregistrovat DLL přes SQL na vaší databázové instanci - funguje na 2008 a 2012.<\/P><\/P>Střed linie lze dotazovat jako<\/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>Zabalením toho do triggeru pro vyplnění polí LAT, LON a Elevation dostaneme:<\/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>Polygony nevyžadují "speciální funkci" a jednoduše lze dotazovat středové hodnoty s:<\/P><\/P>SELECT SHAPE.EnvelopeCenter().LatFROM [SOMEPOLYSELECT SHAPE.EnvelopeCenter().LongFROM [SOMEPOLY]<\/PRE><\/BODY><\/HTML>
<\/P>
Pro náš GIS datový standard chceme také sbírat stejné administrativní hodnoty a automatizaci pro typy linií jako jsou silnice, stezky a další lineární prvky. Problém je v tom, že na linii je hodně vrcholů (uzlů, párů souřadnic), který použít pro SQL triky?<\/P>
Existují některé stávající SQL Geography metody pro manipulaci s well-known-text z instance Geography linie, ale žádná mi nedá hodnotu středu a rozhodně nejsou vhodné být součástí triggeru.<\/P>
Pro snadné získání hodnoty středu linie z Geography budete potřebovat nainstalovat
Střed linie lze dotazovat jako<\/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>Zabalením toho do triggeru pro vyplnění polí LAT, LON a Elevation dostaneme:<\/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>Polygony nevyžadují "speciální funkci" a jednoduše lze dotazovat středové hodnoty s:<\/P><\/P>SELECT SHAPE.EnvelopeCenter().LatFROM [SOMEPOLYSELECT SHAPE.EnvelopeCenter().LongFROM [SOMEPOLY]<\/PRE><\/BODY><\/HTML>
Přihlášení členové mohou přispívat, sledovat aktualizace a další. Nový zde? Zaregistrujte si bezplatný účet.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.