من يعيش بشكل جيد في روسيا؟ كيف بحثنا عن المدينة الأكثر خضرة باستخدام OpenStreetMap وواجهة برمجة تطبيقات Overpass

كل بطاقة لها أسطورة: هي التي تخبر القارئ بما هو مبين عليها وكيف. تتوافق المنازل مع المضلعات الرمادية والطرق - الأجزاء والمنحنيات والمتنزهات والمربعات مليئة باللون الأخضر الفاتح ومزينة برسم تخطيطي للشجرة. وإلى بعض الخرائط يضيفون تطبيقًا مفيدًا - قائمة بهذه الطرق مع أطوالها ، وعدد الحدائق والمتاجر وعلب القمامة.



عندما كنا نستعد لأتمتة عمل الخدمات البلدية المحلية ، لفتنا الانتباه إلى استخدام رسم الخرائط ، والذي وجدنا أنه أداة قوية وفعالة حقًا لحل مجموعة واسعة من المهام. على الخريطة ، يمكنك عرض معلومات محدثة حول موقع الكائنات ، وطرق حركة معدات الحصاد ، والنقل ، وخطة العمل وخريطة الحرارة مع المناطق "الصحية" والمشكلة.



يساعد استخدام رسم الخرائط بشكل عام في تسريع وقت رد الفعل واتخاذ القرار بشأن القضايا العاجلة ، ويبسط عملية التخطيط والتنبؤ ، والأهم من ذلك ، أن جميع المعلومات متوفرة في أكثر الأشكال المرئية.



أثناء العمل مع أحد العملاء ، واجهنا مهمة مثيرة للاهتمام - لحساب عدد العناصر على الخريطة حسب الفئة.



لايجاد



حدد المدينة "الأكثر خضرة" في المقاطعة الفيدرالية المركزية من خلال الجمع بين البيانات التالية: عدد المحلات التجارية وصناديق القمامة والمتنزهات.



معطى



رسم الخرائط. اخترنا OpenStreetMap (يشار إليه فيما يلي باسم OSM ) كنقطة انطلاق لسبب بسيط للغاية - المصدر المفتوح.



القرار



هناك عدة طرق لحل هذه المشكلة. على سبيل المثال ، يمكننا استخدام PostgreSQL للاستعلام عن قاعدة بيانات OSM والحصول على البيانات التي نحتاجها ، أو يمكننا استخدام QGIS ، وهو نظام لإنشاء المعلومات الجغرافية المكانية وتحليلها ونشرها. ومع ذلك ، وجدنا طريقة أكثر أناقة وفعالية - Overpass API .



تعد Overpass API أداة قوية لاستخراج البيانات من قاعدة بيانات OSM بناءً على طلب المستخدم. تم تحسينه للمهام من أي نطاق: من استرداد عدة عناصر من قاعدة بيانات إلى مئات الملايين من الكائنات التي يتم تحديدها وفقًا للطلب في شكل XML أو Overpass QL - نسخة مطورة من Overpass XML. اقرأ المزيد عن Overpass API هنا .
لنبدأ من الصفر: أولاً وقبل كل شيء ، تحتاج إلى نشر OSM على الخادم. يتم استخدام Ubuntu كنظام تشغيل على أجهزتنا.



س: لماذا نشر OSM الخاص بك؟

ج: للعمل مع البيانات ، نحتاج إلى واجهة برمجة تطبيقات Overpass ، التي يتمتع خادمها العام بحد أقصى لعدد الطلبات في اليوم. لهذا السبب سنقوم بنشر خادمنا مع OSM blackjack و Overpass API.

تعليمات مفصلة لتثبيت OSM هنا .
الخطوة التالية هي تثبيت Overpass API - يمكن العثور على أحدث إصدار لها هنا .



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 DIRECTORY

ملاحظة: في هذه الحالة ، يتم تنفيذ كل التصرفات في دليل التجاوز .



لذا ، أصبحت المنصة جاهزة تقريبًا - الآن يمكننا تقديم طلبنا الأول ومعرفة عدد الحدائق في المنطقة بأكملها.

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

  ]
}


نحن قريبون بالفعل: كل ما تبقى هو تقسيم المتنزهات حسب المناطق والمدن. سيساعدنا المرسل الذي يعمل بشكل منفصل ويعمل باستمرار على التعامل مع هذه المهمة .



