Die meisten (eigentlich alle) meiner GIS-Daten haben das, was ich die "Mickey Mouse"-Attributwert-Anforderung nenne: Jede Feature-Class hat ein paar Attributfelder, die langweilige Informationen enthalten, wie z.B. administrative Grenzen (in welchem Bundesstaat, Landkreis sich dieser Punkt befindet). In der Vergangenheit war ich sehr stolz auf die ausgefeilten Attributdomänen, die ich erstellt habe, damit Dateneditoren auswählen können, in welchem (County, State, USGS Topo Quad) ihr Datenpunkt liegt.<\/P>
<\/P>
Niemand benutzt sie.<\/P>
Daten-Eingabe kostet Zeit und Arbeit, und wie die meisten von uns müssen wir uns auf das Wesentliche konzentrieren (was an diesem Punkt passiert ist) und haben nicht viel Zeit für administrative Dateneingabe.<\/P>
Bis ein Bericht fällig ist, der die Aufteilung der Datenwerte nach (Bundesstaat, Landkreis oder Wassereinzugsgebiet) erfordert.<\/P>
In Using SQL to Auto-Populate XY Values<\/A> habe ich beschrieben, wie man einen Trigger verwendet, um die Befüllung von GPS-Koordinaten mit dem aus der Geography-Spalte gezogenen Well-Known Text zu automatisieren. Es gibt keinen Grund, warum wir das nicht auf einige weitere Datenwartungsaufgaben ausweiten können.<\/P><\/P>In diesem Beispiel habe ich folgende administrative Grenzpolygon-Feature-Classes, alle konfiguriert mit dem "Geography"-Speichertyp und SRID 4629 in derselben SDE-Datenbank.<\/P>GRSM_COUNTIES: Der Name des Countys wird im Feld County eingetragen;<\/LI>GRSM_States: Der Name des Bundesstaates wird im Feld State eingetragen;<\/LI>GRSM_Sub_Ranger_Districts: Der Name des Ranger-Distrikts wird im Feld PARKDISTRICT eingetragen;<\/LI>USGS_24K_TOPOMAP_BOUNDARIES: Der Name des USGS Quads wird im Feld QuadName eingetragen;<\/LI>WATERSHEDS: Der Name des HUC 12 Wassereinzugsgebiets wird im Feld Watershed eingetragen.<\/LI><\/LI><\/OL>Unsere Datenrichtlinie besagt, dass jeder neue Datenpunkt mit dem "Name"-Wert jedes der 5 Polygone versehen wird, in denen er sich befindet. Stellen Sie sich die Begeisterung der Dateneditoren vor, wenn ihnen gesagt wird, dass sie für jeden neuen Punkt, den sie hinzufügen oder bearbeiten, fünfmal einen Wert aus einer Auswahlliste wählen müssen!<\/P><\/P>Als Erweiterung von Using SQL to Auto-Populate XY Values<\/A> können wir den neuen oder aktualisierten Punkt räumlich mit jedem der 5 Polygone verbinden und den erforderlichen Wert aus dem Polygon holen und in das richtige Attributfeld schreiben.<\/P><\/P>ALTER TRIGGER [dbo].[TEST_GEOGRAPHY]ON [dbo].[TEST]\/****** feuert bei Einfügungen und Aktualisierungen ******\/\/****** deaktiviert Trigger bei aktivierter SQL-Replikation oder Spiegelung ******\/after INSERT,UPDATE NOT FOR REPLICATIONAS BEGIN SET NOCOUNT ON; UPDATE p SET \/****** hypothetisch könnten wir lat/lon als Text eingeben und ein Geography-Objekt erstellen ******\/ 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, \/****** üblicher Fall: Punkt wird mit ARC erstellt und LAT/LON als Text gecastet ******\/\/****** vom Geography-Objekt ******\/ 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) FROM TEST AS p \/****** erlaubt Aktualisierung von lat/lon bei Update ******\/ 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; LEFT OUTER JOIN GRSM_States AS e .& 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>Es gibt keine Begrenzung für die Anzahl der Joins, die Sie verwenden können, um räumliche Abfragen zu automatisieren, die Attributwerte aktualisieren. Denken Sie nur daran, dass beide Feature-Classes im Join denselben Speichertyp verwenden müssen.<\/P><\/P>Aber was ist, wenn Sie dies auf vorhandene Daten anwenden möchten? Nach dem Erstellen des Triggers könnten Sie eine einmalige Abfrage ausführen, um bestehende Werte zu aktualisieren. Dieses Beispiel verwendet den Geometry-Speichertyp:<\/P><\/P><\/P>use GRSMupdate GRSM_TRAILSset CONG_DIST = CONGRESSIONALDISTRICTS.NAMELSADfrom GRSM_TRAILSinner join CONGRESSIONALDISTRICTSon grsm_trails.location_id = grsm_trails.location_idwhere (CONGRESSIONALDISTRICTS.Shape.STIntersection(grsm_trails.Shape).STDimension() = 1);<\/PRE><\/P><\/P>Dies ist ein persönlicher Blog und empfiehlt, unterstützt oder befürwortet nicht die oben beschriebenen Methoden. Die Änderung von Daten mit SQL außerhalb des ESRI-Softwarestapels wird natürlich nicht unterstützt und sollte ohne gründliches Verständnis und Notfallwiederherstellungsplan nicht auf eine Produktionsdatenbank angewendet werden.<\/EM><\/P><\/BODY><\/HTML>
In diesem Beispiel habe ich folgende administrative Grenzpolygon-Feature-Classes, alle konfiguriert mit dem "Geography"-Speichertyp und SRID 4629 in derselben SDE-Datenbank.<\/P>
Unsere Datenrichtlinie besagt, dass jeder neue Datenpunkt mit dem "Name"-Wert jedes der 5 Polygone versehen wird, in denen er sich befindet. Stellen Sie sich die Begeisterung der Dateneditoren vor, wenn ihnen gesagt wird, dass sie für jeden neuen Punkt, den sie hinzufügen oder bearbeiten, fünfmal einen Wert aus einer Auswahlliste wählen müssen!<\/P>
Als Erweiterung von
ALTER TRIGGER [dbo].[TEST_GEOGRAPHY]ON [dbo].[TEST]\/****** feuert bei Einfügungen und Aktualisierungen ******\/\/****** deaktiviert Trigger bei aktivierter SQL-Replikation oder Spiegelung ******\/after INSERT,UPDATE NOT FOR REPLICATIONAS BEGIN SET NOCOUNT ON; UPDATE p SET \/****** hypothetisch könnten wir lat/lon als Text eingeben und ein Geography-Objekt erstellen ******\/ 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, \/****** üblicher Fall: Punkt wird mit ARC erstellt und LAT/LON als Text gecastet ******\/\/****** vom Geography-Objekt ******\/ 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) FROM TEST AS p \/****** erlaubt Aktualisierung von lat/lon bei Update ******\/ 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; LEFT OUTER JOIN GRSM_States AS e .& 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>Es gibt keine Begrenzung für die Anzahl der Joins, die Sie verwenden können, um räumliche Abfragen zu automatisieren, die Attributwerte aktualisieren. Denken Sie nur daran, dass beide Feature-Classes im Join denselben Speichertyp verwenden müssen.<\/P><\/P>Aber was ist, wenn Sie dies auf vorhandene Daten anwenden möchten? Nach dem Erstellen des Triggers könnten Sie eine einmalige Abfrage ausführen, um bestehende Werte zu aktualisieren. Dieses Beispiel verwendet den Geometry-Speichertyp:<\/P><\/P><\/P>use GRSMupdate GRSM_TRAILSset CONG_DIST = CONGRESSIONALDISTRICTS.NAMELSADfrom GRSM_TRAILSinner join CONGRESSIONALDISTRICTSon grsm_trails.location_id = grsm_trails.location_idwhere (CONGRESSIONALDISTRICTS.Shape.STIntersection(grsm_trails.Shape).STDimension() = 1);<\/PRE><\/P><\/P>Dies ist ein persönlicher Blog und empfiehlt, unterstützt oder befürwortet nicht die oben beschriebenen Methoden. Die Änderung von Daten mit SQL außerhalb des ESRI-Softwarestapels wird natürlich nicht unterstützt und sollte ohne gründliches Verständnis und Notfallwiederherstellungsplan nicht auf eine Produktionsdatenbank angewendet werden.<\/EM><\/P><\/BODY><\/HTML>
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registrieren Sie ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.