<\/HEAD>
Vamos começar com o resultado:<\/P>
Uma das principais perguntas sobre um local é: O que/Quem posso alcançar em minutos? Portanto, o ArcGIS oferece o Network Analyst com sua ferramenta "Áreas de Serviço"<\/A>. Podemos analisar a área alcançável de carro (outros modos são possíveis) em um determinado período de tempo. Usando vários pontos de entrada, também podemos analisar padrões em toda uma área.<\/X><\/P>Usar uma rede normal não alteraria as áreas de serviço durante o dia, mas usando o conjunto de dados da rede ArcGIS Online baseado nos dados HERE, também podemos usar os padrões de tráfego para um dia da semana e um horário específico. Os padrões de tráfego podem ser analisados em um período de 15 minutos. Analisar as áreas de serviço durante o dia fornece uma visão valiosa da situação do tráfego em uma região: grandes diferenças indicam principalmente maior volume de tráfego nas ruas. A área total também indica a qualidade da rede: áreas grandes indicam melhor acessibilidade usando o carro (talvez causada por uma rede densa de ruas de alta velocidade).<\/P>
Análise Automatizada<\/H3>Como eu adoro geoprocessamento, estava interessado na automação da análise e na visualização como uma animação. O processo é, portanto, dividido em duas etapas.<\/P>Primeiro, criei uma classe de feição pontual simples chamada "StartPoints" que contém as localizações das "facilidades" e as adicionei à Camada de Análise da Área de Serviço:<\/P>#criar Camada de Análise
arcpy.na.MakeServiceAreaAnalysisLayer("https:\/\/www.arcgis.com\/", "BeatCity Service Layer", "Driving Time", "FROM_FACILITIES", "5;10;15;20;25;30", "05.01.1900 00:01:00", "LOCAL_TIME_AT_LOCATIONS", "POLYGONS", "STANDARD", "DISSOLVE", "RINGS", "100 Meters", None, None)
#adicionar localizações a partir de uma classe de feição pontual
arcpy.na.AddLocations("BeatCity Service Layer", "Facilities", "StartPoints", "Name Description #;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)<EMOJI_0>
<EMOJI_1><EMOJI_2><EMOJI_3><EMOJI_4>Agora precisamos alterar os horários automaticamente para refletir os horários do dia. O horário inicial é '05.01.1900 00:00:00', que é uma sexta-feira e o horário é meia-noite.<\/P>Pode-se acessar as propriedades com bastante facilidade. Como estou trabalhando com uma cena 3D, este é meu único objeto mapa no meu projeto ArcGIS Pro:<\/P>#obter o projeto
doc = arcpy.mp.ArcGISProject('current')
#obter o mapa
map = doc.listMaps()[0]
#obter a camada da área de serviço
sa_layer = map.listLayers("BeatCity Service Layer")[0]
#Obter o objeto propriedades do solver da camada da área de serviço
solver_props = arcpy.na.GetSolverProperties(sa_layer)<EMOJI_5>
<EMOJI_6><EMOJI_7><EMOJI_8><EMOJI_9><EMOJI_10><EMOJI_11><EMOJI_12><EMOJI_13>Como agora temos acesso às propriedades, podemos iterar facilmente e resolver a camada de serviço. O resultado será exportado como uma classe de feição 3D:<\/P>import os
for hour in range(0,24):
#criar o objeto datetime
date = datetime.datetime(1900, 1, 5 , hour, 0, 0)
#usaremos a versão string mais tarde
datestring = date.strftime("%d.%m.%Y %H:%M")
#definir a hora do dia e a data:
solver_props.timeOfDay = date
#resolver a camada da rede
arcpy.na.Solve("BeatCity Service Layer", "SKIP", "TERMINATE", None, None)
arcpy.AddMessage("copiando hora" + str(hour))
#como gostaríamos de visualizar isso em 3D
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">#e adicionar um campo com a data para uso posterior, se desejado:</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> <SPAN class="string token">"datetime"</SPAN><SPAN class="punctuation token">,</SPAN> <SP anclass= "stringtoken "> "NULLABLE " </ SPAN > , < SP anclass= "stringtoken "> "REQUIRED " </ SPAN > )
arcpy<SP anclass= "punctuationtoken "> . </ SPAN > management < SP anclass= "punctuationtoken "> . </ SPAN > CalculateField < SP anclass= "punctuationtoken "> ( </ SPAN > arcpy < SP anclass= "punctuationtoken "> . </ SPAN > env < SP anclass= "punctuationtoken "> . </ SPAN > workspace + os < SP anclass= "punctuationtoken "> . </ SPAN > sep + < SP anclass= "stringtoken "> "Friday_" </ SPAN > + str < SP anclass= "punctuationtoken "> ( </ SPAN > hour < SP anclass= "punctuationtoken "> ) </ SPAN ><SP anclass= "punctuationtoken "> , </ SPAN > <SP anclass= "stringtoken "> "datetime" </ SPAN ><SP anclass= "punctuationtoken "> , </ SPAN > <SP anclass= "stringtoken ">'"' </ SPAN > + datestring + <SP anclass= "stringtoken ">'"' </ SPAN ><SP anclass= "punctuationtoken "> ) </ SPAN ><SP anclass= "line-numbers-rows"><SP ><EMOJI_1></SP ><SP ><EMOJI_2></SP ><SP ><EMOJI_3></SP ><SP ><EMOJI_4></SP ><SP ><EMOJI_5></SP ><SP ><EMOJI_6></SP ><SP ><EMOJI_7></SP ><SP ><EMOJI_8></SP ><SP ><EMOJI_9></SP ><SP ><EMOJI_10></SP ><SP ><EMOJI_11></SP ><SP ><EMOJI_12></SP ><SP ><EMOJI_13></SP ><SP ><EMOJI_14></SP ><SP ><EMOJI_15></SP ><SP ><EMOJI_16></SP ></span>=<\/SPAN> 0.0<\/SPAN>
poly_layer.<\/SPAN>symbology =<\/SPAN> symbology
#extrude:<\/SPAN>
poly_layer.<\/SPAN>extrusion(<\/SPAN>'BASE_HEIGHT'<\/SPAN>,<\/SPAN> "3000-100*[ToBreak]"<\/SPAN>)<\/SPAN>
#export:<\/SPAN>
datestring =<\/SPAN> "2017\/12\/08 "<\/SPAN> +<\/SPAN> str(<\/SPAN>hour)<\/SPAN> +<\/SPAN> ":00"<\/SPAN>
for<\/SPAN> lyt in<\/SPAN> doc.<\/SPAN>listLayouts(<\/SPAN>)<\/SPAN>:<\/SPAN>
for<\/SPAN> elm in<\/SPAN> lyt.<\/SPAN>listElements(<\/SPAN>"TEXT_ELEMENT"<\/SPAN>)<\/SPAN>:<\/SPAN>
if<\/SPAN> elm.<\/span>text[0] == "2":
elm.text = datestring
lyt.exportToPNG(arcpy.env.workspace + os.sep + "friday_seattle_final" + str(hour) + ".png", 300)
poly_layer.visible = False
Infelizmente, todo o processo de renderização e exportação leva cerca de 2,5 minutos por cena no meu Lenovo X270 sem GPU dedicada.
O resultado é um monte de pngs que podem ser convertidos em um gif usando vários sites de criação de gif na web ou o editor de imagens open source GIMP.
O resultado fica assim:
Você também pode anexar todos os recursos poligonais do resultado, adicionar o atributo datetime, preencher o tempo usado, habilitar o recurso para tempo e usar as opções de animação no ArcGIS Pro para exportar toda a animação como um GIF:
O resultado é bastante semelhante à exportação por arquivo. Ainda assim, você não tem todas as possibilidades da visualização do layout. Mas mesmo assim o resultado é muito bom (buffers adicionados de 5, 10, 15, 20 mil):