osm2pgsql
در فصل قبل دیدیم که چگونه Postgresql را با PostGIS در ویندوز راهاندازی کنیم و چگونه یک پایگاهداده بالا بیاوریم و دادهٔ شیپفایل را در آن بار کنیم. برای آوردن دادهٔ OpenStreetMap در یک پایگاهداده، میتوانید داده را در قالب شیپفایل دریافت کنید و از بارگذار شیپفایل استفاده کنید. اما این کار شاید موجب شود تمام دادهٔ موردنظرتان را به دست نیاورید. در این فصل خواهیم آموخت چگونه از osm2pgsql استفاده کنیم. osm2pgsql یک برنامهٔ خط فرمان برای بارکردن دادهٔ خام OSM در پایگاهدادهٔ PostGIS است.
مراحل راهاندازی osm2pgsql را در ویندوز طی میکنیم، هرچند همین مراحل در سیستمعاملهای دیگر تقریباً مشابه است. پیشفرض ما این است که پایگاهداده(های) PostGIS خود را درست تنظیم کردهاید.
گرفتن osm2pgsql
برای دانلود نسخهٔ ویندوز osm2pgsql، با مرورگر وب خود به http://wiki.openstreetmap.org/wiki/Osm2pgsql#Windows بروید.

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

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

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

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

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

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

- یک semicolon به انتهای پوشهٔ قبلی اضافه کنید و سپس مسیر پوشهٔ osm2pgsql.exe را تایپ کنید. برای مثال، اگر پوشهٔ osm2pgsql را مستقیماً در دایرکتوری C:\ قرار دادهاید، مسیر آن خواهد بود:
C:\osm2pgsql\Win32
- برای ذخیرهٔ تنظیمات جدید پیدرپی روی OK کلیک کنید.
- osm2pgsql حالا باید کار کند. بیایید امتحان کنیم.
- اعلان فرمان ویندوز (Windows Command Prompt) را باز کنید. این کار را با کلیک روی منوی شروع و تایپ cmd انجام دهید. برنامهٔ Command Prompt نمایش داده میشود و میتوانید Enter را فشار دهید یا روی آن کلیک کنید.

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

- اگر پیام هشداری مانند این نمیبینید و میگوید که نمیتواند برنامهٔ osm2pgsql را پیدا کند، ممکن است متغیر Path را اشتباه وارد کرده باشید.
گرفتن دادهٔ خام OSM
قبل از اینکه بتوانیم osm2pgsql اجرا کنیم، باید مقداری دادهٔ خام OSM برای درونبرد به یک پایگاهداده داشته باشیم. اگر از قبل یک فایل .osm ندارید، فایلی را از </https://mapzen.com/data/metro-extracts> دانلود کنید. این سایت میزبان بسیاری از فایلهای استخراجشدهٔ OSM برای شهرهای مختلف است. یک شهر را پیدا کنید و فایل PBF آن را دانلود کنید. فایلهای PBF فشردهشدهٔ فایلهای معمول .osm هستند. اگر دادهٔ خام منطقهٔ دیگری را بخواهید، میتوانید از هر سرویس استخراجگر دیگری که در فصل گرفتن داده فهرست شده است، استفاده کنید.
گرفتن فایل سبک (Style)
osm2pgsql نیاز به استفاده از یک فایل Style سفارشی دارد تا تعیین کند هنگام درونبرد در پایگاهداده کدام برچسبها شامل شوند. فایل سبک پیشفرض را از اینجا میتوانید دانلود کنید.
درونبرد داده
PgAdmin III را باز کنید و همانطور که فصل قبل انجام دادید، یک پایگاهدادهٔ جدید به نام osm بسازید. برای درونبرد داده، برنامهٔ osm2pgsql را از طریق خط فرمان اجرا میکنیم.
- روی منوی شروع کلیک کنید و بنویسید cmd و Enter را بزنید تا 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 را بزنید، اگر همهچیز خوب پیش برود، فرآیند باید شروع شود. ممکن است چند دقیقه طول بکشد تا تمام داده در پایگاهداده بار شود.

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

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

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

اگر به جداول خصوصیت (attribute) لایهها نگاه کنید، میبینید که نگاشتی از خصوصیتها به برچسبهای OSM ایجاد شدهاست. برچسبهای مشخصی که درونبرد شدهاند، در فرآیند درونبرد osm2pgsql تعریف میشوند. برای اضافهکردن تگهای خاصی که بهطور پیشفرض گنجانده نشدهاند، میتوانید فایل style را ویرایش کنید که osm2pgsql از آن به منظور تعریف طرح داده استفاده میکند.
خلاصه
هنگامی که بخواهید دادهٔ OpenStreetMap را به پایگاهدادهٔ خود درونبرد کنید، osm2pgsql ابزاری عالی است. مخصوصاً زمانی که میخواهید روزآمدترین دادهٔ OSM را به دست آورید و خصوصیتهای موردنظر خود را شخصیسازی کنید، یا هنگام کار روی پروژههای پیچیدهتر، osm2pgsql بسیار مفید خواهد بود.
ابزار درونبرد دیگری به نام imposm اخیراً ساخته شده است که نسبت به osm2pgsql دارای بهبودهایی در سرعت و چیزهای دیگر است، اگر چه در زمان نگارش این نوشتار نواقصی در قابلیتهای کلیدی دیگر دارد که قول داده شده در نسخهٔ ۳ از imposm رفع شود.
برای اطلاعات بیشتر دربارهٔ osm2pgsql، به ویکی OSM مراجعه کنید: http://wiki.openstreetmap.org/wiki/Osm2pgsql.