google mapView 样式在具有 maptype=TERRAIN 的 Android 上不起作用

Posted

技术标签:

【中文标题】google mapView 样式在具有 maptype=TERRAIN 的 Android 上不起作用【英文标题】:google mapView styling doesn't work on Android with maptype=TERRAIN 【发布时间】:2019-05-18 03:39:08 【问题描述】:

使用这个*** question,我尝试将一些自定义样式应用于android 地图视图。

造型基本就是让水变黑

mapstyle_json.js:

[
    
        featureType: 'water',
        elementType: 'geometry',
        stylers: [color: '#000000']
      ,
      
        featureType: 'water',
        elementType: 'labels.text.fill',
        stylers: [color: '#515c6d']
      ,
      
        featureType: 'water',
        elementType: 'labels.text.stroke',
        stylers: [color: '#17263c']
      
]

我的主要活动:

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final MapView mapView = (MapView) findViewById(R.id.mapView);
        final android.content.Context context = this;

        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(new OnMapReadyCallback() 

            @Override
            public void onMapReady(GoogleMap googleMap) 
                googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); // Without this line, the styling works as intended
                try 
                    // Customise the styling of the base map using a JSON object defined
                    // in a raw resource file.
                    boolean success = googleMap.setMapStyle(
                            MapStyleOptions.loadRawResourceStyle(
                                    context, R.raw.mapstyle_json));

                    if (!success) 
                        Log.e("1", "Style parsing failed.");
                    
                 catch (Resources.NotFoundException e) 
                    Log.e("1", "Can't find style. Error: ", e);
                
                Log.d("1", "onMapReady: something");
                LatLng coordinates = new LatLng(45.832119, 6.865575);
                googleMap.addMarker(new MarkerOptions().position(coordinates).title("hello"));
                googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(coordinates, 12));
                mapView.onResume();
            
        );
     

不设置地图类型(使用默认地图类型),样式可以正常工作。给定链接的问题,应该可以设置 TERRAIN 类型地图的样式。 (也许只使用 javascript)。

为什么不将此样式应用于地形类型地图?在Android mapView 中可以吗?

编辑:

代码基于google自己的指南,原始资源用例:https://developers.google.com/maps/documentation/android-sdk/styling

也许这是 google API v2 与 v3 的问题。据我了解,Android 使用 API v2。链接的问题是关于 v3

【问题讨论】:

【参考方案1】:

似乎是其预期的行为。来自Official Documentation:

样式仅适用于 normal 地图类型。

Normal map type 是:

典型的路线图。显示道路、人类建造的一些特征,以及 河流等重要的自然特征。道路和要素标签是 也可见。

【讨论】:

它说它不适用于室内地图:样式仅适用于法线贴图类型。样式设置不会影响室内地图。 可能的解决方法是什么?我正在考虑在我的 android 应用程序中创建一个 javascript 视图 @JonasPraem No. “造型不会影响室内地图。” - 其他句子(但我同意 - 他们可以用更好的方式写出来)。室内地图不是地图类型(可以是NormalHybridSatelliteTerrainNone)。 @JonasPraem 恕我直言,最好的解决方法是使用 Tile Overlay 从 Google URL 加载 normal 地图图块(如在 this 问题中)并将水设置为黑色(以及其他透明)直接平铺位图。 在 javascript 地图上是可能的(请参阅链接问题),这就是为什么这让我感到沮丧。我也在考虑一个不透明的覆盖,说我只是想让整个地图更红 - 并在顶部添加一个不透明的颜色。也许在我的 Android 应用程序中做一个 javascript 视图 - 也许这对 mapview 来说是可能的? @JonasPraem 我认为一切皆有可能,但恕我直言,最好的解决方法是使用加载法线贴图贴图的贴图叠加...)

以上是关于google mapView 样式在具有 maptype=TERRAIN 的 Android 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android Google Maps 无法在当前主题中找到样式“mapViewStyle”

在 MapView 中重新定位 Google 徽标

膨胀类 com.google.android.maps.MapView 时出错

ViewController 作为 Swift 中 MapView 的叠加层(如 Google 地图应用程序用户界面)

如何使用 Google Place API 进行 mapview 搜索地点

java Android Google Maps V2 - XML中的MapView