Als wir uns darauf vorbereiteten, die Arbeit der lokalen kommunalen Dienste zu automatisieren, machten wir auf die Verwendung von Kartografie aufmerksam, die sich als ein wirklich leistungsfähiges und effektives Werkzeug zur Lösung einer Vielzahl von Aufgaben herausstellte. Auf der Karte können Sie aktuelle Informationen über den Standort von Objekten, Bewegungswege von Erntemaschinen, Transport, einen Arbeitsplan und eine Wärmekarte mit problematischen und „gesunden“ Bereichen anzeigen.
Die Verwendung von Kartografie im Allgemeinen beschleunigt die Reaktionszeit und Entscheidungsfindung bei dringenden Problemen, vereinfacht den Planungs- und Prognoseprozess und vor allem sind alle Informationen in der visuellsten Form verfügbar.
Während der Arbeit mit einem der Kunden standen wir vor einer interessanten Aufgabe - die Anzahl der Objekte auf der Karte nach Kategorien zu berechnen.
Finden
Bestimmen Sie die „grünste“ Stadt im zentralen Bundesdistrikt durch die Kombination der folgenden Daten: Anzahl der Geschäfte, Mülleimer und Parks.
Gegeben
Kartographie. Wir haben OpenStreetMap (im Folgenden - OSM ) aus einem sehr einfachen Grund als Sprungbrett gewählt - Open Source.
Entscheidung
Es gibt verschiedene Ansätze zur Lösung dieses Problems. Beispielsweise können wir PostgreSQL verwenden, um die OSM-Datenbank abzufragen und die erforderlichen Daten abzurufen, oder QGIS verwenden, ein System zum Erstellen, Analysieren und Veröffentlichen von Geoinformationen. Wir haben jedoch einen eleganteren und effizienteren Weg gefunden - die Überführungs-API .
Die Überführungs-API ist ein leistungsstarkes Tool zum Extrahieren von Daten aus der OSM-Datenbank auf Benutzeranforderung. Es ist für Aufgaben jeder Größenordnung optimiert: vom Abrufen mehrerer Elemente aus einer Datenbank bis zu Hunderten von Millionen von Objekten, die gemäß einer Anforderung in Form von XML oder Overpass QL ausgewählt werden - einer aktualisierten Version von Overpass XML. Lesen Sie mehr über die Überführung API hier .Beginnen wir bei Null: Zunächst müssen Sie OSM auf dem Server bereitstellen. Ubuntu wird als Betriebssystem auf unserem Computer verwendet.
F: Warum sollten Sie Ihr OSM bereitstellen?
A: Um mit Daten arbeiten zu können, benötigen wir die Overpass-API, deren öffentlicher Server die Anzahl der Anforderungen pro Tag begrenzt. Aus diesem Grund werden wir unseren Server mit OSM
Detaillierte Anweisungen zur Installation von OSM finden Sie hier .Der nächste Schritt ist die Installation der Overpass-API. Die neueste Version finden Sie hier .
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
Nach der Installation müssen Sie eine Datenbank erstellen. Wir brauchen keine Datenbank der ganzen Welt, daher werden wir den Geofabrik- Dienst nutzen , mit dem wir Daten für die angegebenen Verwaltungsregionen abrufen können.
Eine würdige Alternative zur Geofabrik ist BBBike .
Wir laden die aus dem Verzeichnis Europa> Russische Föderation> Zentraler Bundesbezirk heruntergeladene Datenbank im Format .osm.bz2 wie folgt herunter und entpacken sie :
PATH_TO_INIT_OSM3S.SH PATH_TO_FILE_BZ2 PATH_WERE_Unpack_OVERPASS_API-VERZEICHNIS
Hinweis: In diesem Fall werden alle Aktionen im Überführungsverzeichnis ausgeführt .
Die Plattform ist also fast fertig - jetzt können wir unsere erste Anfrage stellen und die Anzahl der Parks in der gesamten Region herausfinden.
PATH_TO_OSM3S_QUERY --db-dir = PATH_To_DB
Unsere Anfrage und Antwort sieht folgendermaßen aus:
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"
}
}
]
}
Wir sind schon nah dran: Alles, was bleibt, ist die Aufteilung der Parks nach Regionen und Städten. Ein separat laufender und ständig laufender Dispatcher hilft uns, diese Aufgabe zu bewältigen .
Wir starten die API und fügen Listen PORT im Verzeichnis /etc/apache2/ports.conf hinzu .
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
Überprüfen Sie die Konfiguration. Es sollte so aussehen.
<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>
Als nächstes schalten wir den neuen Host ein und schicken den alten zur Ruhe.
sudo a2ensite .conf
sudo a2dissite 000-default.conf
sudo a2dissite __.conf
sudo service apache2 reload
Jetzt ist es an der Zeit, den ersten Dispatcher zu aktivieren, der unsere Anforderungen bearbeitet. Dazu verwenden wir den Befehl.
nohup __OVERPASS_API/bin/dispatcher --osm-base --db-dir=__DB --meta &
Das erste Anzeichen dafür, dass alles nach Plan verlief, ist die Erstellung der Datei
osm3s_OVERPASS_API_VERSION_osm_base im Datenbankverzeichnis. Die Datei nohup.out zeigt eine Statusmeldung Dispatcher an - Dispatcher wurde gerade gestartet .
Die Arbeit endet jedoch nicht dort: Sie müssen einen anderen Dispatcher starten. Kopieren Sie zunächst die Regeln Ordner in das Verzeichnis mit der Datenbank und verteilen die Rechte an den resultierenden 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 &
Jetzt können wir eine Anfrage für die Region stellen und die Anzahl der Parks in Rjasan berechnen. Das funktioniert übrigens schon in der Adressleiste des Browsers.
http://localhost:/api/interpreter?data=[output:json][timeout:25]; area[name=""]->.searchArea; ( nwr["leisure"="park"](area.searchArea); ); out count;
Lang erwartete Antwort!
"elements": [
{
"type": "count",
"id": 0,
"tags": {
"nodes": "0",
"ways": "57",
"relations": "11",
"areas": "0",
"total": "68"
}
}
]
}
Jetzt können wir uns mit Analyse- und Verbesserungsproblemen befassen: Wir werden die Anzahl der Parks, Geschäfte und Mülleimer in 25 Großstädten des Central Federal District ermitteln und diese Indikatoren mithilfe der Analysetools der ODANT- Plattform vergleichen .
ODANT ist eine in Russland hergestellte digitale Integrationsplattform, die zum Aufbau von Informationssystemen unterschiedlicher Komplexität und Verbreitung entwickelt wurde. Lesen Sie hier mehr über ODANT .So sehen unsere Parameter für die Suche nach Abfallbehältern aus: Im Rahmen der Aufgabe unterscheiden wir nicht zwischen Containerstandorten, freistehenden Abfallbehältern und Sammelstellen für feste Abfälle.
nwr["amenity"="recycling"](area.searchArea);
nwr["amenity"="waste_disposal"](area.searchArea);
nwr["amenity"="waste_basket"](area.searchArea);
Wir haben die Ausgabe von ODANT als flache Tabelle exportiert.
Stadt |
Urnen |
Population |
Bevölkerung / Urnen |
Vladimir |
1525 |
356937 |
234 |
Krasnogorsk |
274 |
175554 |
641 |
Kaluga |
376 |
332039 |
883 |
Tambow |
279 |
292140 |
1047 |
Moskau |
11473 |
12678079 |
1105 |
Kolomna |
111 |
140129 |
1262 |
Balashikha |
378 |
507366 |
1342 |
Kursk |
336 |
452976 |
1348 |
Rybinsk |
129 |
184635 |
1431 |
Mytishchi |
140 |
235504 |
1682 |
Lyubertsie |
119 |
205295 |
1725 |
Zelenograd |
140 |
250453 |
1789 |
Woronesch |
544 |
1058261 |
1945 |
Tver |
225 |
449507 |
1998 |
Jaroslawl |
273 |
608353 |
2228 |
Murom |
43 |
106984 |
2488 |
Podolsk |
114 |
308130 |
2703 |
Khimki |
89 |
259550 |
2916 |
Kostroma |
72 |
276929 |
3846 |
Lipetsk |
124 |
509420 |
4108 |
Rjasan |
118 |
539290 |
4570 |
Korolev |
49 |
224348 |
4579 |
Tula |
101 |
475161 |
4705 |
Elektrostal |
32 |
156026 |
4876 |
In dieser Bewertung belegt die Stadt Wladimir die ehrenwerte erste Zeile: Es gibt nur 234 Personen für einen Ort der Müllansammlung. Mit den integrierten ODANT-Tools erstellen wir zwei amüsante Diagramme.
Fahren wir mit dem nächsten Element fort - den Bänken.
nwr["amenity"="bench"](area.searchArea);
Wir erhalten das folgende Ergebnis in Form einer Tabelle.
Stadt |
Bänke |
Population |
Bevölkerung / Geschäfte |
Vladimir |
593 |
356937 |
602 |
Tambow |
413 |
292140 |
707 |
Moskau |
13970 |
12678079 |
908 |
Krasnogorsk |
143 |
175554 |
1228 |
Balashikha |
411 |
507366 |
1234 |
Zelenograd |
185 |
250453 |
1354 |
Tver |
268 |
449507 |
1677 |
Lyubertsie |
115 |
205295 |
1785 |
Kaluga |
176 |
332039 |
1887 |
Kursk |
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 |
Und wieder stellte sich heraus, dass Wladimir der bequemste aller Bewerber war: 602 Menschen können nicht auf eine Bank gesetzt werden, aber in Mytischchi wird ein heftiger Kampf um Plätze geführt. Sie können jedoch jederzeit einen Zeitplan erstellen.
Wir visualisieren unsere Ergebnisse.
Kommen wir zum interessantesten Teil: der Berechnung der Parkfläche. Wir können dieses Problem mit verschiedenen Methoden lösen, aber das Open Source und Wunderbarste, das wir finden, ist die Leaflet- Bibliothek . In der Abfrage selbst müssen Sie out count durch out geom ersetzen, wodurch wir die Koordinaten der Regionen erhalten.
Leaflet ist eine Open-Source-JavaScript-Bibliothek zum Anzeigen von Karten auf Websites. Unterstützt die meisten mobilen und Desktop-Plattformen, die HTML5 und CSS3 unterstützen. Mit Leaflet kann ein mit GIS nicht vertrauter Entwickler auf einfache Weise Rasterkarten anzeigen, die aus kleinen Kacheln bestehen, wobei möglicherweise zusätzliche Ebenen über die Hauptkacheln gelegt werden. Lesen Sie mehr über Prospekt hier .
Lassen Sie uns ein Polygon erstellen.
const polygon = L.polygon().addTo(map);
const area = L.GeometryUtil.geodesicArea(polygon.getLatLngs());
Jetzt enthält die Fläche die Fläche der Region in m2. Wir extrahieren die Daten für die von uns ausgewählten Städte und erhalten die folgende Tabelle.
Stadt |
Gesamtparkfläche (km2) |
Stadtgebiet (km2) |
Prozentsatz der von Parks belegten Fläche |
Menge Parks |
Zelenograd |
4.13 |
37.199 |
0,111 |
26 |
Kaluga |
12.60 |
168.8 |
0,075 |
140 |
Moskau |
121,75 |
2561.5 |
0,048 |
1469 |
Lyubertsie |
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 |
Tambow |
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 |
Rjasan |
4.32 |
224,163 |
0,019 |
96 |
Jaroslawl |
3.68 |
205,8 |
0,018 |
176 |
Korolev |
0,97 |
55,47 |
0,017 |
dreißig |
Kursk |
3.31 |
208.2 |
0,016 |
862 |
Kolomna |
1,03 |
65.1 |
0,016 |
21 |
Mytishchi |
0,53 |
34,59 |
0,015 |
dreißig |
Woronesch |
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 |
elf |
Rybinsk |
0,65 |
101,42 |
0,006 |
62 |
Elektrostal |
0,25 |
51.45 |
0,005 |
52 |
Laut OSM rechtfertigt Zelenograd seinen Namen voll und ganz - 11% der Stadtfläche sind von Grünflächen besetzt. Lassen Sie uns das Verhältnis der Anzahl der Einwohner zur Anzahl der Parks ermitteln.
Stadt |
Gesamtparkfläche (m2) |
Anzahl der m2 Parks pro Einwohner |
Einwohnerzahl pro 1 Park |
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 |
Woronesch |
8.250.000 |
9.72 |
2050 |
Moskau |
121.750.000 |
9,60 |
8630 |
Tambow |
2.710.000 |
9.28 |
2087 |
Lipetsk |
4.440.000 |
8.72 |
6531 |
Tula |
4.090.000 |
8.61 |
4658 |
Rjasan |
4.320.000 |
8.01 |
5618 |
Kolomna |
1.030.000 |
7.35 |
6673 |
Kursk |
3.310.000 |
7.31 |
525 |
Jaroslawl |
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 |
Lyubertsie |
600.000 |
2.92 |
7332 |
Mytishchi |
530.000 |
2.25 |
7850 |
Elektrostal |
250.000 |
1,60 |
3001 |
Lassen Sie uns die Daten in Form von Diagrammen präsentieren.
Und im Finale - die Bewertung der Städte, berechnet anhand der besetzten Plätze.
Stadt |
Bewertung |
Ein Ort |
Vladimir |
12 |
1 |
Kaluga |
fünfzehn |
2 |
Moskau |
achtzehn |
3 |
Zelenograd |
21 |
4 |
Tambow |
23 |
fünf |
Krasnogorsk |
35 |
6 |
Balashikha |
39 |
7 |
Lyubertsie |
45 |
8 |
Khimki |
46 |
neun |
Kursk |
47 |
zehn |
Kolomna |
48 |
elf |
Kostroma |
50 |
12 |
Woronesch |
52 |
dreizehn |
Podolsk |
55 |
vierzehn |
Tula |
55 |
fünfzehn |
Rjasan |
61 |
Sechszehn |
Tver |
63 |
17 |
Jaroslawl |
63 |
achtzehn |
Murom |
69 |
19 |
Rybinsk |
69 |
20 |
Lipetsk |
70 |
21 |
Korolev |
75 |
22 |
Mytishchi |
75 |
23 |
Elektrostal |
94 |
24 |
Nachwort und Schlussfolgerungen
Mit der Entscheidung der Jury aus OpenStreetMap, Overpass API und ODANT belegt
Vladimir den ersten Platz und erhält den Titel „The Greenest in the Central Federal District“.
Es ist erwähnenswert, dass unsere Forschung ausschließlich auf den im OSM wiedergegebenen Daten beruhte. Natürlich gibt es in Mytischchi ein paar hundert Bänke, und in Tula gibt es viel mehr Orte, an denen sich Abfälle ansammeln können. Unsere Ergebnisse können beispielsweise von der anderen Seite betrachtet werden, um die Dynamik des Hinzufügens von Objekten der städtischen Infrastruktur zur OSM-Datenbank zu bewerten. Im Durchschnitt ist die Eingabe von Daten in OSM jedoch „genauso langsam“, sodass wir davon ausgehen können, dass die Daten relativ zuverlässig und erwägenswert sind.
Wir haben es geschafft, das Problem zu lösen und einen effektiven Weg zu finden, um mit Objekten auf OSM-Maps zu arbeiten: Es stellte sich heraus, dass es sich um eine Kombination aus Overpass-API und Leaflet handelt. Mit Hilfe dieser Tools können wir Abfragen an die OSM-Datenbank durchführen, Daten zur Anzahl der Objekte empfangen und die Flächen der Flächen berechnen. Für die Datenpräsentation und -analyse haben wir eine webbasierte Lösung auf Basis von ODANT zusammengestellt, die alle unsere Anforderungen erfüllt.
Es gibt eine große Anzahl von Branchen, Unternehmen und Volkswirtschaften, denen diese Lösung helfen könnte. Wenn Sie Ideen oder Feedback haben, wäre es sehr schön zu diskutieren. Wir haben 28 saubere Stunden mit der Aufgabe verbracht. Möglicherweise können Sie sie schneller erledigen.
Leitender Frontend-Entwickler, Infostandard - Daniel Epifanov.
Herausgeber, Infostandard - Nikita Morozov.