<\/HEAD>
Commençons par le résultat :<\/P>
Une des questions majeures d'un emplacement est : Que\/Qui puis-je atteindre en minutes ? C'est pourquoi ArcGIS propose Network Analyst avec son outil "Zones de service"<\/A>. Nous pouvons analyser la zone accessible en voiture (d'autres modes sont possibles) dans une période de temps donnée. En utilisant plusieurs points d'entrée, nous pouvons également analyser les modèles dans une zone entière.<\/X><\/P>L'utilisation d'un réseau normal ne modifierait pas les zones de service pendant la journée, mais en utilisant le jeu de données réseau ArcGIS Online basé sur les données HERE, nous pouvons également utiliser les modèles de trafic pour un jour de la semaine et une heure donnée. Les modèles de trafic peuvent être analysés sur une période de 15 minutes. Analyser les zones de service au cours d'une journée fournit un aperçu précieux de la situation du trafic dans une région : de grandes différences indiquent avant tout un volume de trafic plus élevé sur les routes. La superficie totale indique également la qualité du réseau : de grandes zones indiquent une meilleure accessibilité en voiture (peut-être causée par un réseau dense de routes à grande vitesse).<\/P>
Analyse automatisée<\/H3>Comme j'adore le géotraitement, je me suis intéressé à l'automatisation de l'analyse et à la visualisation sous forme d'animation. Le processus est donc en deux étapes.<\/P>Tout d'abord, j'ai créé une classe d'entités ponctuelles simple appelée "StartPoints" qui contient les emplacements des "facilities" et je les ai ajoutés à la couche d'analyse des zones de service :<\/P><SPAN class="comment token">#créer la couche d'analyse<\/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">#ajouter des emplacements depuis une classe d'entités ponctuelles<\/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=\"punctuation token\">,<\span> <Span class=\"string token\">\"Facilities\"<\span><Span class=\"punctuation token\">,<\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><Span class=\"line-numbers-rows\"><Span><\/span><Span><\/span><Span><\/span><Span><\/span><\/Span><\/CODE><\/PRE><P>Maintenant, nous devons modifier automatiquement les heures pour refléter les moments de la journée. L'heure de départ est '05.01.1900 00:00:00' qui est un vendredi et l'heure est minuit.<\/P><P>Nous pouvons accéder aux propriétés assez facilement. Comme je travaille avec une scène 3D, c'est mon seul objet carte dans mon projet ArcGIS Pro :<\/P><PRE class="lia-code-sample line-numbers language-none"><CODE><Span class=\"comment token\">#obtenir le projet<\/span>
doc = arcpy.mp.ArcGISProject('current')
<span class=\"comment token\">#obtenir la carte<\/span>
map = doc.listMaps()[0]
<span class=\"comment token\">#obtenir la couche zone de service<\/span>
sa_layer = map.listLayers("BeatCity Service Layer")[0]
<span class=\"comment token\">#Obtenir l'objet propriétés du solveur depuis la couche zone de service<\/span>
solver_props = arcpy.na.GetSolverProperties(sa_layer)<EMOJI_5><Span class=\"line-numbers-rows\"><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>Puisque nous avons maintenant accès aux propriétés, nous pouvons facilement itérer et résoudre la couche de service. Le résultat sera exporté comme une classe d'entités 3D :<\/P>import os
for hour in range(0,24):
<span class=\"comment token\">#créer l'objet datetime<\/span>
date = datetime.datetime(1900, 01, 05 , hour, 0, 0)
<span class=\"comment token\">#nous utiliserons la version chaîne plus tard <\/span>
datestring = date.strftime("%d.%m.%Y %H:%M")
<span class=\"comment token\">#définir l'heure et la date du jour:<\/span>
solver_props.timeOfDay = date
<span class=\"comment token\">#résoudre la couche réseau<\/span>
arcpy.na.Solve("BeatCity Service Layer", "SKIP", "TERMINATE", None, None)
arcpy.AddMessage("copie heure " + str(hour))
<span class=\"comment token\">#comme nous souhaitons visualiser cela en 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">#et ajouter un champ avec la date pour une utilisation ultérieure si souhaité :</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< /span>.CalculateField<spanclass= "punctuationtoken ">(</span>arcpy<spanclass= "punctuationtoken ">.env</span>.workspace <spanclass= "operatortoken ">+</span> os<spanclass= "punctuationtoken ">.</span>sep <spanclass= "operatortoken ">+</span> <spanclass= "stringtoken ">"Friday_"</span> <spanclass= "operatortoken ">+</span> str<spanclass= "punctuationtoken ">(</span>hour<spanclass= "punctuationtoken ">)</span><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></spans>
Avertissement : La résolution de la couche consomme des crédits ! Les résultats sont stockés dans des classes d'entités séparées ce qui n'est pas optimal mais c'est ma solution pour le moment. Pour Visualisation et Exportation
Comme nous avons maintenant des couches séparées, j'applique le même style à toutes et je déclenche la visibilité de chaque couche et j'exporte la mise en page qui doit être créée avant l'exportation !
Ma mise en page ressemble à ceci :

J'ai ajouté un symbole de texte avec un texte par défaut « Friday » dans la mise en page pour exporter également l'horodatage dans le résultat png. De plus, j'ai ajouté un symbole de marqueur avec le nom des villes à la mise en page et incliné un peu la vue pour augmenter l'effet de profondeur pour la couche extrudée. Mais d'abord, nous devons désactiver toutes les couches pour notre exportation automatisée avec une approche assez peu sophistiquée :
<Span class = "comment token">#désélectionner toutes les couches :</Span>
<Span class = "keyword token">for </Span > layer <Span class = "keyword token">in </Span > map_obj<spanclass= "punctuationtoken ">.listLayers()</ span >:
<spanclass= "keywordtoken ">if </ span > layer<spanclass= "punctuationtoken ">.name[0]</ span > == < spanclass = <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><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><EMOJI_17><\/span><span><EMOJI_18><\/span><span><EMOJI_19><\/span><span><EMOJI_20><\/span><span><EMOJI_21><\/span><span><EMOJI_22></spaN></sPAN>
MALHEUREUSEMENT, le processus complet de rendu et d'exportation prend environ 2,5 minutes par scène sur mon Lenovo X270 sans GPU dédié.<\/P>
Le résultat est une série de pngs qui peuvent être convertis en gif en utilisant plusieurs sites de création de gif sur le web ou l'éditeur d'images open source image editor GIMP.< \/A >< \/P >
Le résultat ressemble à ceci :< \/P >
< \/P >
< IMG __jive_id = "391736 " alt = " " cLass = "image-3 jive-image j-img-original " src = "https:\/ \/us.v-cdn.net \/6038851 \/uploads \/legacyfs \/online \/391736_GIFMaker.org_umb1HC.gif " style = "width: 620px; height: 878px; " \/ >< \/CENTER >
Vous pouvez également concaténer toutes les entités polygonales du résultat, ajouter l'attribut datetime, remplir le temps utilisé, activer la gestion du temps pour la classe d'entités, et
utiliser les options d'animation dans ArcGIS Pro pour exporter toute l'animation sous forme de GIF :< \/P >
< IFRAME cLass = "embedly-embed " src = "https:\/ \/www.youtube.com \/embed \/y3HtHbBuCvE?feature=oembed " width = "854 " height = "480 " scrolling = "no " frameborder = "0 " allowfullscreen >< \/IFRAME > Le résultat est assez similaire à l'exportation fichier par fichier. Cependant, vous n'avez pas toutes les possibilités de la vue mise en page. Mais le résultat reste assez bon (buffers ajoutés de 5, 10, 15, 20 mil) :< \/P >
< IMG __jive_id = "391767 " alt = " " cLass = "jive-image j-img-centered image-4 j-img-original " src = "https:\/ \/us.v-cdn.net \/6038851 \/uploads \/legacyfs \/online \/391767_Map_3D_small_ani_big.gif " style = "width: 620px; height: 465px; display: block; margin-left: auto; margin-right: auto; " \/ >< \/P >< \/BODY >< \/HTML >