أطلقنا واجهة برمجة التطبيقات وأضفنا " منفذ الاستماع" في الدليل /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 رسالة حالة المرسل - المرسل بدأ للتو .



ومع ذلك ، لا ينتهي العمل عند هذا الحد: فأنت بحاجة إلى بدء مرسل آخر. أولاً ، انسخ مجلد القواعد إلى الدليل بقاعدة البيانات ووزع الحقوق على 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 &


الآن يمكننا تقديم طلب للمنطقة وحساب عدد الحدائق في ريازان. وبالمناسبة ، هذا يعمل بالفعل في شريط عنوان المتصفح.



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



يوبيرتسي



119



205295



1725



زيلينوجراد



140



250453



1789



فورونيج



544



1058261



1945



تفير



225



449507



1998



ياروسلافل



273



608353



2228



موروم



43



106984



2488



بودولسك



114



308130



2703



خيمكي



89



259550



2916



كوستروما



72



276929



3846



ليبيتسك



124



509420



4108



ريازان



118



539290



4570



كوروليف



49



224348



4579



تولا



101



475161



4705



إليكتروستال



32



156026



4876







في هذا التصنيف ، تحتل مدينة فلاديمير المرتبة الأولى المشرفة: يوجد 234 شخصًا فقط في مكان واحد لتراكم القمامة. باستخدام أدوات ODANT المدمجة ، قمنا ببناء مخططين مسليين.











دعنا ننتقل إلى العنصر التالي - المقاعد.



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


نحصل على النتيجة التالية في شكل جدول.



مدينة



مقاعد



تعداد السكان



السكان / المحلات



فلاديمير



593



356937



602



تامبوف



413



292140



707



موسكو



13970



12678079



908



كراسنوجورسك



143



175554



1228



بلاشيخة



411



507366



1234



زيلينوجراد



185



250453



1354



تفير



268



449507



1677



يوبيرتسي



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





ومرة أخرى ، تبين أن فلاديمير هو الأكثر راحة بين جميع المتنافسين: لن يكون من الممكن وضع 602 شخصًا على مقعد واحد ، ولكن في Mytishchi ، هناك صراع شرس يجري على أماكن. ومع ذلك ، يمكنك دائمًا وضع جدول زمني.



نحن نتخيل نتائجنا.











دعنا ننتقل إلى الجزء الأكثر إثارة للاهتمام: حساب مساحة الحدائق. يمكننا استخدام عدة طرق لحل هذه المشكلة ، لكن أكثر المصادر المفتوحة والأكثر روعة التي نجدها هي مكتبة Leaflet . في الاستعلام نفسه ، تحتاج إلى استبدال out count مع out geom ، مما سيعطينا إحداثيات المناطق.

Leaflet هي مكتبة JavaScript مفتوحة المصدر لعرض الخرائط على مواقع الويب. يدعم معظم الأنظمة الأساسية للجوال وسطح المكتب التي تدعم HTML5 و CSS3. يسمح Leaflet للمطور غير المألوف بنظم المعلومات الجغرافية بعرض الخرائط النقطية بسهولة المكونة من مربعات صغيرة ، ربما مع طبقات إضافية متراكبة فوق المستوى الرئيسي. اقرأ المزيد عن الكتيب هنا .


لنقم بإنشاء مضلع.



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


الآن تحتوي المنطقة على مساحة المنطقة بالمتر المربع. نقوم باستخراج البيانات الخاصة بالمدن التي اخترناها ونحصل على الجدول التالي.



مدينة



إجمالي مساحة الحديقة (كم 2)



مساحة المدينة (كم 2)



نسبة المساحة التي تشغلها الحدائق



الكمية

الحدائق



زيلينوجراد



4.13



37.199



0.111



26



كالوغا



12.60



168.8



0.075



140



موسكو



121.75



2561.5



0.048



1469



يوبيرتسي



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



ياروسلافل



3.68



205.8



0.018



176



كوروليف



0.97



55.47



0.017



ثلاثين



كورسك



3.31



208.2



0.016



862



كولومنا



1.03



65.1



0.016



21



Mytishchi



0.53



34.59



0.015



ثلاثين



فورونيج



8.25



596.51



0.014



414



ليبيتسك



4.44



330.15



0.013



78



تفير



1.38



152.22



0.009



129



موروم



0.33



43.78



