<\/HEAD>
Waze Connected Citizen Program (CCP)<\/A>の一環として、パートナーはWazeアプリを通じて報告されたリアルタイムの交通渋滞やインシデント(XMLおよびJSON形式)にアクセスできます。すでにArcGISプラットフォームでGeoEventを使用してこのデータを消費する方法に関する技術とドキュメント<\/A>があります。<\/P><\/P>
このブログでは、PythonとWindowsタスクスケジューラを通じてこのデータをArcGIS Onlineに取り込む手法について説明します。
最初のPythonスクリプト<\/A>はJoel Meier<\/A>によって開発され、私は提案されたワークフローに合わせて修正しました。また、デバッグを手伝ってくれた同僚のEdmund Hall<\/A>とLouis Tian<\/A>にも特別な感謝を述べたいです。そして最後に、パートナーとして支援し、Waze CCP<\/A>を最大限に活用できるよう助けてくれたAndrew Stauffer<\/A>にも感謝します。<\/P><\/P>
交通情報を保存するためのArcGIS Onlineフィーチャレイヤーの作成<\/H2>ArcGIS Onlineにサインインし> マイコンテンツページで作成 > フィーチャレイヤーをクリックし、「URLから」を選択してポイントフィーチャレイヤーテンプレートの正確なURLを入力します。その後、同じ手順でラインフィーチャレイヤーも作成します。これにより、必要なスキーマ(フィールド名、タイプ、および空間参照)の新しい空のフィーチャレイヤーが作成されます。<\/EM><\/P>ポイントフィーチャレイヤーテンプレート<\/STRONG><\/SPAN><\/P>https:\/\/services1.arcgis.com\/E5n4f1VY84i0xSjy\/arcgis\/rest\/services\/WazeTrafficAlertsEmpty\/FeatureServer<\/A><\/SPAN><\/P>ラインフィーチャレイヤーテンプレート<\/STRONG><\/SPAN><\/P>
https:\/\/services1.arcgis.com\/E5n4f1VY84i0xSjy\/arcgis\/rest/services/WazeTrafficJamsEmpty/FeatureServer<\/_A>または、https://developers.arcgis.com/layers/new にアクセスして、以下のフィールドを持つポイントおよびラインジオメトリフィーチャレイヤー(WKID = 4326)を作成してください。<\span>
ポイント - フィーチャレイヤーOBJECTID (type: esriFieldTypeOID, alias: OBJECTID, SQL Type: sqlTypeOther, length: 0, nullable: false, editable: false)*DateReported (type: esriFieldTypeDate, alias: DateReported, SQL Type: sqlTypeTimestamp2, length: 0, nullable: true, editable: true)Title (type: esriFieldTypeString, alias: Title, SQL Type: sqlTypeOther, length: 25, nullable: true, editable: true)ReportType (type: esriFieldTypeString, alias: ReportType, SQL Type: sqlTypeOther, length: 25, nullable: true, editable: true)ReportSubtype (type: esriFieldTypeString, alias: ReportSubtype, SQL Type: sqlTypeOther, length: 50, nullable: true, editable: true)Street (type: esriFieldTypeString, alias: Street, SQL Type: sqlTypeOther, length: 256, nullable: true, editable: true)City (type: esriFieldTypeString, alias: City, SQL Type: sqlTypeOther, length: 50, nullable: true, editable: true)Description (type: esriFieldTypeString, alias: Description, SQL Type: sqlTypeOther, length: 1024, nullable:true ,editable:true)Reliability (type : esriFieldTypeInteger , alias : Reliability , SQL Type : sqlTypeOther , nullable : true , editable : true )UUID (type : esriFieldTypeString , alias : UUID , SQL Type : sqlTypeOther , length : 100 , nullable : true , editable : true )CreationDate (type : esriFieldTypeDate , alias : CreationDate , SQL Type : sqlTypeOther , length : 8 , nullable : true , editable : false )*Creator (type : esriFieldTypeString , alias : Creator , SQL Type : sqlTypeOther , length :128 , nullable:true ,editable:false)*EditDate (type : esriFieldTypeDate , alias : EditDate , SQL Type : sqlTypeOther , length :8 , nullable:true ,editable:false)*Editor (type : esriFieldTypeString , alias : Editor , SQL Type : sqlTypeOther , length :128 , nullable:true ,editable:false)** 事前入力済みフィールドライン - フィーチャレイヤーOBJECTID (type : esriFieldTypeOID , alias : OBJECTID , SQL Type : sqlTypeOther , length :0 , nullable:false , editable:false )*DateReported (type : esriFieldTypeDate , alias : DateReported , SQL Type : sqlTypeTimestamp2 , length :0 , nullable:true , editable:true )Title (type : esriFieldTypeString , alias : Title , SQL Type : sqlTypeOther , length :25 , nullable:true , editable:true )ReportLevel (type : esriFieldTypeInteger , alias : ReportLevel , SQL Type : sqlTypeOther , nullable:true , editable:true )ReportType (type : esriFieldTypeString , alias : 説明、SQLタイプ: sqlTypeOther、長さ: 1024、nullable: true、編集可能: true)<\/EM><\/SPAN><\/LI>UUID (type: esriFieldTypeDouble, alias: UUID, SQLタイプ: sqlTypeOther, nullable: true, 編集可能: true)<\/EM><\/SPAN><\/LI><\/UL>Shape__Length (type: esriFieldTypeDouble, alias: Shape__Length, SQLタイプ: sqlTypeDouble, nullable: true, 編集不可)*<\/STRONG><\/EM><\/SPAN><\/LI>CreationDate (type: esriFieldTypeDate, alias: CreationDate, SQLタイプ: sqlTypeOther, 長さ: 8, nullable: true, 編集不可)*<\/STRONG><\/EM><\/SPAN><\/LI>Creator (type: esriFieldTypeString, alias: Creator, SQLタイプ: sqlTypeOther, 長さ: 128, nullable: true, 編集不可)*<\/STRONG><\/EM><\/SPAN><\/LI>EditDate (type: esriFieldTypeDate, alias: EditDate, SQLタイプ: sqlTypeOther, 長さ: 8, nullable: true, 編集不可)*<\/STRONG><\/EM><\/SPAN><\/LI>Editor (type: esriFieldTypeString, alias: Editor, SQLタイプ: sqlTypeOther, 長さ: 128, nullable: true, 編集不可)*<\/STRONG><\/EM><\/SPAN><\/LI><\/UL>*<\/STRONG>事前入力されたフィールド<\/EM><\/SPAN><\/P>必ず正確なフィールド名とtypes<\/EM><\/STRONG>を使用してください(そうでない場合はスクリプトの調整が必要です)。<\/SPAN><\/P>フィーチャレイヤーの設定が完了したら、必ず編集を有効にし<\/STRONG>、それらをPRIVATE<\/STRONG>に設定してください。<\/SPAN><\/P>フィールド説明の正確な定義については、パートナーポータルのPartner's Portal<\/A>からの"Waze Feed Technical Specifications [Get Waze Data]"<\/EM><\/STRONG>を参照してください。<\/P><\/BLOCKQUOTE><\/P>
Pythonスクリプトの設定<\/H4>コメントセクション (6行目、9行目、10行目)<\/EM> を自分のXMLフィードおよびポイントとラインのフィーチャレイヤーのURLに置き換えてください。<\/P>import xml.etree.ElementTree as ET
import urllib.request
import arcpy
from datetime import datetime
namespaces = {'georss': 'http:\/\/www.georss.org/georss', 'linqmap': 'http:\/\/www.linqmap.com'}
tree = ET.ElementTree(file=urllib.request.urlopen('##URL for XML waze connection##'))
root = tree.getroot()
channel_head = []
fcp = "##URL to Point - Feature Layer##"
fcl = "##URL to Line - Feature Layer##"
for member in root.findall('channel/item'):
channel = []
Title = member.find('title').text.upper()
try:
point = member.find('georss:point', namespaces)
line = member.find('georss:line', namespaces)
except:
pass
print('Fail Stage 0')
if point != None:
try:
Date = member.find('pubDate').text
DateReported = datetime.strptime(Date, '%a %b %d %H:%M:%S %z %Y')
if len(member.findall('linqmap:city', namespaces)) > 0:
City = member.find('linqmap:city', namespaces).text
else:
City = ''
if len(member.findall('linqmap:street', namespaces)) > 0:
Street = member.find('linqmap:street', namespaces).text
else:
Street = ''
if len(member.findall('linqmap:subtype', namespaces)) > 0 and member token">.<\/SPAN>find<SPAN class="punctuation token">(<\/SPAN><SPAN class="string token">'linqmap:subtype'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> namespaces<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">.<\/SPAN>text <SPAN class="keyword token">is<\/SPAN> <SPAN class="operator token">not<\/SPAN> None<SPAN class="punctuation token">:<\/SPAN>
サブタイプ <SPAN class="operator token">=<\/SPAN> member<SPAN class="punctuation token">.<\/SPAN>find<SPAN class="punctuation token">(<\/SPAN><SPAN class="string token">'linqmap:subtype'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> namespaces<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">.<\/SPAN>text<SPAN class="punctuation token">.<\/SPAN>replace<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="punctuation token">.<\/SPAN>capitalize<SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN>
<SPAN class="keyword token">else<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
サブタイプ <SPAN class="operator token">=<\/SPAN> <SPAN class="string token">''<\/span>
UUID <span class="operator token">=<\/span> member<span class="punctuation token">.<\/span>find<span class="punctuation token">(<\/span><span class="string token">'linqmap:uuid'<\/span><span class="punctuation token">,<\/span> namespaces<span class="punctuation token">)<\/span><span class="punctuation token">.<\/span>text
信頼性 <span class="operator token">=<\/span> member<span class="punctuation token">.<\/span>find<span class="punctuation token">(<\/span><span class="string token">'linqmap:reliability'<\/span><span class="punctuation token">,<\/span> namespaces<span class="punctuation token">)<\/span><span class="punctuation token">.<\/span>text
<span class="keyword token">if<\/span> len<span class="punctuation token">(<\/span>member<span class="punctuation token">.<\/span>findall<span class="punctuation token">(<\/span><span class="string token">'linqmap:reportDescription'<\/span><span class="punctuation token">,<\/span> namespaces<span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="operator token">><\/span> <span class="number token">0<\/span><span class="punctuation token">:<\/span>
説明 <span class="operator token">=<\/span> member<span class="punctuation token">.<\/span>find<span class="punctuation token">(<\/span><span class="string token">'linqmap:reportDescription'<\/span><span class="punctuation token">,<\/span> namespaces<span class="punctuation token">)<\/span><span class="punctuation token">.<\/span>text
<span class="keyword token">else<\/span><span class="punctuation token">:<\/span>
説明 <span class="operator token">=<\/span> <span class="string token">''<\/string>
タイプ <Span Class= "Operator Token" > = < / Span > Member < Span Class= "Punctuation Token" > . < / Span > Find < Span Class= "Punctuation Token" > ( < / Span > < Span Class= "String Token" > 'linqmap:type' < / Span > < Span Class= "Punctuation Token" > , < / Span > Namespaces < Span Class= "Punctuation Token" > ) < / Span > . Text < Span Class= "Punctuation Token" > . Replace < / Span > ( < Span Class= "String Token" > '_' < / Span > , < Span Class= "String Token" > ' ' < / Span > ) . Capitalize ( )
ポイント <Span Class= "Operator Token" > = < / Span > Member < Span Class= "Punctuation Token" > . Find < / Span > ( < Span Class= "String Token" > 'georss:point' < / Span > , Namespaces ) . Text . Replace ( ' -', ',-' ) . Split ( ' ' )
行 = サブタイプ、タイプ、タイトル、DateReported、シティ、ストリート、UUID、信頼性、説明、float(point[1])、float(point[0])
カーソル = arcpy.da.InsertCursor(fcp, ["ReportSubtype", "ReportType", "Title", "DateReported", "City", "Street", "UUID", "Reliability", "Description", "SHAPE@X", "SHAPE@Y"])
cursor.insertRow(row)
del cursor
print('stage 1')
except:
pass
print('fail Stage 1')
elif line != None:
if Title != 'IRREGULARITY':
try:
Date = member.find('pubDate').text
DateReported = datetime.strptime(Date, '%a %b %d %H:%M:%S %z %Y')
if len(member.findall('linqmap:city', namespaces)) > 0:
City = member.find('linqmap:city', namespaces).text
else:
City = ''
if len(member.findall('linqmap:startNode', namespaces)) > 0:
StartNode = member.find('linqmap:startNode', namespaces).text
else:
StartNode = ''
if len<SPAN class="punctuation token">(<\/SPAN>member<SPAN class="punctuation token">.<\/SPAN>findall<SPAN class="punctuation token">(<\/SPAN><SPAN class="string token">'linqmap:endNode'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> namespaces<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">)<\/SPAN> <SPAN class="operator token">><\/SPAN> <SPAN class="number token">0<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
EndNode <SPAN class="operator token">=<\/SPAN> member<SPAN class="punctuation token">.<\/SPAN>find<SPAN class="punctuation token">(<\/SPAN><SPAN class="string token">'linqmap:endNode'<\/SPAN><SPAN class="punctuation token">,<\/SPAN> namespaces<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">.<\/SPAN>text
<SPAN class="keyword token">else<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
EndNode <SPAN class="operator token">=<\/SPAN> <SPAN class="string token">''<\/SPAN>
<SPAN class="keyword token">if<\/SPAN> len<SPAN class="punctuation token">(<\/SPAN>member<SPAN class="punctuation token">.<\/span>findall<span class="punctuation token">(<\/span><span class="string token">'linqmap:reportDescription'<\/span><span class="punctuation token">,<\/span> namespaces<span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="operator token">><\/span> <span class="number token">0<\/span><span class="punctuation token">:<\/span>
Description <span class="operator token">=<\/span> member<span class="punctuation token">.<\/span>find<span class="punctuation token">(<\/span><span class="string token">'linqmap:reportDescription'<\/span><span class="punctuation token">,<\/span> namespaces<span class="punctuation token">)<\/span><span class="punctuation token">.<\/span>text
<span class="keyword token">else<\/span><span class="punctuation token">:<\/span>
Description <span class="operator token">=<\/span> <span class="string token">''<\/span>
<span class="keyword token">if<\/span> len<span class="punctuation token">(<\/span>member<span class="punctuation token">.<\/span>findall<span class="punctuation token">(<\/span><span class="string token">'linqmap:street'<\/span><span class="punctuation token">,<\/span> namespaces<span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="operator token">><\/span> <span class="number token">0<\/span><span class="punctuation token">:<\/span>
Street <span class="operator token">=<\/span> member<span class="punctuation token">.<\/span>find<span class="punctuation token">(<\/span><span class="string token">'linqmap:street'<\/span><span class="punctuation token">,<\/span> namespaces<span class="punctuation token">)<\/span><span class="punctuation token">.<\/span>text
<span class="keyword token">else<\/span><span class="punctuation token">:<\/span>
Street <span class="operator token">=<\/span> <span class="string token">''<\/span>
UUID <span class="operator token">=<\/span> member<span class="punctuation token">.<\/span>find<span class="punctuation token">(<\/span><span class="string token">'linqmap:uuid'<\/span><span class="punctuation token">,<\/span> namespaces<span class="punctuation token">)<\/span><span class="punctuation token">.<\/span>text
Type <span class="operator token">=<\/span> member<span class="punctuation token">.<\/pan>find<spanclass=\"punctuationtoken\"><(\/><\"stringtoken\"\>'linqmap:type'<\/><\"puncutationtoken\",\/>namespaces\/><\"puncutationtoken\"><.text.replace('_', ' ').capitalize()\n Length <operatortoken>=</operatortoken> member<punctuationtoken>.</puncutationtoken>find<punctuationtoken>(<'stringtoken'>'linqmap:length'</stringtoken>, namespaces)</puncutationtoken>.text
Level <operatortoken>=</operatortoken> member<punctuationtoken>.</puncutationtoken>find<punctuationtoken>(<'stringtoken'>'linqmap:level'</stringtoken>, namespaces)</puncutationtoken>.text
line <operatortoken>=</operatortoken> member<punctuationtoken>.</puncutationtoken>find<punctuationtoken>(<'stringtoken'>'georss:line'</stringtoken>, namespaces)</puncutationtoken>.text.replace('\n', '').replace(' ', '],[').replace('],[-', ', -').split(', ')
Speed <operatortoken>=</operatortoken> member<punctuationtoken>.</puncutationtoken>find<punctuationtoken>(<'stringtoken'>'linqmap:speed'</stringtoken>, namespaces)</puncutationtoken>.text
Delay <operatortoken>=</operatortoken> member<punctuationtoken>.</puncutationtoken>find<punctuationtoken>(<'stringtoken'>'linqmap:delay'</stringtoken>, namespaces)</puncutationtoken>.text
cur <operatortoken>=</operatortoken> arcpy.da.InsertCursor(fcl, ["Speed","Delay","Title","ReportType","DateReported","City","Street","Length","ReportLevel","UUID","StartNode","EndNode","Description","SHAPE@"])
array <operatortoken>=</operatortoken> arcpy.Array()
for coords in line:
xy = coords.split('],[')
array.add(arcpy.Point(xy[1], xy[0]))
cur.insertRow([Speed, Delay, Title, Type, DateReported, City, Street, Length, Level, UUID, StartNode, EndNode, Description, arcpy.Polyline(array)])
del cur
print( token">'stage 2'<\/SPAN><SPAN class="punctuation token">)<\/SPAN>
<SPAN class="keyword token">except<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
<SPAN class="keyword token">pass<\/SPAN>
<SPAN class="keyword token">print<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="string token">'ステージ2失敗'<\/SPAN><SPAN class="punctuation token">)<\/SPAN>
<SPAN class="keyword token">else<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
<SPAN class="keyword token">try<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
Date <SPAN class="operator token">=<\/SPAN> member<SPAN class="punctuation token">.<\/SPAN>find<SPAN class="punctuation token">(<\/SPAN><SPAN class="string token">'updateDate'<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">.<\/SPAN>text
DateReported <SPAN class="operator token">=<\/SPAN> datetime<SPAN class="punctuation token">.<\/SPAN>strptime<SPAN class="punctuation token">(<\/SPAN>Date<SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">'%a %b %d %H:%M:%S %z %Y'<\/SPAN><SPAN class="punctuation token">)<\/SPAN>
<SPAN class="keyword token">if<\/SPAN> len<SPAN class="punctuation token">(<\/SPAN>member<SPAN class="punctuation token">.<\/SPAN>findall<SPAN class="punctuation token">(<\/SPAN><SPAN class="string token">'linqmap:city'<\/Span><span class="punctuation token">,<\/span> namespaces<span class="punctuation token">)<\/span><span class="punctuation token">)<\/span> <span class="operator token">><\/span> <span class="number token">0<\/span><span class="punctuation token">:<\/span>
City <span class="operator token">=<\/span> member<span class="punctuation token">.<\/span>find<span class="punctuation token">(<\/span><span class="string token">'linqmap:city'<\/span>, namespaces<span class="punctuation token">)<\/span>.<span class="punctuation token">text
<span class="keyword token">else<\/span><span class="punctuation token">:<\/span>
City <span class="operator token">=<\/span> <span class="string token">''<\/span>
<span class="keyword token">if<\/span> len<span class="punctuation token">(<\/span>member<span class="punctuation token">.<\/span>findall<span class="punctuation token">(<\/span><span class="string token">'linqmap:startNode'<\/span>, namespaces<span class="punctuation token">)<\/span>) > 0:<br> StartNode = member.find('linqmap:startNode', namespaces).text<br> else:<br> StartNode = ''
if len(member.findall('linqmap:endNode', namespaces)) > 0:
EndNode = member.find('linqmap:endNode', namespaces).text
else:
EndNode = ''
if len(member.findall('linqmap:reportDescription', namespaces)) > 0:
Description = member.find('linqmap:reportDescription', namespaces).text
else:
Description = ''
if len(member.findall('linqmap:street', namespaces)) > 0:
Street = member.find('linqmap:street', namespaces).text
else:
Street = ''
UUID = member.find('linqmap:id', namespaces).text
Type = member.find('linqmap:type', namespaces).text.replace('_', ' ').capitalize()
Length = member.find('linqmap:length', namespaces).text
Level = member.find('linqmap:trend', namespaces).text
line = member.find('georss:line', namespaces).text.replace('\n', '').replace(' ', '],[').replace'],[-', ', -').split(', ')
Speed = member.find('linqmap:speed', namespaces).text
Delay = member.find('linqmap:delaySeconds', namespaces).text
cur = arcpy.da.InsertCursor(fcl, ["Speed", "Delay", "Title", "ReportType" token">,</SPAN><SPAN class="string token">"DateReported"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"City"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"Street"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"Length"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"ReportLevel"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"UUID"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"StartNode"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"EndNode"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"Description"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"SHAPE@"</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
array <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Array<SPAN class="punctuation token">()</SPAN>
<SPAN class="keyword token">for</SPAN> coords <SPAN class="keyword token">in</SPAN> line<SPAN class="punctuation token">:</SPAN>
xy <SPAN class="operator token">=</SPAN> coords<SPAN class="punctuation token">.</SPAN>split<SPAN class="punctuation token">('],[')</SPAN>
array<SPAN class="punctuation token">.</SPAN>add<SPAN class="punctuation token">(</SPAN>arcpy<SPAN class="punctuation token">.</SPAN>Point<SPAN class="punctuation token">(</SPAN>xy<SPAN class="punctuation token">[1]</SPAN>, xy<SPAN class="punctuation token">[0]</Span>)</span>)
cur<span class="punctuation token">.</span>insertRow<span class="punctuation token">([</span>Speed<span class="punctuation token">,</span>Delay<span class="punctuation token">,</span>Title<span class="punctuation token">,</span>Type<span class="punctuation token">,</span>DateReported<span class="punctuation token">,</span>City<span class="punctuation token">,</span>Street<span class="punctuation token">,</span>Length<span class="punctuation token">,</span>Level<span class="punctuation token">,</span>UUID<span class="punctuation token">,</span>StartNode<span class="punctuation token">,</span>EndNode<span class="punctuation token">,</span>Description<span class="punctuation token">,</span>arcpy<span class="punctuation token">.</span>Polyline<span class="punctuation token">(</span>array<span class="punctuation token">)</span><span class="punctuation token">]</span>)
<span class="keyword token">del </span>cur
<span class="keyword token">print(</span>'ステージ3'<span class="punctuation token">
)</span>
<span class="keyword token">except:</span>
<span class="keyword token">pass
print(</span>'ステージ3失敗'<span class="punctuation token">
)</span>
<span class="keyword token else:">else:</span>
<spanclass=keywordtokenprint(></span>'エラー'<spanclass=punctuationtoken>)></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><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN></span><!-- EMOJIS CONTINUE --></span>
スクリプトのスケジューリング
Pythonスクリプトが稼働し始めたら、 Windowsタスクスケジューラを使用して特定の時間間隔でスクリプトを実行 し、ArcGIS Onlineのフィーチャレイヤーに新しいフィーチャを追加します(この手法はスクリプトを最初に実行した時からのすべての交通情報の履歴を保持します)。

ライブ交通情報の表示
ライブ交通情報を表示するには - フィーチャレイヤービューを作成し、 そのフィーチャを定義して、 直近x分以内に作成されたフィーチャのみを表示するように設定します- xはPythonスクリプトを実行する頻度です。
私はPythonスクリプトを4分ごとに実行するよう設定し、それに合わせて直近4分以内に作成されたフィーチャのみを表示するようにフィーチャレイヤービューも設定しました。

設定が完了したら、これらのビューを公開共有し、公共向けアプリケーションで表示できます。
以下は私たちのフィーチャレイヤービューへのリンクと、道路・歩道閉鎖とともにこれらのフィーチャを表示する地図です。
*こちらをクリック して私たちの道路・歩道工事申請プロセスについて詳しくご覧ください

事故が報告された際に特定の人へメール送信
私は以下の方法を使用しました。あるいは、似たようなPythonスクリプトや独自のPythonスクリプトを作成して、新しいフィーチャがフィーチャレイヤーに追加された際にメールをトリガーすることも可能です。
A new feature layer view (geometry type = point) that only displays Accidents (ReportType = "Accident") where the DateReported was <em>in the last x number of minutes</em>. のメールスクリプトを選択して実行してください。

最後に、Windowsタスクスケジューラを設定して、直近<em>x分以内</em>に発生した新しいフィーチャ(事故)をキャプチャします。
これらのワークフローが皆様のビジネスニーズに役立つことを願っています。ご意見、ご感想、ご質問がありましたら、ぜひ下記コメント欄でお知らせください。
よろしくお願いします! - Gee Fernando