Qui vit bien en Russie? Comment nous avons recherché la ville la plus verte en utilisant OpenStreetMap et l'API Overpass

Chaque carte a une légende: c'est elle qui dit au lecteur ce qui y est indiqué et comment. Les maisons correspondent à des polygones gris, des routes - segments et courbes, les parcs et les places sont remplis de vert clair et sont décorés d'un pictogramme d'arbre. Et à certaines cartes, ils ajoutent une application utile - une liste de ces routes avec leur longueur, le nombre de parcs, de magasins et de poubelles.



Lorsque nous nous préparions à automatiser le travail des services municipaux locaux, nous avons attiré l'attention sur l'utilisation de la cartographie, que nous avons trouvée comme un outil vraiment puissant et efficace pour résoudre un large éventail de tùches. Sur la carte, vous pouvez afficher des informations à jour sur l'emplacement des objets, les itinéraires de déplacement du matériel de récolte, le transport, un plan de travail et une carte thermique avec les zones à problÚme et «saines».



L'utilisation de la cartographie en général permet d'accélérer le temps de réaction et la prise de décision sur les problÚmes urgents, simplifie le processus de planification et de prévision, et surtout, toutes les informations sont disponibles sous la forme la plus visuelle.



Tout en travaillant avec l'un des clients, nous avons fait face à une tùche intéressante: calculer le nombre d'objets sur la carte par catégorie.



Trouver



Déterminez la ville la plus «verte» du District fédéral central en combinant les données suivantes: le nombre de magasins, de poubelles et de parcs.



Donné



Cartographie. Nous avons choisi OpenStreetMap (ci-aprĂšs - OSM ) comme tremplin pour une raison trĂšs simple - Open Source.



DĂ©cision



Il existe plusieurs approches pour résoudre ce problÚme. Par exemple, nous pouvons utiliser PostgreSQL pour interroger la base de données OSM et obtenir les données dont nous avons besoin, ou nous pouvons utiliser QGIS, un systÚme pour créer, analyser et publier des informations géospatiales. Cependant, nous avons trouvé un moyen plus élégant et efficace: l' API Overpass .



Overpass API est un outil puissant pour extraire des données de la base de données OSM à la demande de l'utilisateur. Il est optimisé pour les tùches de toute échelle: de la récupération de plusieurs éléments d'une base de données à des centaines de millions d'objets sélectionnés en fonction de la demande sous la forme de XML ou Overpass QL - une version améliorée d'Overpass XML. En savoir plus sur l'API Overpass ici .
Partons de zéro: tout d'abord, vous devez déployer OSM sur le serveur. Ubuntu est utilisé comme systÚme d'exploitation sur notre machine.



Q: Pourquoi déployer votre OSM?

R: Pour travailler avec des donnĂ©es, nous avons besoin de l'API Overpass, dont le serveur public a une limite sur le nombre de requĂȘtes par jour. C'est pour cette raison que nous dĂ©ploierons notre serveur avec le blackjack OSM et l'API Overpass.

Des instructions détaillées pour l'installation d'OSM sont disponibles ici .
L'Ă©tape suivante consiste Ă  installer l'API Overpass - sa derniĂšre version peut ĂȘtre trouvĂ©e ici .



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


AprÚs l'installation, vous devez remplir - créer une base de données. Nous n'avons pas besoin d'une base de données du monde entier, nous allons donc utiliser le service Geofabrik , qui nous permet d'obtenir des données pour les régions administratives spécifiées.

BBBike est une alternative intéressante à Geofabrik .



Nous téléchargeons et décompressons la base de données téléchargée à partir du répertoire Europe> Fédération de Russie> District fédéral central au format .osm.bz2, comme suit:

PATH_TO_INIT_OSM3S.SH PATH_TO_FILE_BZ2 PATH_WERE_Unpack_OVERPASS_API DIRECTORY

Remarque: dans ce cas, toutes les actions sont effectuées dans le répertoire de passage supérieur .



Ainsi, la plate-forme est presque prĂȘte - nous pouvons maintenant faire notre premiĂšre demande et connaĂźtre le nombre de parcs dans toute la rĂ©gion.