0.008



أحد عشر



ريبينسك



0.65



101.42



0.006



62



إليكتروستال



0.25



51.45



0.005



52





وفقًا لـ OSM ، فإن Zelenograd تبرر اسمها تمامًا - 11 ٪ من مساحة المدينة تشغلها مناطق خضراء. دعنا نحصل على نسبة عدد السكان إلى عدد الحدائق.



مدينة



إجمالي مساحة الحديقة (م 2)



عدد الحدائق المتر المربع لكل ساكن



عدد السكان لكل حديقة



كالوغا



12600000



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



فورونيج



8،250،000



9.72



2050



موسكو



121.750.000



9.60



8630



تامبوف



2،710،000



9.28



2087



ليبيتسك



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



ياروسلافل



3،680،000



6.05



3457



كوروليف



970.000



4.32



7478



بودولسك



1،290،000



4.19



5814



كراسنوجورسك



690000



3.93



8360



ريبينسك



650.000



3.52



2978



بلاشيخة



1،780،000



3.51



9225



موروم



330،000



3.08



9726



تفير



1،380،000



3.07



3485



يوبيرتسي



600000



2.92



7332



Mytishchi



530.000



2.25



7850



إليكتروستال



250000



1.60



3001





دعنا نقدم البيانات في شكل رسوم بيانية.











وفي النهاية - تصنيف المدن ، محسوبًا بالأماكن المشغولة.



مدينة



تقييم



مكان



فلاديمير



12



1



كالوغا



خمسة عشر



2



موسكو



الثامنة عشر



3



زيلينوجراد



21



4



تامبوف



23



خمسة



كراسنوجورسك



35



6



بلاشيخة



39



7



يوبيرتسي



45



8



خيمكي



46



تسع



كورسك



47



عشرة



كولومنا



48



أحد عشر



كوستروما



50



12



فورونيج



52



ثلاثة عشر



بودولسك



55



أربعة عشرة



تولا



55



خمسة عشر



ريازان



61



السادس عشر



تفير



63



17



ياروسلافل



63



الثامنة عشر



موروم



69



19



ريبينسك



69



20



ليبيتسك



70



21



كوروليف



75



22



Mytishchi



75



23



إليكتروستال



94



24





الخاتمة والاستنتاجات



بقرار من لجنة التحكيم المكونة من OpenStreetMap و Overpass API و ODANT ، يحتل

فلاديمير المركز الأول المشرف ويحصل على لقب "الأكثر خضرة في المنطقة الفيدرالية المركزية".



تجدر الإشارة إلى الحقيقة التالية: استند بحثنا فقط إلى البيانات الواردة في OSM. بطبيعة الحال ، يوجد في Mytishchi بضع مئات من المقاعد الإضافية ، وفي تولا توجد أماكن أكثر بكثير لتراكم النفايات. يمكن عرض نتائجنا من الجانب الآخر ، على سبيل المثال ، لتقييم ديناميكيات إضافة كائنات البنية التحتية الحضرية إلى قاعدة بيانات OSM. ومع ذلك ، في المتوسط ​​، يكون الأشخاص "بطيئين بنفس الدرجة" في إدخال البيانات في OSM ، لذلك يمكننا أن نفترض أن البيانات موثوقة نسبيًا وتستحق التفكير فيها.



تمكنا من حل المشكلة وإيجاد طريقة فعالة للعمل مع الكائنات على خرائط OSM: اتضح أنها مزيج من Overpass API و Leaflet. باستخدام هذه المجموعة من الأدوات ، يمكننا إجراء استعلامات لقاعدة بيانات OSM وتلقي البيانات حول عدد الكائنات وحساب مناطق المناطق. لعرض البيانات والتحليلات ، قمنا بتجميع حل قائم على الويب يعتمد على ODANT والذي يلبي جميع احتياجاتنا



هناك عدد كبير من الصناعات والأعمال والاقتصاد ، والتي يمكن أن يساعدها هذا الحل. إذا كان لديك أي أفكار أو ملاحظات ، فسيكون من الجيد مناقشتها. لقد أمضينا 28 ساعة نظيفة في المهمة ، وقد تتمكن من القيام بذلك بشكل أسرع.



مطور الواجهة الأمامية ، Infostandard - دانيال إيبيفانوف.

محرر Infostandard - نيكيتا موروزوف.



All Articles