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