<\/HEAD>
結果から始めましょう:<\/P>
ロケーションの主要な質問の一つは、「分以内に誰に/何に到達できるか?」です。したがって、ArcGISはツール"Service Areas"<\/A>を備えたNetwork Analystを提供しています。指定された時間内に車で到達可能なエリア(他のモードも可能)を分析できます。複数の入力ポイントを使用することで、全体のエリアのパターンも分析できます。<\/X><\/P>通常のネットワークを使用すると、サービスエリアは日中変わりませんが、HEREデータに基づくArcGIS Onlineネットワークデータセットを使用することで、曜日と特定の時間帯の交通パターンも利用できます。交通パターンは15分単位で分析可能です。日中のサービスエリアを分析することで、その地域の交通状況について貴重な洞察が得られます:大きな違いは主に道路上の交通量が多いことを示します。総面積はネットワークの質も示し、大きな面積は車でのアクセス性が良いこと(高速道路網が密集していることが原因かもしれません)を示します。<\/P>
自動化された分析<\/H3>ジオプロセシングが好きなので、分析とアニメーションとしての可視化の自動化に興味がありました。そのため、このプロセスは2段階です。<\/P>まず、「StartPoints」という単純なポイントフィーチャクラスを作成し、「施設」の位置を保持し、それらをService Area Analysis Layerに追加しました:<\/P><SPAN class="comment token">#create Analysis Layer<\/SPAN>
arcpy<SPAN class="punctuation token">.<\/SPAN>na<SPAN class="punctuation token">.<\/SPAN>MakeServiceAreaAnalysisLayer<SPAN class="punctuation token">(<\/SPAN><SPAN class="string token"><SPAN>"<\/SPAN><A class="jive-link-external-small" href="https:\/\/community.esri.com\/external-link.jspa?url=https%3A%2F%2Fwww.arcgis.com%2F" target="_blank">https:\/\/www.arcgis.com\/<\/A><SPAN>"<\/SPAN><\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"BeatCity Service Layer"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"Driving Time"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"FROM_FACILITIES"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"5;10;15;20;25;30"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"05.01.1900 00:01:00"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"LOCAL_TIME_AT_LOCATIONS"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"POLYGONS"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"STANDARD"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"DISSOLVE"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"RINGS"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"100 Meters"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> None<SPAN class="punctuation token">,<\/SPAN> None<SPAN class="punctuation token">)<\/SPAN>
<SPAN class="comment token">#add locations from a point feature class<\/span>
arcpy<Span class=\"punctuation token\">.<\span>na<span class=\"punctuation token\">.<\span>AddLocations<span class=\"punctuation token\">(<\span><span class=\"string token\">\"BeatCity Service Layer\"</span>, <span class=\"string token\">\"Facilities\"</span>, <span class=\"string token\">\"StartPoints\"</span>, "Name Description <span class=\"comment token\">#;CurbApproach # 0;Attr_Minutes # 0;Attr_TravelTime # 0;Attr_Miles # 0;Attr_Kilometers # 0;Attr_TimeAt1KPH # 0;Attr_WalkTime # 0;Attr_TruckMinutes # 0;Attr_TruckTravelTime # 0;Breaks_Minutes # #;Breaks_TravelTime # #;Breaks_Miles # #;Breaks_Kilometers # #;Breaks_TimeAt1KPH # #;Breaks_WalkTime # #;Breaks_TruckMinutes # #;Breaks_TruckTravelTime # #", "5000 Meters", None, None, "MATCH_TO_CLOSEST", "APPEND", "SNAP", "5 Meters", "EXCLUDE", None)<span class=\"line-numbers-rows\"><span></span><span></span><span></span><span></span></span>次に、時間帯を反映するように時間を自動的に変更する必要があります。開始時間は「05.01.1900 00:00:00」で金曜日の深夜です。<\/p>プロパティには簡単にアクセスできます。私は3Dシーンで作業しているので、これがArcGIS Proプロジェクト内で唯一のマップオブジェクトです:<span class=\"comment token\">#get the project<\/span>
doc = arcpy.mp.ArcGISProject('current')
<span class=\"comment token\">#get the map<\/span>
map = doc.listMaps()[0]
<span class=\"comment token\">#get the service area layer<\/span>
sa_layer = map.listLayers("BeatCity Service Layer")[0]
<span class=\"comment token\">#Get the solver properties object from the service area layer<\/span>
solver_props = arcpy.na.GetSolverProperties(sa_layer)<span class=\"line-numbers-rows\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>これでプロパティにアクセスできるので、簡単に繰り返し処理してサービスレイヤーを解決できます。結果は3Dフィーチャクラスとしてエクスポートされます:<span class=\"keyword token\">import</span> os
<span class=\"keyword token\">for</span> hour <span class=\"keyword token\">in</span> range(0,24):
<span class=\"comment token\">#create the datetime object</span>
date = datetime.datetime(1900, 01, 05, hour, 0, 0)
<span class=\"comment token\">#we will use the string-version later on </span>
datestring = date.strftime("%d.%m.%Y %H:%M")
<span class=\"comment token\">#set the time of the day and the date:</span>
solver_props.timeOfDay = date
<span class=\"comment token\">#solve the network layer</span>
arcpy.na.Solve("BeatCity Service Layer", "SKIP", "TERMINATE", None, None)
arcpy.AddMessage("copying hour" + str(hour))
<span class=\"comment token\">#as we would like to visualize this in 3D</span>
arcpy.ddd.FeatureTo3DByAttribute(r"BeatCity Service Layer\\Polygons" class="punctuation token">,</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace <SPAN class="operator token">+</SPAN> os<SPAN class="punctuation token">.</SPAN>sep <SPAN class="operator token">+</SPAN> <SPAN class="string token">"Friday_"</SPAN> <SPAN class="operator token">+</SPAN> str<SPAN class="punctuation token">(</SPAN>hour<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"ToBreak"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"ToBreak"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#必要に応じて後で使用するために日付のフィールドを追加します:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddField_management<SPAN class="punctuation token">(</SPAN>arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace <SPAN class="operator token">+</SPAN> os<SPAN class="punctuation token">.</SPAN>sep <SPAN class="operator token">+</SPAN> <SPAN class="string token">"Friday_"</SPAN> <SPAN class="operator token">+</SPAN> str<SPAN class="punctuation token">(</SPAN>hour<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"datetime"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"Date"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">8</SPAN><SPAN class="punctuation token">,</SPAN> <SPAnclass="string token">"datetime"</span><spanclass= "punctuationtoken ">, </span><spanclass= "stringtoken ">"NULLABLE" </span><spanclass= "punctuationtoken ">, </span><spanclass= "stringtoken ">"REQUIRED" </span><spanclass= "punctuationtoken ">)</span>
arcpy<SPAnclass= "punctuationtoken ">.management.CalculateField( </span>arcpy<SPAnclass= "punctuationtoken ">.env.workspace + os.sep + </span><spanclass= "stringtoken ">"Friday_" </span><spanclass= "operatortoken ">+ </span>str(hour)<spanclass= "punctuationtoken ">, </span><spanclass= "stringtoken ">"datetime" </span><spanclass= "punctuationtoken ">, </span><spanclass= "stringtoken ">'"' </span><spanclass= "operatortoken ">+ </span>datestring<spanclass= "operatortoken ">+ </span><spanclass= "stringtoken ">'"'</span><spanclass= "punctuationtoken ">, </span><spanclass= "stringtoken ">"PYTHON_9.3"</span><spanclass= "punctuationtoken ">)</span><SPAnclass= "line-numbers-rows"><SPAn><EMOJI_1></SPAn><SPAn><EMOJI_2></SPAn><SPAn><EMOJI_3></SPAn><SPAn><EMOJI_4></SPAn><SPAn><EMOJI_5></SPAn><SPAn><EMOJI_6></SPAn><SPAn><EMOJI_7></SPAn><SPAn><EMOJI_8></SPAn><SPAn><EMOJI_9></SPAn><SPAn><EMOJI_10></SPAn><SPAn><EMOJI_11></SPAn><SPAn><EMOJI_12></SPAn><SPAn><EMOJI_13></SPAn><SPAn><EMOJI_14></SPAn><SPAn><EMOJI_15></SPAn><SPAn><EMOJI_16></SPAn></Span>
警告: レイヤーの処理にはクレジットが消費されます!
結果は別々のフィーチャクラスに保存されますが、これは最適ではありません。これが現時点での私の解決策です。
可視化とエクスポート
現在、別々のレイヤーがあるので、すべてに同じスタイルを適用し、各レイヤーの表示を切り替え、エクスポート前に作成する必要があるレイアウトをエクスポートしています!
私のレイアウトは次のような感じです:

私はレイアウトにデフォルトテキスト「Friday」を持つテキストシンボルを追加して、png結果にタイムスタンプもエクスポートしました。さらに都市名のマーカーシンボルを追加し、押し出しレイヤーの深度効果を高めるためにビューを少し傾けました。しかしまず、自動エクスポート用にすべてのレイヤーをかなり単純な方法で無効にする必要があります:
<Span class = "comment token">#すべてのレイヤーを非選択にする:</Span>
for layer in map_obj.listLayers():
if layer.name[0] == "F":
layer.visible = False<<EMOJI_17> ><Span class = "line-numbers-rows"><Span ><EMOJI_18 ></Span ><Span ><EMOJI_19 ></Span ><Span ><EMOJI_20 ></Span ><Span ><EMOJI_21 ></Span ></Span ></CODE ></PRE >
<P >これでレイヤーを繰り返し処理し、一意値レンダラーを適用し、境界線なしのポリゴンになるようシンボルを変更し、押し出し設定を行い、テキスト要素を変更して正しいタイムスタンプを取得し、レイアウトをpngとしてエクスポートできます:</P >
<PRE class = "lia-code-sample line-numbers language-none"><CODE >for hour in range(0, 24):
poly_layer = map_obj.listLayers("Friday_" + str(hour))[0]
poly_layer.visible = True
symbology = poly_layer.symbology
symbology.updateRenderer('UniqueValueRenderer')
symbology.renderer.fields = ['ToBreak']
symbology.renderer.colorRamp = doc.listColorRamps('Green-Blue (6 Classes)')[0]
#すべてのシンボルを変更:
for sym in symbology.renderer.groups[0].items:
sym.symbol.outlineColor = {'RGB': [255, 255, 255, 0]}
sym.symbol.size <SPAN class="operator token">=<\/SPAN> <SPAN class="number token">0.0<\/SPAN>
poly_layer<SPAN class="punctuation token">.<\/SPAN>symbology <SPAN class="operator token">=<\/SPAN> symbology
<SPAN class="comment token">#extrude:<\/SPAN>
poly_layer<SPAN class="punctuation token">.<\/SPAN>extrusion<SPAN class="punctuation token">(<\/SPAN><SPAN class="string token">'BASE_HEIGHT'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"3000-100*[ToBreak]"<\/SPAN><SPAN class="punctuation token">)<\/SPAN>
<SPAN class="comment token">#export:<\/SPAN>
datestring <SPAN class="operator token">=<\/SPAN> <SPAN class="string token">"2017\/12\/08 "<\/SPAN> <SPAN class="operator token">+<\/SPAN> str<SPAN class="punctuation token">(<\/SPAN>hour<SPAN class="punctuation token">)<\/SPAN> <SPAN class="operator token">+<\/SPAN> <SPAN class="string token">":00"<\/SPAN>
<SPAN class="keyword token">for<\/SPAN> lyt <SPAN class="keyword token">in<\/SPAN> doc<SPAN class="punctuation token">.<\/SPAN>listLayouts<SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
<SPAN class="keyword token">for<\/SPAN> elm <SPAN class="keyword token">in<\/SPAN> lyt<SPAN class="punctuation token">.<\/SPAN>listElements<SPAN class="punctuation token">(<\/SPAN><SPAN class="string token">"TEXT_ELEMENT"<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
<SPAN class="keyword token">if<\/SPAN> elm<SPAN class="punctuation token">.<\/span>text<span class="punctuation token">[</span><span class="number token">0</span><span class="punctuation token">]</span> <span class="operator token">==</span> <span class="string token">"2"</span><span class="punctuation token">:</span>
elm<span class="punctuation token">.</span>text <span class="operator token">=</span> datestring
lyt<span class="punctuation token">.</span>exportToPNG<span class="punctuation token">(</span>arcpy<span class="punctuation token">.</span>env<span class="punctuation token">.</span>workspace <span class="operator token">+</span> os<span class="punctuation token">.</span>sep <span class="operator token">+</span> <span class="string token">"friday_seattle_final"</span> <span class="operator token">+</span> str<span class="punctuation token">(</span>hour<span class="punctuation token">)</span> <span class="operator token">+</span> <span class="string token">".png"</span><span class="punctuation token">,</span> <span class="number token">300</span><span class="punctuation token">)</span>
poly_layer<span class="punctuation token">.</span>visible <span class="operator token">=</span> <span class="token boolean">False</span><span class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span>></pan></pan>残念ながら、Lenovo X270(専用GPUなし)でのレンダリングおよびエクスポートの全プロセスは、シーンごとに約2.5分かかります。<\/P>
結果は複数のpngファイルで、これらはウェブ上のいくつかのgif作成サイトやオープンソースの<A href=\"https:\/\/www.gimp.org\/tutorials\/Simple_Animations\/\