PATH_TO_OSM3S_QUERY --db-dir = PATH_TO_DB


Notre demande et réponse ressemble à ceci:



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"
  }
}

  ]
}


Nous sommes déjà proches: il ne reste plus qu'à diviser les parcs par régions et villes. Un Dispatcher fonctionnant séparément et fonctionnant constamment nous aidera à faire face à cette tùche .



Nous lançons l'API et ajoutons Listen PORT dans le répertoire /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


VĂ©rification de la configuration. Ça devrait ressembler Ă  ça.



<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>


Ensuite, nous allumons le nouvel hĂŽte et envoyons l'ancien au repos.



sudo a2ensite .conf
sudo a2dissite 000-default.conf
sudo a2dissite __.conf
sudo service apache2 reload


Il est maintenant temps d'activer le premier Dispatcher qui traitera nos demandes. Pour ce faire, nous utiliserons la commande.



nohup __OVERPASS_API/bin/dispatcher --osm-base --db-dir=__DB --meta &


Le premier signe que tout s'est déroulé comme prévu est la création du fichier

osm3s_OVERPASS_API_VERSION_osm_base dans le répertoire de la base de données. Le fichier nohup.out affiche un message d'état Dispatcher - dispatcher vient de démarrer .



Cependant, le travail ne s'arrĂȘte pas lĂ : vous devez dĂ©marrer un autre Dispatcher. Tout d'abord, copiez le dossier rules dans le rĂ©pertoire contenant la base de donnĂ©es et distribuez les droits aux zones osm3s_OVERPASS_API_VERSION_areas rĂ©sultantes .




nohup __OVERPASS_API/bin/dispatcher --areas --db-dir=__DB &

chmod 666 "../db/osm3s_OVERPASS_API__areas"
nohup __OVERPASS_API/bin/rules_loop.sh __DB &


Maintenant, nous pouvons faire une demande pour la région et calculer le nombre de parcs à Ryazan. Et au fait, cela fonctionne déjà dans la barre d'adresse du navigateur.



http://localhost:/api/interpreter?data=[output:json][timeout:25]; area[name=""]->.searchArea; ( nwr["leisure"="park"](area.searchArea); ); out count;


RĂ©ponse tant attendue!



"elements": [

{
  "type": "count",
  "id": 0,
  "tags": {
    "nodes": "0",
    "ways": "57",
    "relations": "11",
    "areas": "0",
    "total": "68"
  }
}

  ]
}


Ainsi, maintenant nous pouvons nous plonger dans les problématiques d'analyse et d'amélioration: nous allons trouver le nombre de parcs, commerces et poubelles dans 25 grandes villes du District Fédéral Central et comparer ces indicateurs à l'aide des outils analytiques de la plateforme ODANT .

ODANT est une plate-forme d'intégration numérique russe conçue pour la construction de systÚmes d'information de complexité et de distribution variables. En savoir plus sur ODANT ici .
Voici à quoi ressemblent nos paramÚtres de recherche de poubelles: dans le cadre de la tùche, nous ne faisons pas de distinction entre les sites conteneurs, les poubelles autoportantes et les points de collecte des déchets solides.




nwr["amenity"="recycling"](area.searchArea);
nwr["amenity"="waste_disposal"](area.searchArea);
nwr["amenity"="waste_basket"](area.searchArea);


Nous avons exporté la sortie d'ODANT sous forme de table plate.



Ville



Urnes



Population



Population / Urnes



Vladimir



1525



356937



234



Krasnogorsk



274



175554



641



Kaluga



376



332039



883



Tambov



279



292140



1047



Moscou



11473



12678079



1105



Kolomna



111



140129



1262



Balashikha



378



507366



1342



Koursk



336



452976



1348



Rybinsk



129



184635



1431



Mytishchi



140



235504



1682



Lyubertsy



119



205295



1725



Zelenograd



140



250453



1789



Voronej



544



1058261



1945



Tver



225



449507



1998



Yaroslavl



273



608353



2228



Murom



43



106984



2488



Podolsk



114



308130



2703



Khimki



89



259550



2916



Kostroma



72



276929



3846



Lipetsk



124



509420



4108



Ryazan



118



539290



