Wer lebt gut in Russland? Wie wir mit OpenStreetMap und der Overpass-API nach der grünsten Stadt gesucht haben

Jede Karte hat eine Legende: Sie sagt dem Leser, was und wie darauf angegeben ist. Häuser entsprechen grauen Polygonen, Straßen - Segmenten und Kurven, Parks und Plätze sind hellgrün gefüllt und mit einem Baumpiktogramm verziert. Und einigen Karten fügen sie eine nützliche Anwendung hinzu - eine Liste dieser Straßen mit ihrer Länge, der Anzahl der Parks, Geschäfte und Mülleimer.



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 Blackjack und Overpass API bereitstellen.

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.



All Articles