Skip to content

لایه ترافیک

Mohammad-Reza Azizi edited this page Jul 29, 2018 · 2 revisions

پروژه‌ی آموزشی نحوه‌ استفاده از SDK نقشه نشان

لایه ترافیک

  • activity_traffic_layer.xml

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

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

    <org.neshan.ui.MapView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:id="@+id/map"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

    <ToggleButton
        android:checked="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/toggle_button_text_color"
        android:textOff="لایه ترافیک"
        android:textOn="لایه ترافیک"
        android:elevation="8dp"
        android:paddingStart="8dp"
        android:paddingEnd="8dp"
        android:drawableStart="@drawable/ic_traffic_layer"
        android:drawableTint="@color/toggle_button_text_color"
        android:drawablePadding="8dp"
        android:background="@drawable/toggle_button_bg"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        tools:targetApi="m"
        android:onClick="toggleTrafficLayer"/>

</android.support.constraint.ConstraintLayout>


  • TrafficLayer.java

اندیس شماره ۰ برای نمایش نقشه و اندیس شماره ۱ برای نمایش لایه ترافیک در نظر گرفته می‌شود.

    // layer number in which map is added
    final int BASE_MAP_INDEX = 0;
    final int TRAFFIC_INDEX = 1;

متد 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_traffic_layer);
    }
    @Override
    protected void onStart() {
        super.onStart();
        // everything related to ui is initialized here
        initLayoutReferences();
    }


برای ایجاد لایه ترافیک، متد createTrafficLayer از کلاس NeshanServices صدا زده می‌شود. لایه‌های موجود در map گرفته شده و متد insert با ورودی‌های شماره لایه - که در اینجا در ثابت TRAFFIC_INDEX ذخیره شده است - و لایه ترافیک - که خروجی متد createTrafficLayer بود - صدا زده می‌شود.

به این ترتیب لایه ترافیک روی لایه نقشه نشان داده خواهد شد.

   // Initializing map
    private void initMap(){
        // add Standard_day map to layer BASE_MAP_INDEX
        map.getOptions().setZoomRange(new Range(4.5f, 18f));
        map.getLayers().insert(BASE_MAP_INDEX, NeshanServices.createBaseMap(NeshanMapStyle.STANDARD_DAY));

        // Setting map focal position to a fixed position and setting camera zoom
        map.setFocalPointPosition(new LngLat(51.330743, 35.767234),0 );
        map.setZoom(14,0);

        // adding traffic layer to TRAFFIC_INDEX
        map.getLayers().insert(TRAFFIC_INDEX, NeshanServices.createTrafficLayer());
    }

در این متد بررسی می‌شود که اگر toggleButton انتخاب شده باشد، لایه ترافیک ساخته شده و به لایه شماره TRAFFIC_INDEX نقشه اضافه می‌شود و در صورتی که انتخاب نشده باشد، لایه شماره TRAFFIC_INDEX از لایه‌های نقشه حذف می‌شود.

    public void toggleTrafficLayer(View view) {
        ToggleButton toggleButton = (ToggleButton) view;
        if (toggleButton.isChecked())
            map.getLayers().insert(TRAFFIC_INDEX, NeshanServices.createTrafficLayer());
        else
            map.getLayers().remove(map.getLayers().get(TRAFFIC_INDEX));
    }


صفحه قبل (نمایش موقعیت کاربر)

صفحه بعد (لایه آنلاین)