<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GIS, UNIGIS und andere Kleinigkeiten &#187; Analyse</title>
	<atom:link href="http://blog.peterschaer.ch/tag/analyse/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.peterschaer.ch</link>
	<description>Jupiter and beyond the Infinite</description>
	<lastBuildDate>Wed, 12 Oct 2011 16:50:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Geometric Network in ArcGIS</title>
		<link>http://blog.peterschaer.ch/2006/07/03/geometric-network-in-arcgis/</link>
		<comments>http://blog.peterschaer.ch/2006/07/03/geometric-network-in-arcgis/#comments</comments>
		<pubDate>Mon, 03 Jul 2006 07:28:22 +0000</pubDate>
		<dc:creator>Peter Schär</dc:creator>
				<category><![CDATA[GIS]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[ArcGIS]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Trace]]></category>

		<guid isPermaLink="false">http://www.peterschaer.ch/blog/?p=164</guid>
		<description><![CDATA[<p>Letzthin war ich ziemlich stark damit beschäftigt, mit ArcGIS Analysen auf einem Gewässernetzwerk durchzuführen. ArcGIS kennt zwei Arten von Netzwerken: zum einen die geometrischen Netzwerke und zum anderen die komplexeren topologischen Netzwerke, für die die &#8220;Network Analyst Extension&#8221; benötigt wird. In diesem Fall reichte für die Analyse ein geometrisches Netzwerk aus. Konkret musste ich für [...]]]></description>
			<content:encoded><![CDATA[<p>Letzthin war ich ziemlich stark damit beschäftigt, mit ArcGIS Analysen auf einem Gewässernetzwerk durchzuführen. ArcGIS kennt zwei Arten von Netzwerken: zum einen die <a href="http://webhelp.esri.com/arcgisdesktop/9.1/index.cfm?ID=1542&#038;TopicName=What%20is%20a%20geometric%20network%3F&#038;rand=325&#038;pid=1541">geometrischen Netzwerke</a> und zum anderen die komplexeren <a href="http://webhelp.esri.com/arcgisdesktop/9.1/index.cfm?TopicName=What%20is%20a%20network%20dataset%3F">topologischen Netzwerke</a>, für die die &#8220;<a href="http://www.esri.com/software/arcgis/extensions/networkanalyst/index.html">Network Analyst Extension</a>&#8221; benötigt wird. In diesem Fall reichte für die Analyse ein geometrisches Netzwerk aus. Konkret musste ich für einen Satz von Punkten auf dem Netzwerk (in diesem Falle <a href="http://www.umwelt-schweiz.ch/buwal/de/fachgebiete/gewaesserschutz/abwasser/kommunal/index.html">Kläranlagen</a>) den nächstliegenden <a href="http://www.bwg.admin.ch/themen/wasser/d/q347.htm">Q347</a>-Punkt ober- und unterhalb herausfinden. Dies konnte ich relativ leicht mit einer Tracing-Funktion erreichen. Dazu musste ich nur das Developer Sample &#8220;<a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?URL=/arcobjects/9.1/Samples/Network/Utility_Network_Analysis/Trace_Tasks/Next_Upstream_Device_Task/NextUpstreamDevicePrj.htm">Next Upstream Device Task</a>&#8221; umschreiben und anpassen. Dies arbeitet hauptsächlich mit dem <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?URL=/arcobjects/9.1/ComponentHelp/esriNetworkAnalysis/ITraceFlowSolver.htm">ITraceFlowSolver</a>-Interface und dort mit der Funktion <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?URL=/arcobjects/9.1/ComponentHelp/esriNetworkAnalysis/ITraceFlowSolver_FindFlowEndElements.htm">FindFlowEndElements</a>. Das Resultat dieser Funktion können allerdings mehrere Elemente sein (Flüsse vereinigen sich und können sich u.U. auch verzweigen), aus denen ich dann das am nächsten liegende herausfiltern musste (unter Einbezug der <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?URL=/arcobjects/9.1/ComponentHelp/esriNetworkAnalysis/ITraceFlowSolver_FindPath.htm">FindPath</a>-Funktion des ITraceFlowSolver-Interfaces).</p>
<p>So weit so gut. Etwas komplizierter war die zweite Aufgabe. Für jeden der oben erwähnten Punkte musste ich berechnen, wieviele Kilometer Gewässernetz oberhalb liegen. Hierfür gibt es im <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?URL=/arcobjects/9.1/ComponentHelp/esriNetworkAnalysis/ITraceFlowSolver2.htm">ITraceFlowSolver2</a>-Interface die Funktion <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?URL=/arcobjects/9.1/ComponentHelp/esriNetworkAnalysis/ITraceFlowSolver2_FindAccumulation.htm">FindAccumulation</a>. Diese gibt als Resultat alle jene Gewässerabschnitte zurück, die oberhalb eines Punktes liegen. Hier begannen nun die Probleme. Im Prinzip ging es nun nur noch darum, die Länge aller jener Gewässerabschnitte zu berechnen. Die FindAccumulation-Funktion gibt nicht die normale Feature-ID der Gewässerabschnitte zurück sondern die Network-ID, welche nicht identisch zu sein braucht. Nun habe ich nach kurzer Durchsicht des Objektmodells eine vielversprechende Funktion gefunden. Das <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?url=/arcobjects/9.1/ComponentHelp/esriGeoDatabase/IGeometricNetwork.htm">IGeometricNetwork</a>-Interface bietet die Funktion <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?URL=/arcobjects/9.1/ComponentHelp/esriGeoDatabase/IGeometricNetwork_GeometryForEdgeEID.htm">GeometryForEdgeID</a>, welche mir für jede Network-ID die dazugehörige Geometrie und damit auch die Länge zurückgibt. Und tatsächlich, damit konnte ich die gesuchte Gewässernetzlänge berechnen. Doch bei Punkten die relativ weit unten im Netzwerk liegen (z.B. am Unterlauf von Rhein, Aare oder Rhone) und somit eine sehr grosse Gewässernetzlänge oberhalb aufweisen, dauerte die Berechnung ziemlich lange (bis zu einer Stunde) oder ArcMap stürzte gar ohne Fehlermeldung ab. Zuerst vermutete ich das Probleme in der FindAccumulation-Funktion, da ich mir schon vorstellen konnte, dass auf dem recht detaillierten Gewässernetz eine solche Funktion recht viel Zeit in Anspruch nehmen konnte. In der &#8220;Utility Network Analyst Toolbar&#8221; gibt es jedoch den Task &#8220;Find Upstream Accumulation&#8221;, mit dem ich ein paar dieser problematischen Berechnungen von Hand durchführte. Und dort dauerte dies jeweils nur wenige Sekunden, also konnte die Tracing-Funktion nicht das Problem sein. Damit wendete ich mich der GeometryForEdgeID-Funktion zu, die nun der Übeltäter zu sein schien. Als Ersatz fand ich das <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?url=/arcobjects/9.1/ComponentHelp/esriNetworkAnalysis/IEIDHelper.htm">IEIDHelper</a>-Interface, mit dem man für jede Network-ID ein <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?url=/arcobjects/9.1/ComponentHelp/esriNetworkAnalysis/IEIDInfo.htm">IEIDInfo</a>-Interface holen kann, welches das gesuchte <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?URL=/arcobjects/9.1/ComponentHelp/esriNetworkAnalysis/IEIDInfo_Geometry.htm">Geometry</a>-Attribut aufweist. Ein kurzer Test zeigte mir, dass auf diese Weise die Berechnung der Gewässernetzlänge nur wenige Sekunden dauerte. Dieser Weg war also der deutlich schnellere. Wahrscheinlich liegt es daran, dass die ursprünglich gebrauchte GeometryForEdgeID-Funktion im ganzen Netzwerk nach der übergebenen Network-ID sucht (keine Ahnung, ob hier ein Index existiert) &#8212; immerhin besteht das Netzwerk aus mehreren Hunderttausend Abschnitten &#8211;, was deutlich langsamer ist als der Weg über das IEIDInfo-Interface.</p>
<p>Langer Rede kurzer Sinn: es lohnt sich, das <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?URL=/arcobjects/9.1/ArcGISDesktop/AllDesktopOMDs.pdf">Arcobjects-Objektmodell</a> sehr genau zu studieren, und nicht immer die erstbeste Lösung zu verwenden. Meistens gibt es in ArcObjects immer mehrere Wege zum Ziel, die Herausforderung ist dann jeweils, den geeignetsten zu finden.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.peterschaer.ch/2006/07/03/geometric-network-in-arcgis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

