osm2pgsql

در فصل قبل دیدیم که چگونه Postgresql را با PostGIS در ویندوز راه‌اندازی کنیم و چگونه یک پایگاه‌داده بالا بیاوریم و دادهٔ شیپ‌فایل را در آن بار کنیم. برای آوردن دادهٔ OpenStreetMap در یک پایگاه‌داده، می‌توانید داده را در قالب شیپ‌فایل دریافت کنید و از بارگذار شیپ‌فایل استفاده کنید. اما این کار شاید موجب شود تمام دادهٔ موردنظرتان را به دست نیاورید. در این فصل خواهیم آموخت چگونه از osm2pgsql استفاده کنیم. osm2pgsql یک برنامهٔ خط فرمان برای بارکردن دادهٔ خام OSM در پایگاه‌دادهٔ PostGIS است.

مراحل راه‌اندازی osm2pgsql را در ویندوز طی می‌کنیم، هرچند همین مراحل در سیستم‌عامل‌های دیگر تقریباً مشابه است. پیشفرض ما این است که پایگاه‌داده(های) PostGIS خود را درست تنظیم کرده‌اید.

گرفتن osm2pgsql

برای دانلود نسخهٔ ویندوز osm2pgsql، با مرورگر وب خود به http://wiki.openstreetmap.org/wiki/Osm2pgsql#Windows بروید.

windows binary

  • فایل با نام osm2pgsql.zip را دانلود کنید.
  • فایل زیپ را روی رایانهٔ خود استخراج کنید. پوشهٔ استخراج‌شده را به مسیری منتقل کنید که بعداً آن را جابه‌جا نکنید، زیرا می‌خواهیم مکان آن را به path سیستم اضافه کنیم.

unzip it

  • در پوشهٔ osm2pgsql که از زیپ خارج کردید، فایلی به نام osm2pgsql.exe وجود دارد. این برنامه‌ای است که برای درون‌برد (Import) داده اجرایش می‌کنیم، اما برای اینکه ویندوز بتواند آن را پیدا کند، باید محل آن را به system path اضافه کنیم. روی منوی شروع کلیک کنید و بنویسید system path

system path

  • باید گزینه‌ای با نام Edit the system environment variables ببینید. روی آن کلیک کنید.

edit variables

  • روی دکمهٔ Environment Variables کلیک کنید.

env variables

  • در پایین صفحه متغیری با نام Path را پیدا کنید و روی Edit…‎ کلیک کنید.

find path

  • باید پوشهٔ حاوی osm2pgsql.exe را به متغیر Path اضافه کنید.

edit path

  • یک semicolon به انتهای پوشهٔ قبلی اضافه کنید و سپس مسیر پوشهٔ osm2pgsql.exe را تایپ کنید. برای مثال، اگر پوشهٔ osm2pgsql را مستقیماً در دایرکتوری C:\ قرار داده‌اید، مسیر آن خواهد بود:

C:\osm2pgsql\Win32

  • برای ذخیرهٔ تنظیمات جدید پی‌درپی روی OK کلیک کنید.
  • osm2pgsql حالا باید کار کند. بیایید امتحان کنیم.
  • اعلان فرمان ویندوز (Windows Command Prompt) را باز کنید. این کار را با کلیک روی منوی شروع و تایپ cmd انجام دهید. برنامهٔ Command Prompt نمایش داده می‌شود و می‌توانید Enter را فشار دهید یا روی آن کلیک کنید.

cmd

  • در پنجرهٔ فرمان سیاه‌رنگی که باز می‌شود، تایپ کنید:

osm2pgsql

  • اگر همه‌چیز درست کار کند، باید پیامی شبیه به این دریافت کنید:

osm2pgsql test

  • اگر پیام هشداری مانند این نمی‌بینید و می‌گوید که نمی‌تواند برنامهٔ osm2pgsql را پیدا کند، ممکن است متغیر Path را اشتباه وارد کرده باشید.

گرفتن دادهٔ خام OSM

قبل از اینکه بتوانیم osm2pgsql اجرا کنیم، نیاز به مقداری دادهٔ خام OSM برای درون‌برد به یک پایگاه‌داده داریم. اگر از قبل یک فایل ‎.osm ندارید، می‌توانید فایلی را از https://download.bbbike.org/osm/bbbike/ دانلود کنید. این سایت میزبان بسیاری از فایل‌های استخراج‌شدهٔ OSM برای شهرهای مختلف است. یک شهر را پیدا کنید و فایل PBF آن را دانلود کنید. فایل‌های PBF نسخه فشرده‌شدهٔ فایل‌های معمولی ‎.osm هستند. اگر دادهٔ خام منطقهٔ دیگری را بخواهید، می‌توانید از هر سرویس استخراجگر دیگری که در فصل گرفتن داده فهرست شده است، استفاده کنید.

