地方自治体のサービスの作業を自動化する準備をしているときに、カートグラフィの使用に注意を向けました。これは、幅広いタスクを解決するための非常に強力で効果的なツールであることがわかりました。マップには、オブジェクトの場所、収穫装置の移動経路、輸送、作業計画、および問題のある「健康な」領域のヒートマップに関する最新情報を表示できます。
一般に、カートグラフィを使用すると、緊急の問題に対する反応時間と意思決定がスピードアップし、計画と予測のプロセスが簡素化されます。最も重要なことは、すべての情報が最も視覚的な形式で利用できることです。
顧客の1人と協力しているときに、カテゴリごとにマップ上のオブジェクトの数を計算するという興味深いタスクに直面しました。
見つけるには
次のデータを組み合わせて、中央連邦地区で「最も環境に配慮した」都市を特定します。店舗、ゴミ箱、公園の数。
与えられた
カートグラフィー。非常に単純な理由で、OpenStreetMap(以下-OSM)を出発点として選択しました-オープンソース。
決定
この問題を解決するには、いくつかのアプローチがあります。たとえば、PostgreSQLを使用してOSMデータベースにクエリを実行し、必要なデータを取得したり、地理空間情報を作成、分析、公開するためのシステムであるQGISを使用したりできます。ただし、よりエレガントで効率的な方法であるOverpassAPIを見つけました。
Overpass APIは、ユーザーの要求に応じてOSMデータベースからデータを抽出するための強力なツールです。データベースからいくつかの要素を取得することから、XMLまたはOverpass QL(Overpass XMLのアップグレードバージョン)の形式で要求に応じて選択される数億のオブジェクトまで、あらゆる規模のタスクに最適化されています。Overpass APIの詳細については、こちらをご覧ください。最初から始めましょう。まず、サーバーにOSMをデプロイする必要があります。私たちのマシンでは、Ubuntuがオペレーティングシステムとして使用されています。
Q:なぜOSMを展開するのですか?
A:データを処理するには、Overpass APIが必要です。このAPIのパブリックサーバーでは、1日あたりのリクエスト数に制限があります。このため、OSM
OSMをインストールするための詳細な手順はこちらです。次のステップは、OverpassAPIをインストールすることです-その最新リリースはここにあります。
sudo apt-get update
sudo apt-get install g++ make expat libexpat1-dev zlib1g-dev apache2 -y
wget http://dev.overpass-api.de/releases/osm-3s_.tar.gz
tar -zxvf osm-3s_.tar.gz
cd osm-3s_
./configure CXXFLAGS="-O2" --prefix=$EXEC_DIR
make install
cd ../
chmod -R 755 ./overpass
インストール後、データを入力する必要があります-データベースを作成します。全世界のデータベースは必要ないので、Geofabrikサービスを使用します。これにより、指定された管理領域のデータを取得できます。
Geofabrikの価値のある代替手段はBBBikeです。
次のように 、ヨーロッパ>ロシア連邦>中央連邦地区ディレクトリからダウンロードしたデータベースを.osm.bz2形式でダウンロードして解凍します。
PATH_To_INIT_OSM3S.SH PATH_TO_FILE_BZ2 PATH_WERE_Unpack_OVERPASS_APIディレクトリ
注:この場合、すべてのアクションはオーバーパスディレクトリで実行されます。
これで、プラットフォームの準備がほぼ整いました。これで、最初のリクエストを行って、地域全体の公園の数を調べることができます。
PATH_TO_OSM3S_QUERY --db-dir = PATH_To_DB
私たちのリクエストとレスポンスは次のようになります。
root@MIP-USER55:~# cd overpass/
root@MIP-USER55:~/overpass# ./osm-3s_v0.7.56.7/bin/osm3s_query --db-dir=db
encoding remark: Please enter your query and terminate it with CTRL+D.
[out:json][timeout:25];
(
nwr["landuse"="forest"];
);
out count;
{
...,
"elements": [
{
"type": "count",
"id": 0,
"tags": {
"nodes": "23",
"ways": "19723",
"relations": "4206",
"total": "23952"
}
}
]
}
私たちはすでに近づいています。残っているのは、公園を地域や都市ごとに分割することだけです。個別に実行され、常に実行されているDispatcherは、このタスクに対処するのに役立ちます。
私たちは、APIを起動し、追加PORTを聞く/etc/apache2/ports.confディレクトリに。
echo "_ localhost" | sudo tee /etc/apache2/conf-available/_.conf && sudo a2enconf _
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
sudo a2enmod cgi
sudo a2enmod ext_filter
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/___.conf
構成を確認しています。このようになります。
<VirtualHost *:>
ServerAdmin webmaster@localhost
ExtFilterDefine gzip mode=output cmd=/bin/gzip
DocumentRoot __OVERPASS_API/html
ScriptAlias /api/ __OVERPASS_API/cgi-bin/
<Directory "__OVERPASS_API">
AllowOverride None
Options Indexes FollowSymLinks
Require all granted
</Directory>
<Directory "__OVERPASS_API/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
次に、新しいホストをオンにして、古いホストを休ませます。
sudo a2ensite .conf
sudo a2dissite 000-default.conf
sudo a2dissite __.conf
sudo service apache2 reload
今こそ、リクエストを処理する最初のディスパッチャを有効にするときです。これを行うには、コマンドを使用します。
nohup __OVERPASS_API/bin/dispatcher --osm-base --db-dir=__DB --meta &
すべてが計画どおりに進んだことを示す最初の兆候は、データベースディレクトリに
osm3s_OVERPASS_API_VERSION_osm_baseファイルを作成することです。nohup.outファイルには、ステータスメッセージDispatcherが表示されます-dispatcherが開始されました。
ただし、作業はそれだけではありません。別のディスパッチャを起動する必要があります。まず、rulesフォルダーをデータベースのあるディレクトリにコピーし、結果のosm3s_OVERPASS_API_VERSION_areasに権限を配布します。
nohup __OVERPASS_API/bin/dispatcher --areas --db-dir=__DB &
chmod 666 "../db/osm3s_OVERPASS_API__areas"
nohup __OVERPASS_API/bin/rules_loop.sh __DB &
これで、地域をリクエストして、Ryazanの公園の数を計算できます。ちなみに、これはすでにブラウザのアドレスバーで機能します。
http://localhost:/api/interpreter?data=[output:json][timeout:25]; area[name=""]->.searchArea; ( nwr["leisure"="park"](area.searchArea); ); out count;
待望の答え!
"elements": [
{
"type": "count",
"id": 0,
"tags": {
"nodes": "0",
"ways": "57",
"relations": "11",
"areas": "0",
"total": "68"
}
}
]
}
これで、分析と改善の問題に飛び込むことができます。中央連邦地区の25の主要都市にある公園、ショップ、ゴミ箱の数を見つけ、ODANTプラットフォームの分析ツールを使用してこれらの指標を比較します。
ODANTは、さまざまな複雑さと分布の情報システムを構築するために設計された、ロシア製のデジタル統合プラットフォームです。ODANTの詳細についてはこちらをご覧ください。ゴミ箱を検索するためのパラメータは次のようになります。タスクのフレームワーク内では、コンテナサイト、自立型ゴミ箱、固形廃棄物収集ポイントを区別しません。
nwr["amenity"="recycling"](area.searchArea);
nwr["amenity"="waste_disposal"](area.searchArea);
nwr["amenity"="waste_basket"](area.searchArea);
ODANTからの出力をフラットテーブルとしてエクスポートしました。
市 |
壷 |
人口 |
人口/壷 |
ウラジミール |
1525 |
356937 |
234 |
クラスノゴルスク |
274 |
175554 |
641 |
カルーガ |
376 |
332039 |
883 |
タンボフ |
279 |
292140 |
1047 |
モスクワ |
11473 |
12678079 |
1105 |
コロムナ |
111 |
140129 |
1262 |
バラシカ |
378 |
507366 |
1342 |
クルスク |
336 |
452976 |
1348 |
リビンスク |
129 |
184635 |
1431 |
Mytishchi |
140 |
235504 |
1682 |
Lyubertsy |
119 |
205295 |
1725年 |
ゼレノグラード |
140 |
250453 |
1789年 |
Voronezh |
544 |
1058261 |
1945年 |
Tver |
225 |
449507 |
1998年 |
Yaroslavl |
273 |
608353 |
2228 |
ムロム |
43 |
106984 |
2488 |
ポドルスク |
114 |
308130 |
2703 |
キムキ |
89 |
259550 |
2916 |
コストロマ |
72 |
276929 |
3846 |
Lipetsk |
124 |
509420 |
4108 |
リヤザン |
118 |
539290 |
4570 |
コロレフ |
49 |
224348 |
4579 |
トゥーラ |
101 |
475161 |
4705 |
Elektrostal |
32 |
156026 |
4876 |
この評価では、ウラジミール市が名誉ある第一線を占めています。ゴミの蓄積場所が1か所にあるのは234人だけです。組み込みのODANTツールを使用して、2つの面白いチャートを作成します。
次の要素であるベンチに移りましょう。
nwr["amenity"="bench"](area.searchArea);
次の結果が表の形式で得られます。
市 |
ベンチ |
人口 |
人口/ショップ |
ウラジミール |
593 |
356937 |
602 |
タンボフ |
413 |
292140 |
707 |
モスクワ |
13970 |
12678079 |
908 |
クラスノゴルスク |
143 |
175554 |
1228 |
バラシカ |
411 |
507366 |
1234 |
ゼレノグラード |
185 |
250453 |
1354 |
Tver |
268 |
449507 |
1677年 |
Lyubertsy |
115 |
205295 |
1785年 |
カルーガ |
176 |
332039 |
1887年 |
クルスク |
214 |
452976 |
2117 |
ムロム |
42 |
106984 |
2547 |
|
172 |
475161 |
2763 |
|
49 |
140129 |
2860 |
|
272 |
848752 |
3120 |
|
79 |
308130 |
3900 |
|
132 |
539290 |
4086 |
|
61 |
276929 |
4540 |
|
43 |
259550 |
6036 |
|
25 |
184635 |
7385 |
|
78 |
608353 |
7799 |
|
55 |
509420 |
9262 |
|
16 |
156026 |
9752 |
|
23 |
224348 |
9754 |
|
17 |
235504 |
13853 |
そして再び、ウラジミールはすべての候補者の中で最も快適であることが判明しました。1つのベンチに602人を配置することは不可能ですが、ミティシチでは場所をめぐって非常に激しい闘争が続いています。ただし、いつでもスケジュールを立てることができます。
結果を視覚化します。
最も興味深い部分に移りましょう:公園の面積を計算します。この問題を解決するためにいくつかの方法を使用できますが、私たちが見つけた最もオープンソースで素晴らしいのはLeafletライブラリです。クエリ自体で、outcountをoutgeomに置き換える必要があります。これにより、領域の座標がわかります。
Leafletは、Webサイトにマップを表示するためのオープンソースのJavaScriptライブラリです。HTML5およびCSS3をサポートするほとんどのモバイルおよびデスクトッププラットフォームをサポートします。リーフレットを使用すると、GISに慣れていない開発者は、小さなタイルで構成されたラスターマップを簡単に表示でき、メインのレイヤーの上に追加のレイヤーがオーバーレイされる可能性があります。リーフレットの詳細については、こちらをご覧ください。
ポリゴンを作成しましょう。
const polygon = L.polygon().addTo(map);
const area = L.GeometryUtil.geodesicArea(polygon.getLatLngs());
これで、エリアにはm2のリージョンのエリアが含まれます。選択した都市のデータを抽出し、次の表を取得します。
市 |
総公園面積(km2) |
市街地(km2) |
公園が占めるスペースの割合 |
数量 公園 |
ゼレノグラード |
4.13 |
37.199 |
0.111 |
26 |
カルーガ |
12.60 |
168.8 |
0.075 |
140 |
モスクワ |
121.75 |
2561.5 |
0.048 |
1469年 |
Lyubertsy |
0.60 |
12.87 |
0.047 |
28 |
ウラジミール |
4.62 |
137.14 |
0.034 |
104 |
キムキ |
3.55 |
109.8 |
0.032 |
27 |
ポドルスク |
1.29 |
40.39 |
0.032 |
53 |
バラシカ |
1.78 |
62.8 |
0.028 |
55 |
タンボフ |
2.71 |
96.58 |
0.028 |
140 |
トゥーラ |
4.09 |
145.8 |
0.028 |
102 |
コストロマ |
3.95 |
144.5 |
0.027 |
50 |
クラスノゴルスク |
0.69 |
25.65 |
0.027 |
21 |
リヤザン |
4.32 |
224.163 |
0.019 |
96 |
Yaroslavl |
3.68 |
205.8 |
0.018 |
176 |
コロレフ |
0.97 |
55.47 |
0.017 |
30 |
クルスク |
3.31 |
208.2 |
0.016 |
862 |
コロムナ |
1.03 |
65.1 |
0.016 |
21 |
Mytishchi |
0.53 |
34.59 |
0.015 |
30 |
Voronezh |
8.25 |
596.51 |
0.014 |
414 |
Lipetsk |
4.44 |
330.15 |
0.013 |
78 |
Tver |
1.38 |
152.22 |
0.009 |
129 |
ムロム |
0.33 |
43.78 |
0.008 |
十一 |
リビンスク |
0.65 |
101.42 |
0.006 |
62 |
Elektrostal |
0.25 |
51.45 |
0.005 |
52 |
OSMによると、ゼレノグラードはその名前を完全に正当化しています-都市の面積の11%が緑地で占められています。公園の数に対する居住者の数の比率を取得しましょう。
市 |
公園の総面積(m2) |
居住者1人あたりのm2パークの数 |
1つの公園あたりの住民の数 |
カルーガ |
12,600,000 |
37.95 |
2372 |
ゼレノグラード |
4,130,000 |
16.49 |
9633 |
コストロマ |
3,950,000 |
14.26 |
5539 |
キムキ |
3,550,000 |
13.68 |
9613 |
ウラジミール |
4,620,000 |
12.94 |
3432 |
Voronezh |
8,250,000 |
9.72 |
2050 |
モスクワ |
121,750,000 |
9.60 |
8630 |
タンボフ |
2,710,000 |
9.28 |
2087 |
Lipetsk |
4,440,000 |
8.72 |
6531 |
トゥーラ |
4,090,000 |
8.61 |
4658 |
リヤザン |
4,320,000 |
8.01 |
5618 |
コロムナ |
1,030,000 |
7.35 |
6673 |
クルスク |
3,310,000 |
7.31 |
525 |
Yaroslavl |
3,680,000 |
6.05 |
3457 |
コロレフ |
970,000 |
4.32 |
7478 |
ポドルスク |
1,290,000 |
4.19 |
5814 |
クラスノゴルスク |
690,000 |
3.93 |
8360 |
リビンスク |
650,000 |
3.52 |
2978 |
バラシカ |
1,780,000 |
3.51 |
9225 |
ムロム |
330,000 |
3.08 |
9726 |
Tver |
1,380,000 |
3.07 |
3485 |
Lyubertsy |
600,000 |
2.92 |
7332 |
Mytishchi |
530,000 |
2.25 |
7850 |
Elektrostal |
250,000 |
1.60 |
3001 |
データをグラフの形で提示しましょう。
そして最後に-占領された場所によって計算された都市の評価。
市 |
評価 |
場所 |
ウラジミール |
12 |
1 |
カルーガ |
15 |
2 |
モスクワ |
18 |
3 |
ゼレノグラード |
21 |
4 |
タンボフ |
23 |
五 |
クラスノゴルスク |
35 |
6 |
バラシカ |
39 |
7 |
Lyubertsy |
45 |
8 |
キムキ |
46 |
ナイン |
クルスク |
47 |
十 |
コロムナ |
48 |
十一 |
コストロマ |
50 |
12 |
Voronezh |
52 |
13 |
ポドルスク |
55 |
14 |
トゥーラ |
55 |
15 |
リヤザン |
61 |
16 |
Tver |
63 |
17 |
Yaroslavl |
63 |
18 |
ムロム |
69 |
19 |
リビンスク |
69 |
20 |
Lipetsk |
70 |
21 |
コロレフ |
75 |
22 |
Mytishchi |
75 |
23 |
Elektrostal |
94 |
24 |
エピローグと結論
OpenStreetMap、Overpass API、ODANTで構成される審査員団の決定により、
ウラジミールは名誉ある1位になり、「中央連邦地区で最も環境に配慮した」という称号を獲得しました。
次の事実に注意する価値があります。私たちの調査は、OSMに反映されたデータのみに基づいていました。当然のことながら、ミティシチにはさらに数百のベンチがあり、トゥーラには廃棄物が蓄積する場所がはるかに多くあります。私たちの結果は、たとえば、都市インフラストラクチャオブジェクトをOSMデータベースに追加するダイナミクスを評価するために反対側から見ることができます。ただし、平均して、OSMにデータを入力するのは「同じくらい遅い」ので、データは比較的信頼性が高く、検討する価値があると考えられます。
問題を解決し、OSMマップ上のオブジェクトを操作する効果的な方法を見つけることができました。それはOverpassAPIとLeafletの組み合わせであることが判明しました。この一連のツールを使用して、OSMデータベースにクエリを実行し、オブジェクトの数に関するデータを受信し、領域の面積を計算できます。データの提示と分析のために、私たちはすべてのニーズを満たすODANTに基づくWebベースのソリューションをまとめました。
このソリューションによって支援される可能性のある業界、ビジネス、および経済は多数あります。何かアイデアやフィードバックがあれば、話し合うのはとてもいいことです。私たちはこのタスクに28時間のクリーン時間を費やしました、あなたはそれをより速くすることができるかもしれません。
リードフロントエンド開発者、Infostandard-ダニエルエピファノフ。
編集者、Infostandard-Nikita Morozov