اگر بخواید داخل نرمافزاری که دارید توسعه میدید از نقشه استفاده کنید، سایتای زیادی هستن که این امکان رو بهتون میدن؛ اما اگه به هر دلیلی نخواید از اونها استفاده کنید (مثلا نرمافزارتون توی شبکه داخلی باشه و دسترسی به اینترنت نداشته) مجبورید که خودتون یه نقشه بالا بیارید.
برای بالا آوردن نقشه روی سیستم یا سرور خودتون، ابزارها و نرمافزارهای مختلفی مثل ThinkGeo ،MapTiler ،Mapbox Atlas و ... وجود دارن؛ اما ما تو این مقاله قصد داریم در مورد OpenStreetMap صحبت کنیم؛ چرا که:
توی تجربه شخصیمون، OpenStreetMap کاملا پاسخگوی نیازهامون بوده و احساس نیاز نکردیم تا به سولوشنهای دیگه فک کنیم.
با این اوصاف بریم سراغ نصب و راهاندازیش.
فرض بر اینه که میخوایم OpenStreetMap رو روی اوبونتو سرور بریزیم و دایره لغتمون یه مقدار لینوکسی خواهد بود.
از اونجایی که میخوایم OpenStreetMap رو با داکر نصب کنیم لازمه روی سیستممون داکر نصب باشه؛ توی این مقاله گفتم چجوری میشه داکر و داکر کامپوز رو روی اوبونتو نصب کرد.
همچنین چون میخوایم ایمیجش رو از DockerHub دانلود کنیم لازمه از تحریمشکن استفاده کنیم که توی این مقاله فعالسازی شکن توی اوبونتو رو توضیح دادم.
برا اینکه خیلی درگیر sudo و دسترسی و اینا نشیم با زدن دستور پایین دسترسی root بگیریم:
sudo su
حالا پوشههای مورد نیازمون رو بسازیم و دسترسیشونو میزون کنیم:
mkdir -p /opt/osm/data mkdir -p /opt/osm/tiles mkdir -p /opt/osm/nodes chmod 777 /opt/osm/tiles chmod 777 /opt/osm/nodes
فایل PBF حاوی دیتای نقشه (اماکن، خیابونا، مرزها و ...) هستش؛ برای دانلود:
فایل PBF مورد نظرتون رو که دانلود کردید داخل مسیر opt/osm با اسم data.osm.pbf بریزید؛ البته با این دستورم میتونیم مستقیم فایل مربوط به کشور ایران رو داخل خود سرور دانلود کنیم:
wget https://download.geofabrik.de/asia/iran-latest.osm.pbf -O /opt/osm/data.osm.pbf
اول ایمیج OpenStreetMap رو دانلود کنیم:
docker pull overv/openstreetmap-tile-server:v1.6.0
اگه بخوایم نقشه یه منطقه کوچیک (مثلا یه کشور) رو import کنیم میتونیم از این دستور استفاده کنیم:
docker run \ --rm \ --name osm-pbf-importer \ -e THREADS=$(nproc) \ -v /opt/osm/data.osm.pbf:/data.osm.pbf \ -v /opt/osm/data:/var/lib/postgresql/12/main \ overv/openstreetmap-tile-server:v1.6.0 \ import
اما اگه بخوایم نقشه یه منطقه بزرگ یا کل دنیا رو import کنیم بهتره از این دستور استفاده کنیم:
docker run \ --rm \ -d \ --name osm-pbf-importer \ -e THREADS=$(nproc) \ -e "OSM2PGSQL_EXTRA_ARGS=--flat-nodes /nodes/flat_nodes.bin -C 65536" \ -v /opt/osm/data.osm.pbf:/data.osm.pbf \ -v /opt/osm/nodes:/nodes \ -v /opt/osm/data:/var/lib/postgresql/12/main \ overv/openstreetmap-tile-server:v1.6.0 \ import
چندتا نکته در مورد دستور بالا:
docker logs osm-pbf-importer
rm -rf /opt/osm/nodes
برای اجرای OpenStreetMap هم کافیه این دستور رو اجرا کنیم:
docker run \ --name openstreetmap \ --restart unless-stopped \ -p 8080:80 \ -e THREADS=$(nproc) \ -e "OSM2PGSQL_EXTRA_ARGS=-C 65536" \ -e ALLOW_CORS=enabled \ -v /opt/osm/data:/var/lib/postgresql/12/main \ -v /opt/osm/tiles:/var/lib/mod_tile \ -d overv/openstreetmap-tile-server:v1.6.0 \ run
مقدار THREADS و کش (C-) رو همونطور که بالا گفته شد تغییر بدید.
چند لحظه بعد از اجرا، سرور نقشه روی پورت ۸۰۸۰ قابل استفاده خواهد بود:
برای اطلاعات بیشتر میتونید به این صفحه مراجعه کنید؛ من هم در قسمت نظرات یا ایمیل mkay1375@gmail.com در خدمت هستم.