4570



Korolev



49



224348



4579



Tula



101



475161



4705



Elektrostal



32



156026



4876







Dans ce classement, la ville de Vladimir occupe la premiÚre ligne honorable: il n'y a que 234 personnes pour un lieu d'accumulation d'ordures. En utilisant les outils ODANT intégrés, nous construisons deux graphiques intéressants.











Passons à l'élément suivant - les bancs.



nwr["amenity"="bench"](area.searchArea);


Nous obtenons le résultat suivant sous forme de tableau.



Ville



Bancs



Population



Population / commerces



Vladimir



593



356937



602



Tambov



413



292140



707



Moscou



13970



12678079



908



Krasnogorsk



143



175554



1228



Balashikha



411



507366



1234



Zelenograd



185



250453



1354



Tver



268



449507



1677



Lyubertsy



115



205295



1785



Kaluga



176



332039



1887



Koursk



214



452976



2117



Murom



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





Et encore une fois, Vladimir s'est avĂ©rĂ© ĂȘtre le plus Ă  l'aise de tous les candidats: 602 personnes ne peuvent pas ĂȘtre mises sur le mĂȘme banc, mais Ă  Mytishchi, une lutte trĂšs fĂ©roce se dĂ©roule pour les places. Cependant, vous pouvez toujours Ă©tablir un calendrier.



Nous visualisons nos résultats.











Passons Ă  la partie la plus intĂ©ressante: calculer la superficie des parcs. Nous pouvons utiliser plusieurs mĂ©thodes pour rĂ©soudre ce problĂšme, mais la plus open source et la plus merveilleuse que nous trouvons est la bibliothĂšque Leaflet . Dans la requĂȘte elle-mĂȘme, vous devez remplacer out count par out geom, ce qui nous donnera les coordonnĂ©es des rĂ©gions en consĂ©quence.

Leaflet est une bibliothÚque JavaScript open source permettant d'afficher des cartes sur des sites Web. Prend en charge la plupart des plates-formes mobiles et de bureau prenant en charge HTML5 et CSS3. Leaflet permet à un développeur non familiarisé avec le SIG d'afficher facilement des cartes raster constituées de petits morceaux - tuiles, avec éventuellement des couches supplémentaires superposées au-dessus de la principale. En savoir plus sur la brochure ici .


Créons un polygone.



const polygon = L.polygon().addTo(map);
const area = L.GeometryUtil.geodesicArea(polygon.getLatLngs());


Désormais, la superficie contient la superficie de la région en m2. Nous extrayons les données des villes que nous avons sélectionnées et obtenons le tableau suivant.



Ville



Superficie totale du parc (km2)



Zone de la ville (km2)



Pourcentage d'espace occupé par les parcs



Qté

parcs



Zelenograd



4.13



37,199



0,111



26



Kaluga



12,60



168,8



0,075



140



Moscou



121,75



2561,5



0,048



1469



Lyubertsy



0,60



12,87



0,047



28



Vladimir



4,62



137,14



0,034



104



Khimki



3,55



109,8



0,032



27



Podolsk



1,29



40,39



0,032



53



Balashikha



1,78



62,8



0,028



55



Tambov



2,71



96,58



0,028



140



Tula



4,09



145,8



0,028



102



Kostroma



3,95



144,5



0,027



50



Krasnogorsk



0,69



25,65



0,027



21



Ryazan



4,32



224,163



0,019



96



Yaroslavl



3,68



205,8



0,018



176



Korolev



0,97



55,47



0,017



trente



Koursk



3,31



208,2



0,016



862



Kolomna



1,03



65,1



0,016



21



Mytishchi



0,53



34,59



0,015



trente



Voronej



8,25



596,51



0,014



414



Lipetsk



4,44



330,15



0,013



78



Tver



1,38



152,22



0,009



129



Murom



0,33



43,78



0,008



Onze



Rybinsk



0,65



101,42



0,006



62



Elektrostal



0,25



51,45



0,005



52





Selon l'OSM, Zelenograd justifie pleinement son nom - 11% de la superficie de la ville est occupée par des espaces verts. Prenons le rapport entre le nombre de résidents et le nombre de parcs.