گرفتن فایل سبک (Style)

osm2pgsql نیاز به استفاده از یک فایل Style سفارشی دارد تا تعیین کند هنگام درون‌برد در پایگاه‌داده کدام برچسب‌ها شامل شوند. فایل سبک پیش‌فرض را از اینجا می‌توانید دانلود کنید.

درون‌برد داده

PgAdmin III را باز کنید و همان‌طور که فصل قبل انجام دادید، یک پایگاه‌دادهٔ جدید به نام osm بسازید. برای درون‌برد داده، برنامهٔ osm2pgsql را از طریق خط فرمان اجرا می‌کنیم.

  • روی منوی شروع کلیک کنید و بنویسید cmd و Enter را بزنید تا Command Prompt باز شود.

command prompt

در اینجا برنامهٔ osm2pgsql را با چندین گزینه اجرا خواهیم کرد. حداقل موارد زیر را باید به برنامه بدهیم:

  • محل فایل دادهٔ OSM
  • نام پایگاه‌داده و نام کاربری پایگاه‌داده
  • فایل سبک (style) که تعیین می‌کند چه برچسب‌هایی از OSM به پایگاه‌داده درون‌برد خواهد شد

فایل OSM خود را در دایرکتوری C:\ قرار داده‌ایم تا کار را آسان‌تر کنیم.

  • دستور زیر را وارد کنید، فقط محل فایل OSM و فایل سبک را با مسیر فایل‌های خود جایگزین کنید.

    osm2pgsql -c -d osm -U postgres -H localhost -S C:\default.style C:\bangkok.osm.pbf  
    
  • Enter را بزنید، اگر همه‌چیز خوب پیش برود، فرآیند باید شروع شود. ممکن است چند دقیقه طول بکشد تا تمام داده در پایگاه‌داده بار شود.

osm2pgsql output

  • اگر فایل خام OSMتان بزرگ است، شاید لازم باشد حافظهٔ بیشتری به پردازهٔ osm2pgsql اختصاص دهید. برای این منظور، عبارت زیر را به فرمان اضافه کنید:

    --cache 600
    

آزمایش‌کردن

می‌توانیم آزمایش کنیم که فرآیند درون‌برد موفق بوده و دادهٔ پایگاه‌داده‌مان را با استفاده از QGIS مشاهده کنیم.

  • QGIS را باز کنید و روی دکمهٔ Add PostGIS Layers کلیک کنید. qgis add postgis button

  • در قسمت Connections در بالا، روی New کلیک کنید.
  • به اتصال جدید یک نام بدهید. در قسمت database بنویسید osm (نام پایگاه داده‌تان).
  • نام کاربری postgres و گذرواژهٔ خود را در زیر وارد کنید.

connection settings

  • روی OK کلیک کنید تا تنظیمات اتصال ذخیره شود. سپس برای اتصال به کارساز PostgreSQL روی Connect کلیک کنید.
  • در کنار public کلیک کنید تا همهٔ لایه‌های (جداول) پایگاه‌دادهٔ خود را ببینید. توجه کنید که osm2pgsql برای انواع مختلف اشیا - نقطه‌ها، خط‌ها و چندضلعی‌ها - یک جدول جداگانه ایجاد می‌کند. یک جدول نیز برای جاده‌ها ایجاد می‌کند که فقط شامل جاده‌های اصلی است.

postgis layers

  • یک یا چند لایه را انتخاب کنید و روی Add (افزودن) کلیک کنید. در صورت درخواست، WGS84 را به‌عنوان CRS انتخاب کنید.
  • اگر همه‌چیز موفقیت‌آمیز باشد، خواهید دید که لایه‌هایی که انتخاب کرده‌اید در QGIS نمایش داده می‌شوند.

osm in qgis

خلاصه

هنگامی که بخواهید دادهٔ OpenStreetMap را به پایگاه‌دادهٔ خود درون‌برد کنید، osm2pgsql ابزاری عالی است. مخصوصاً زمانی که می‌خواهید روزآمدترین دادهٔ OSM را به دست آورید و خصوصیت‌های موردنظر خود را شخصی‌سازی کنید، یا هنگام کار روی پروژه‌های پیچیده‌تر، osm2pgsql بسیار مفید خواهد بود.

ابزار درون‌برد دیگری به نام imposm اخیراً ساخته شده است که نسبت به osm2pgsql دارای بهبودهایی در سرعت و چیزهای دیگر است، اگر چه در زمان نگارش این نوشتار نواقصی در قابلیت‌های کلیدی دیگر دارد که قول داده شده در نسخهٔ ۳ از imposm رفع شود.

برای اطلاعات بیشتر دربارهٔ osm2pgsql، به ویکی OSM مراجعه کنید: http://wiki.openstreetmap.org/wiki/Osm2pgsql.