رسم خط (Polyline)

مستندات جامع اندروید

نسخه 1.0.3

در این بخش از پروژه، هدف رسم یک خط بر روی نقشه است.

بخش‌هایی از این قسمت از پروژه که در قسمت‌های قبلی نیز بوده‌است، توضیح مجدد داده نخواهد شد. در صورت نیاز به صفحات قبلی مراجعه کنید.

activity_draw_line.xml:

تنها المان اضافه شده، یک Button است که در صورت کلیک بر روی آن، متد drawLine صدا زده می شود و خطی بر روی نقشه رسم می‌شود.

            <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.DrawLine">

    <org.neshan.mapsdk.MapView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/map"/>

    <Button
        android:id="@+id/draw_line"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="رسم خط"
        android:textColor="#ffffff"
        android:elevation="8dp"
        android:paddingStart="8dp"
        android:paddingEnd="8dp"
        android:background="@drawable/toggle_button_on_bg"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:onClick="drawLine"
        tools:targetApi="m" />

</androidx.constraintlayout.widget.ConstraintLayout>
        

DrawLine.java:

متد initLayoutRefrences جهت مقداردهی اولیه کردن به تمامی المان‌های مربوط به رابط کاربری نوشته شده‌است. به دلیل این که لازم است تا المان اندرویدی نقشه نشان ابتدا به طور کامل ایجاد شود و سپس با آن تعامل برقرار شود (متدهای مختلف بر روی المان نقشه اجرا شود)، تمامی متدهای مربوط به رابط کاربری باید در متد onStart انجام شوند.

            @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // starting app in full screen
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_draw_line);
    }
    @Override
    protected void onStart() {
        super.onStart();
        // everything related to ui is initialized here
        initLayoutReferences();
    }
        

متد drawLine خطی را بر روی نقشه رسم می‌کند.

برای این منظور ابتدا یک <ArrayList<LatLng– که لیستی از نقاط جغرافیایی است – ساخته می‌شود و سپس نقاط مشخص کننده راس های خط به این لیست اضافه می‌شود.

با استفاده از لیست نقاط و استایل خط گرفته شده از متد getLineStyle ( که در ادامه توضیح داده خواهد شد ) یک PolyLine ساخته می‌شود. شی Polyline شامل مجموعه ای از رئوس و یک استایل است که تعریف کننده یک خط هستند.

شی ساخته شده با متد addPolyline به map اضافه می‌شود. با این کار، خط مورد نظر بر روی نقشه نمایش داده خواهد شد.

در نهایت دوربین بر روی نقطه ابتدای خط متمرکز می شود. بزرگنمایی دوربین برابر با ۱۴ است.

            // Drawing line on map
    public Polyline drawLine(View view){
        // Adding some LatLng points to a latLngs
        ArrayList<LatLng> latLngs = new ArrayList<>();
        latLngs.add(new LatLng(35.769368,51.327650));
        latLngs.add(new LatLng(35.756670,51.323889));
        latLngs.add(new LatLng(35.746670,51.383889));
        // Creating a line from LineGeom. here we use getLineStyle() method to define line styles
        Polyline polyline = new Polyline(latLngs, getLineStyle());
        // adding the created line to lineLayer, showing it on map
        map.addPolyline(polyline);
        // focusing camera on first point of drawn line
        map.moveCamera(new LatLng(35.769368,51.327650),0.25f );
        map.setZoom(14,0);
        return polyline;
    }
        

متد getLineStyle، استایل مورد نیاز برای خط‌هایی که قرار است رسم شوند را بر‌می‌گرداند. برای ایجاد style برای خطوط، ابتدا یک شی از کلاس LineStyleBuilder ساخته می‌شود. ویژگی‌های خطوط، از جمله رنگ و عرض خطوط، بر روی این شی set می‌شوند. برای تعریف رنگ، باید شی‌ای از نوع Color ساخته شود که پارامترهای آن شامل میزان رنگ قرمز، سبز، آبی و شفافیت رنگ است و شی ساخته شده به عنوان آرگومان ورودی به متد setColor داده شود.

پس از مشخص کردن ویژگی‌ها، با صدا زدن متد buildStyle بر روی شی مربوط به کلاس LineStyleBuilder یک شی از نوع LineStyle ایجاد می‌شود و این شی به عنوان خروجی تابع بازگردانده می‌شود.

            private LineStyle getLineStyle(){
    LineStyleBuilder lineStCr = new LineStyleBuilder();
    lineStCr.setColor(new Color((short) 2, (short) 119, (short) 189, (short)190));
    lineStCr.setWidth(12f);
    lineStCr.setStretchFactor(0f);
    return lineStCr.buildStyle();
}
        

حذف خط

همچنین با استفاده از شی polyline ساخته شده و متد removePolyline می توان خطوط رسم شده بر روی نقشه را بصورت زیر از روی نقشه حذف کرد:

            map.removePolyline(polyline);

        
فهرست مطالب این صفحه