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. “造型不会影响室内地图。” - 其他句子(但我同意 - 他们可以用更好的方式写出来)。室内地图不是地图类型(可以是Normal
、Hybrid
、Satellite
、Terrain
和None
)。
@JonasPraem 恕我直言,最好的解决方法是使用 Tile Overlay
从 Google URL 加载 normal
地图图块(如在 this 问题中)并将水设置为黑色(以及其他透明)直接平铺位图。
在 javascript 地图上是可能的(请参阅链接问题),这就是为什么这让我感到沮丧。我也在考虑一个不透明的覆盖,说我只是想让整个地图更红 - 并在顶部添加一个不透明的颜色。也许在我的 Android 应用程序中做一个 javascript 视图 - 也许这对 mapview 来说是可能的?
@JonasPraem 我认为一切皆有可能,但恕我直言,最好的解决方法是使用加载法线贴图贴图的贴图叠加...)以上是关于google mapView 样式在具有 maptype=TERRAIN 的 Android 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Android Google Maps 无法在当前主题中找到样式“mapViewStyle”
膨胀类 com.google.android.maps.MapView 时出错
ViewController 作为 Swift 中 MapView 的叠加层(如 Google 地图应用程序用户界面)