آموزش OpenStreetMap و مقایسه با نقشه گوگل مپ
اوپن استریت مپ یا OSM یا openstreetmap پروژه ای مشارکتی برای تولید نقشه ای است که به رایگان در اختیار همه قرار گیرد و در واقع یک پروژه اوپن سورس است. از این جهت آشنایی با OSM می تواند آگاهی زیادی برای استفاده از این داده ها ایجاد کند.
ایرادی که داده های گوگل مپز دارند این است که اختصاصی بوده و دستیابی به آن ها به شدت دشوار است و معمولاً دسترسی به انواع دیگر داده ها با هزینه های زیادی همراه خواهد بود.
بنابراین ما به چیزی احتیاج داشتیم که افراد از سرتاسر دنیا بتوانند آن را ویرایش کنند، و راه حل این مشکل OpenStreetMap می باشد، که مشارکت کنندگان را تشویق به ویرایش این “نقشه ی آزاد” به صورت روزانه می کند.
از این رو که “آزاد” فلسفه کلیدی OpenStreetMap می باشد، این “آزاد” بودن برای داده ها نیز صدق می کند. بنابراین به شما نشان می دهیم که چگونه می توانید داده های OSM را دانلود کنید (البته که بدون هیچ هزینه ای).
اوپن استریت مپ از دید سایت ویکی پدیا
اوپناستریتمپ (به انگلیسی: OpenStreetMap) یا نقشه شهری باز, پروژه ای مشارکتی برای ایجاد یک نقشه قابل ویرایش رایگان از جهان است.
این پروژه، سال ۲۰۰۴ در لندن، توسط استیو کاست کلید خورد.
هدف پروژه جمعآوری پایگاه دادهای رایگان از اطلاعات جغرافیایی در سراسر دنیا بود. حجم زیادی از دادههای جغرافیایی مانند جادهها، ساختمانها و اماکن دیدنی میتوانند به این بانک اطلاعاتی اضافه شوند.
مانند سایر پروژههای مشارکتی موجود در شبکۀ اینترنت، هر کاربر میتواند با طی یک مسیر کوتاه ثبت نام کرده و در ویرایش دادهها مشارکت کند. این روش ساده امکان جذب ۱۹۰۰۰۰۰ عضو (تا ژانویه ۲۰۱۵) را در این پروژه فراهم کرده است.
نقشهها با استفاده از دادههای حاصل از دستگاههای قابل حمل جیپیاس، عکاسی هوایی، منابع رایگان دیگر یا به سادگی از دانش محلی ترسیم میشوند. هم تصاویر برداری و هم تصاویر غیربرداری تحت اجازهنامه کرییتیو کامانز قابل دریافت هستند.
با تغییر مدل اجازهنامه گوگل مپس در اوایل سال ۲۰۱۲ و پیش بینی افزایش هزینۀ استفاده از این سرویس، تعداد بیشتری از کسب و کارها رو به امکاناتی آوردند که اُپن استریت مپ به صورت رایگان دراختیار آنها قرار میداد. برای مثال میتوان به فوراسکور که یک شبکۀ اجتماعی مکان گرا است اشاره کرد.
فرق بین OpenStreetMap با GoogleMaps:
گوگل دیگه نقشههاش رو به صورت رایگان در اختیار استفادهکنندگان قرار نمیده و از چند روز پیش به کسانی که قبلا در پروژههاشون ازش استفاده کردن ایمیل داده از زمان مشخص شده در اطلاعیه به بعد باید حسابمالی رو به گوگل اضافه کنند تا چنانچه هزینه استفاده از نقشه، چه خود نقشه چه سرویسهای مربوط به مسیریابی و … بیشتر از ۲۰۰دلار در ماه شد اون رو از حساب مشتری کم کنه.
دادههای OSM جزئیات بسیار کمتری نسبت به گوگل داره و بخصوص مکانهای ثبت شده توسط کاربر در اون خیلی کمتره. اما میشه نقشه رو به راحتی بهبود داد. چند ماه پیش پروژهای متنباز در گیتهاب دیدم به نام StreetComplete که یک اپ اندروید برای وصل شدن به API این نقشه فراهم کرده. با استفاده از این برنامه میشه به راحتی مسیرها، مکانها و ویژگی اونها رو کامل و بهروز کرد.
و حالا می خوام نحوه پیاده سازی نقشه osm در برنامه تون بهتون توضیح بدم :
1- اولین کاری که می کنیم باید در Manifests برنامه مجوز های اینترنت ، جی پی اس (لوکیشن) ، خواندن و نوشتن از حافظه
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2- در این مرحله باید منبع دانلود osm را به build.gradle (Project) معرفی کنیم . در تگ allprojects
allprojects {
repositories {
google()
jcenter()
mavenCentral()
mavenLocal()
maven { url 'https://jitpack.io' }
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots/'
name 'OSS-Sonatype'
}
}
}
3- و در این مرحله نوبت به اضافه کردن کتابخانه osm و Dexter(برای گرفتن مجوز ها از کاربر) در build.gradle ماژول است .
implementation 'org.osmdroid:osmdroid-android:6.1.8'
4- وبعد در فایل Layout برای نمایش نقشه از عنصر MapView برای مثال با ایدی mapview استفاده می کنیم.
<org.osmdroid.views.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true" />
5. حالا در فایلMainActivity در بالای متد onCreat :
private MapView map; برای نمایش مپ
private IMapController mapController;
برای کنترل نقشه مانند : نمایش یک موقعیت جغرافیایی ، مقدار زوم نقشه و…
وبعد در متد onCreate قبل از متد setContentView
Context ctx = getApplicationContext();
Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
نکته : اگر این خط کد را قبل از متد setContentView ننویسید مپ درست لود نمی شود.
ودر ادامه بعد از متد setContentview برای گرفتن مجوز از کاربر :
Dexter.withContext(getApplicationContext()).withPermissions(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.withListener(new MultiplePermissionsListener() {
@Override
public void onPermissionsChecked(MultiplePermissionsReport multiplePermissionsReport) {
}
@Override
public void onPermissionRationaleShouldBeShown(List<PermissionRequest> list, PermissionToken permissionToken) {
}
}).check();
و در ادامه برای پیاده سازی مپ :
map = findViewById(R.id.mapView);
mapController = map.getController();
mapController.setZoom((long)15); تنظیم مقدار زوم نقشه
تبدیل نقشه به Dpiجهت بهتر نمایش دادن نقشه
map.setTilesScaledToDpi(true);
قابلیت امکان کنترل زوم
map.setBuiltInZoomControls(true);
امکان کنترل نقشه با دو انگشت
map.setMultiTouchControls(true);
برای تبدیل مختصات جغرافیایی به موقعیت جغرافیایی
GeoPoint point = new GeoPoint(35.7448416,51.3775099,17);
ایجاد متغیر مارکر
Marker marker = new Marker(map);
تنظیم موقیعت جغرافیایی مارکر
marker.setPosition(point);
عنوان مارکر
marker.setTitle("برج میلاد");
توضیحات مارکر
marker.setSubDescription("توضیحات");
اضافه کردن مارکر در نقشه
map.getOverlays().add(marker);
نمایش موقیعت جغرافیایی مورد نظر رو نقشه
mapController.setCenter(point);
دیدگاهتان را بنویسید