ロシアに住んでいるのは誰ですか?OpenStreetMapとOverpassAPIを使用して最も緑の多い都市を検索した方法

各カードには凡例があります。カードに何がどのように示されているかを読者に伝えるのは彼女です。家は灰色のポリゴン、道路に対応します-セグメントとカーブ、公園と正方形は薄緑色で塗りつぶされ、木の絵文字で飾られています。そして、いくつかの地図に、彼らは便利なアプリケーションを追加します-それらの長さ、公園、店、ゴミ箱の数を含むこれらの道路のリスト。



地方自治体のサービスの作業を自動化する準備をしているときに、カートグラフィの使用に注意を向けました。これは、幅広いタスクを解決するための非常に強力で効果的なツールであることがわかりました。マップには、オブジェクトの場所、収穫装置の移動経路、輸送、作業計画、および問題のある「健康な」領域のヒートマップに関する最新情報を表示できます。



一般に、カートグラフィを使用すると、緊急の問題に対する反応時間と意思決定がスピードアップし、計画と予測のプロセスが簡素化されます。最も重要なことは、すべての情報が最も視覚的な形式で利用できることです。



顧客の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ブラックジャックとOverpassAPIを使用してサーバーを展開します。

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



All Articles