Google Map Android:GeoJSON图层上方添加多标记失败求助
解决Google Maps中GeoJSON图层上方无法显示多个标记的问题
看起来你遇到的核心问题是标记被GeoJSON图层遮挡,或者zIndex的设置逻辑没起到预期效果。我帮你拆解下问题并给出具体的修复方案:
问题分析
你当前的代码里,GeoJSON多边形的zIndex设为了1,而标记的zIndex是从zInd递增的——但如果zInd的初始值是0,第一次点击后变成1,和GeoJSON的zIndex相同,这时候标记还是会被图层遮挡(相同zIndex下,图层的渲染优先级可能更高)。另外也需要确认标记是否真的被重复添加,而不是被意外清除了。
修复步骤
1. 调整标记zIndex的初始值
把zInd的初始值设为大于GeoJSON图层的zIndex值(比如2),确保第一个标记就会显示在图层上方:
// 初始化zInd为2,确保比GeoJSON的zIndex 1大 private int zInd = 2;
2. 确保标记zIndex正确递增
在每次添加标记后递增zInd,这样新标记会显示在旧标记的上方(如果需要这个层级效果):
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { @Override public void onMapClick(LatLng latLng) { try { Geocoder gc = new Geocoder(ScratchmapActivity.this, Locale.getDefault()); List<Address> addrs = gc.getFromLocation(latLng.latitude, latLng.longitude, 2); String country = addrs.get(0).getCountryName(); // 添加标记时使用当前zInd,之后递增 mMap.addMarker(new MarkerOptions() .position(latLng) .title("aloha") .zIndex((float) zInd)); zInd++; } catch (IOException ex) { ex.printStackTrace(); } } });
3. 验证GeoJSON图层的zIndex设置
保持你当前GeoJSON的zIndex设置不变,确保多边形的层级低于标记:
public void addGeoJsonLayer(int color, int resource){ try { GeoJsonLayer layer = new GeoJsonLayer(mMap, resource, getApplicationContext()); GeoJsonPolygonStyle style = layer.getDefaultPolygonStyle(); style.setFillColor(color); style.setStrokeColor(color); style.setStrokeWidth(1F); style.setZIndex(1F); // 固定多边形层级为1,确保标记能覆盖 layer.addLayerToMap(); } catch (IOException ex) { Log.e("IOException", ex.getLocalizedMessage()); } catch (JSONException ex) { Log.e("JSONException", ex.getLocalizedMessage()); } }
4. 额外排查点
- 检查是否有代码调用了
mMap.clear(),导致之前添加的标记被清除; - 如果还是有遮挡问题,可以尝试把标记的zIndex设为固定的大值(比如
100F),强制让标记显示在最上层; - 可以添加日志或调用
marker.showInfoWindow(),验证每次点击都成功添加了标记。
内容的提问来源于stack exchange,提问作者Lan Le
相关产品推荐
相关产品推荐

