فراگیری مرحله به مرحله اضافه کردن و عمل با نقشه OSM در برنامه نویسی اندروید دراین نوشته ی علمی از وب لاگ مارکت اندروید ریور توضیح داده گردیده ، سفت روی صندلی خویش بشینید و با اینجانب در پی این نوشتهعلمی همدم باشید..
openStreetMap یا این که به اختصار OSM گونه دیگری از نقشه های جان دار برای توسعه و گسترش دهندگان اندروید جهت استعمال در برنامه های خویش میباشد .
قطعا با خبر میباشید که از استعمال از Google Map یک نحوه معمول و بسیار کاربردی برای به کار گیری از نقشه و تجهیزات ان میباشد البته به عارضه ها محدودیت های اخیری که از سمت گوگل برای توسعه و گسترش دهندگان در حیث دریافت شد صرفا نشان دادن خویش نقشه بدون پول میباشد البته در مواقعی مانند گزینش لوکیشن و انتخاب مسیرو تجهیزات دیگر به صورت تقریبی حدود 25000 یوزر مجانی است البته بعداز آن به ازای هر 1000 هزار استفاده کننده بایستی حدود 50 سنت پرداخت شود .
خب به لحاظ پاره ای مشقت بار می باشد چرا که خیلی از برنامه نویس ها اهل ایران ممکن میباشد اکانت فی مابین المللی و قابل به کارگیری ایی نداشته باشند و از جهت دیگر نیز غیر بدون پول بودنش پاره ای سبب این گردیده که برنامه نویس ها به تامل به کارگیری از نقشه های بدون پول مانند OSM بیافتند که اما اوپن سورس بودن این نقشه به خودی خویش منجر همیاری خیلی از بسط دهندگان با یکدیگر شدهاست و تصمیم به به کار گیری از آن رو هم دوچندان کرده.
فراگیری اضافه کردن نقشه OSM به نرم افزار اندروید
خب دراین نوشتهی علمی قرار است که طرز ی پیاده سازی نقشه ی OSM و هم چنین نشان دادن یک فولدر KML حرف شود پس بیاید استارت کنیم :
نمایی از شیوه اکران Google Maps در مقایسه با OpenStreetMap
در صدر بایستی تعلق های ما یحتاج رو در buil.gradle سطح اپلیکیشنتون طولانی تر فرمایید :
implementation \'org.osmdroid:osmdroid-android:6.1.2\'
implementation \'com.github.MKergall:osmbonuspack:6.4\'
هم چنین در repository سطح پروژتون در پوشه buil.gradle این رو بیشتر فرمائید :
allprojects {
repositories {
google()
jcenter()
mavenCentral()
mavenLocal()
maven { url "https://jitpack.io" }
}
}
درحال حاضر فولدر Manifest.xml پروژه را گشوده نمایید و مجوزهای لازم را به برنامه طولانی تر فرمائید :
بعد به سراغ layout مد لحاظ برای نشان دادن نقشه مراجعهنمایید و این تگ یگانه نقشه را پیاده نمائید :
خب در انتها به سراغ کلاس جاوای خویش بروید و کد های پایین را در آن بیشتر فرمایید :
public class OsmActivity extends AppCompatActivity {
private MapView map;
private IMapController mapController;
private static final String TAG = "OsmActivity";
private static final int PERMISSION_REQUEST_CODE = 1;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//handle permissions first, before map is created. not depicted here
//load/initialize the osmdroid configuration, this can be done
Context ctx = getApplicationContext();
Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
//setting this before the layout is inflated is a good idea
//it \'should\' ensure that the map has a writable location for the map cache, even without permissions
//if no tiles are displayed, you can try overriding the cache path using Configuration.getInstance().setCachePath
//see also StorageUtils
//note, the load method also sets the HTTP User Agent to your application\'s package name, abusing osm\'s tile servers will get you banned based on this string
//inflate and create the map
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= 23) {
if (isStoragePermissionGranted()){
}
}
map = findViewById(R.id.mapView);
map.setTileSource(TileSourceFactory.MAPNIK);
map.setBuiltInZoomControls(true);
map.setMultiTouchControls(true);
mapController = map.getController();
mapController.setZoom(15);
GeoPoint startPoint = new GeoPoint(51496994, -134733);
mapController.setCenter(startPoint);
}
public void onResume() {
super.onResume();
//this will refresh the osmdroid configuration on resuming.
//if you make changes to the configuration, use
//SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
//Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this));
if (map != null)
map.onResume(); //needed for compass, my location overlays, v6.0.0 and up
}
public void onPause() {
super.onPause();
//this will refresh the osmdroid configuration on resuming.
//if you make changes to the configuration, use
//SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
//Configuration.getInstance().save(this, prefs);
if (map != null)
map.onPause(); //needed for compass, my location overlays, v6.0.0 and up
}
public boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
Log.v(TAG, "Permission is granted");
return true;
} else {
Log.v(TAG, "Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION}, 1);
return false;
}
} else { //permission is automatically granted on sdk<23 upon installation
Log.v(TAG, "Permission is granted");
return true;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.v(TAG, "Permission: " + permissions[0] + "was " + grantResults[0]);
//resume tasks needing this permission
}
}
خب در کد های بالا شما شاهد کد های تکراری برای صادر شدن جواز برای پرمیشن های خطرناک برنامه به طور ران تایم هستیم و هم چنین در خطوط اول نیز روش ی پیاده سازی نقشه آورده شدهاست .میتونید کامنت ها رو دنبال نمائید .