Ville



Superficie totale des parcs (m2)



Nombre de m2 de parcs par habitant



Nombre d'habitants pour 1 parc



Kaluga



12 600 000



37,95



2372



Zelenograd



4 130 000



16,49



9633



Kostroma



3 950 000



14,26



5539



Khimki



3 550 000



13,68



9613



Vladimir



4 620 000



12,94



3432



Voronej



8 250 000



9,72



2050



Moscou



121 750 000



9,60



8630



Tambov



2 710 000



9.28



2087



Lipetsk



4,440,000



8,72



6531



Tula



4 090 000



8,61



4658



Ryazan



4 320 000



8.01



5618



Kolomna



1 030 000



7,35



6673



Koursk



3 310 000



7,31



525



Yaroslavl



3 680 000



6,05



3457



Korolev



970 000



4,32



7478



Podolsk



1 290 000



4.19



5814



Krasnogorsk



690 000



3,93



8360



Rybinsk



650 000



3,52



2978



Balashikha



1 780 000



3,51



9225



Murom



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





Présentons les données sous forme de graphiques.











Et dans la finale - la cote des villes, calculée par les places occupées.



Ville



Évaluation



Un lieu



Vladimir



12



1



Kaluga



quinze



2



Moscou



dix-huit



3



Zelenograd



21



4



Tambov



23



cinq



Krasnogorsk



35



6



Balashikha



39



7



Lyubertsy



45



8



Khimki



46



neuf



Koursk



47



Dix



Kolomna



48



Onze



Kostroma



50



12



Voronej



52



treize



Podolsk



55



Quatorze



Tula



55



quinze



Ryazan



61



seize



Tver



63



17



Yaroslavl



63



dix-huit



Murom



69



19



Rybinsk



69



20



Lipetsk



70



21



Korolev



75



22



Mytishchi



75



23



Elektrostal



94



24





Épilogue et conclusions



Par décision du jury composé d'OpenStreetMap, d'Overpass API et d'ODANT,

Vladimir prend la premiÚre place honorable et reçoit le titre «Le plus vert du district fédéral central».



Il convient de noter le fait suivant: notre recherche Ă©tait basĂ©e uniquement sur les donnĂ©es reflĂ©tĂ©es dans l'OSM. Naturellement, il y a quelques centaines de bancs Ă  Mytishchi, et Ă  Tula il y a beaucoup plus d'endroits pour l'accumulation de dĂ©chets. Nos rĂ©sultats peuvent ĂȘtre visualisĂ©s de l'autre cĂŽtĂ©, par exemple, pour Ă©valuer la dynamique de l'ajout d'objets d'infrastructure urbaine Ă  la base de donnĂ©es OSM. Cependant, en moyenne, les gens sont «tout aussi lents» pour entrer les donnĂ©es dans OSM, nous pouvons donc supposer que les donnĂ©es sont relativement fiables et mĂ©ritent d'ĂȘtre examinĂ©es.



Nous avons rĂ©ussi Ă  rĂ©soudre le problĂšme et Ă  trouver un moyen efficace de travailler avec des objets sur des cartes OSM: il s'est avĂ©rĂ© ĂȘtre une combinaison d'API Overpass et de Leaflet. En utilisant cet ensemble d'outils, nous pouvons effectuer des requĂȘtes dans la base de donnĂ©es OSM et recevoir des donnĂ©es sur le nombre d'objets, calculer les surfaces des zones. Pour la prĂ©sentation et l'analyse des donnĂ©es, nous avons mis en place une solution Web basĂ©e sur ODANT qui rĂ©pond Ă  tous nos besoins.



Il existe un grand nombre d'industries, d'entreprises et d'Ă©conomies, qui pourraient ĂȘtre aidĂ©es par cette solution. Si vous avez des idĂ©es ou des commentaires, ce serait trĂšs agrĂ©able d'en discuter. Nous avons passĂ© 28 heures propres sur la tĂąche, vous pourrez peut-ĂȘtre le faire plus rapidement.



DĂ©veloppeur Frontend principal, Infostandard - Daniel Epifanov.

RĂ©dacteur, Infostandard - Nikita Morozov.



All Articles