مخفی کردن ویژگی های نقشه با یک ظاهر طراحی

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

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

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

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

برای استایل دادن به نقشه خود، با ارسال یک شی MapStyleOptions که حاوی اعلان های سبک شما در قالب JSON است، با GoogleMap.setMapStyle() تماس بگیرید. همانطور که در مثال های زیر نشان داده شده است، می توانید 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 Platform Styling Wizard به عنوان یک راه سریع برای تولید یک شی استایل JSON استفاده کنید. Maps SDK برای Android از اعلان‌های سبک مشابه با Maps JavaScript API پشتیبانی می‌کند.

نمونه کد کامل

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