پنهان کردن عارضه‌های نقشه با سبک‌پردازی

پلاتفرم را انتخاب کنید: Android iOS JavaScript

علاوه‌بر تغییر سبک عارضه‌ها در نقشه، می‌توانید آن‌ها را کاملاً پنهان کنید. این مثال به شما نشان می‌دهد که چگونه نقاط جالب کسب‌وکار (POI) و نمادهای حمل‌ونقل عمومی را در نقشه خود پنهان کنید.

سبک‌بندی فقط روی نوع نقشه normal کار می‌کند. سبک‌بندی بر نقشه‌های داخلی تأثیر نمی‌گذارد، بنابراین استفاده از سبک‌بندی برای پنهان کردن عوارض مانع از ظاهر شدن نقشه ساختمان‌های داخلی در نقشه نمی‌شود.

شیء سبک JSON را به نقشه خود منتقل کنید

برای سبک‌بندی نقشه‌تان، GoogleMap.setMapStyle() را فراخوانی کنید و شیء MapStyleOptions را که حاوی اعلامیه‌های سبک شما در قالب JSON است ارسال کنید. می‌توانید JSON را از منبع خام یا رشته بار کنید، همان‌طور که در مثال‌های زیر نشان داده شده است:

منبع خام

نمونه کد زیر فرض می‌کند پروژه شما حاوی منبع خامی به‌نام style_json است:

// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.example.styledmap;

import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MapStyleOptions;

/** A styled map using JSON styles from a raw resource. */
public class MapsActivityRaw extends AppCompatActivity implements OnMapReadyCallback {

    private static final String TAG = MapsActivityRaw.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Retrieve the content view that renders the map.
        setContentView(R.layout.activity_maps_raw);

        // Get the SupportMapFragment and register for the callback
        // when the map is ready for use.
        SupportMapFragment mapFragment =
                (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    /**
     * Manipulates the map when it's available. The API invokes this callback when the map is ready
     * for use.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {

        try {
            // Customise the styling of the base map using a JSON object defined
            // in a raw resource file.
            boolean success =
                    googleMap.setMapStyle(
                            MapStyleOptions.loadRawResourceStyle(this, R.raw.style_json));

            if (!success) {
                Log.e(TAG, "Style parsing failed.");
            }
        } catch (Resources.NotFoundException e) {
            Log.e(TAG, "Can't find style. Error: ", e);
        }
        // Position the map's camera near Sydney, Australia.
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(-34, 151)));
    }
}

منبع خامی را در /res/raw/style_json.json تعریف کنید که حاوی اعلامیه سبک JSON زیر برای پنهان کردن نقاط موردعلاقه (POI) کسب‌وکار باشد:

اعلام سبک زیر نقاط موردعلاقه (POI) کسب‌وکار و نمادهای حمل‌ونقل عمومی را پنهان می‌کند:

چیدمان (activity_maps.xml) به‌این‌صورت است:

منبع رشته

نمونه کد زیر فرض می‌کند پروژه شما حاوی منبع رشته‌ای به‌نام style_json است:

package com.example.styledmap;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MapStyleOptions;

/**
 * A styled map using JSON styles from a string resource.
 */
public class MapsActivityString extends AppCompatActivity
        implements OnMapReadyCallback {

    private static final String TAG = MapsActivityString.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Retrieve the content view that renders the map.
        setContentView(R.layout.activity_maps_string);

        // Get the SupportMapFragment and register for the callback
        // when the map is ready for use.
        SupportMapFragment mapFragment =
                (SupportMapFragment) getSupportFragmentManager()
                        .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    /**
     * Manipulates the map when it's available.
     * The API invokes this callback when the map is ready for use.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {

        // Customise the styling of the base map using a JSON object defined
        // in a string resource file. First create a MapStyleOptions object
        // from the JSON styles string, then pass this to the setMapStyle
        // method of the GoogleMap object.
        boolean success = googleMap.setMapStyle(new MapStyleOptions(getResources()
                .getString(R.string.style_json)));

        if (!success) {
            Log.e(TAG, "Style parsing failed.");
        }
        // Position the map's camera near Sydney, Australia.
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(-34, 151)));
    }
}

منبع رشته‌ای را در /res/values/style_strings.xml تعریف کنید، که حاوی اعلامیه سبک JSON زیر برای پنهان کردن نقاط موردعلاقه (POI) کسب‌وکار باشد. در این فایل باید از واکج‌خط برای گریز از علامت‌های نقل‌قول استفاده کنید:

اعلام سبک زیر نقاط موردعلاقه (POI) کسب‌وکار و نمادهای حمل‌ونقل عمومی را پنهان می‌کند:

چیدمان (activity_maps.xml) به‌این‌صورت است:

اعلامیه‌های سبک JSON

نقشه‌های قابل‌طراحی از دو مفهوم برای اعمال رنگ‌ها و سایر تغییرات سبک در نقشه استفاده می‌کنند:

  • انتخابگرها مؤلفه‌های جغرافیایی را که می‌توانید در نقشه سبک‌بندی کنید مشخص می‌کنند. این عناصر شامل جاده‌ها، پارک‌ها، پهنه‌های آبی، و غیره، و همچنین برچسب‌های آن‌ها می‌شود. انتخاب‌کننده‌ها شامل ویژگی‌ها و عناصر هستند که به‌عنوان ویژگی‌های featureType و elementType مشخص شده‌اند.
  • سبک‌دهنده‌ها ویژگی‌های رنگ و نمایانی هستند که می‌توانید به عناصر نقشه اعمال کنید. آن‌ها رنگ نمایش‌داده‌شده را ازطریق ترکیبی از مقادیر فام، رنگ، و روشنایی/گاما تعریف می‌کنند.

برای شرح مفصل گزینه‌های سبک‌بندی JSON، به مرجع سبک مراجعه کنید.

دستیار سبک‌بندی پلاتفرم Maps

از جادوگر سبک‌بندی پلاتفرم Maps به‌عنوان روشی سریع برای تولید شیء سبک‌بندی JSON استفاده کنید. کیت توسعه نرم‌افزار Google Maps برای Android از همان اعلان‌های سبکی پشتیبانی می‌کند که Maps JavaScript API پشتیبانی می‌کند.

نمونه‌های کد کامل

مخزن ApiDemos در GitHub شامل نمونه‌هایی است که استفاده از سبک‌بندی را نشان می‌دهد.