如何在谷歌MapAndroid API v2中将自定义标签放置在城市名称下

roejwanj  于 2023-01-07  发布在  Android
关注(0)|答案(1)|浏览(125)

我正在使用谷歌MapAPI v2在Android中显示Map.
是否可以将温度标签放在每个城市名称下,如下图所示。

dxpyg8gm

dxpyg8gm1#

无法获得城市名称的精确屏幕坐标,因此您无法在每个城市名称下准确放置温度标签。但您可以从Map中隐藏所有城市/城镇名称(和其他标签

(请查看Add a Styled Map了解更多详细信息),并从thisthat等数据库中获取城市坐标和名称,并根据需要显示城市名称和其他文本。
要创建不带城市名称的Map,您可以使用Styled map wizard交互模式(将标签搜索栏向左移动)

然后点击“Finish”按钮,复制粘贴JSON,如下所示:

[
  {
    "elementType": "labels",
    "stylers": [
      {
        "visibility": "off"
      }
    ]
  },
  {
    "featureType": "administrative.land_parcel",
    "stylers": [
      {
        "visibility": "off"
      }
    ]
  },
  {
    "featureType": "administrative.neighborhood",
    "stylers": [
      {
        "visibility": "off"
      }
    ]
  }
]

到项目中的文件中,例如src\main\res\raw\no_city_names_map_style.json。然后,您可以通过以下方式将此样式应用到Map:
mGoogleMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(getApplicationContext(), R.raw.no_city_names_map_style));
要放置文本,您可以使用Markers和只包含文本的自定义动态创建图标,例如thisuser2808624的答案:

public BitmapDescriptor createPureTextIcon(String text) {

    Paint textPaint = new Paint(); // Adapt to your needs

    float textWidth = textPaint.measureText(text);
    float textHeight = textPaint.getTextSize();
    int width = (int) (textWidth);
    int height = (int) (textHeight);

    Bitmap image = Bitmap.createBitmap(width, height, Config.ARGB_8888);
    Canvas canvas = new Canvas(image);

    canvas.translate(0, height);

    // For development only:
    // Set a background in order to see the
    // full size and positioning of the bitmap.
    // Remove that for a fully transparent icon.
    canvas.drawColor(Color.LTGRAY);

    canvas.drawText(text, 0, 0, textPaint);
    BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(image);
    return icon;
}

然后,您可以通过以下方式在Map上放置带有自定义文本的标记:

mMap.addMarker(new MarkerOptions()
    .position(<city_location>)
    .icon(BitmapDescriptorFactory.fromBitmap(createPureTextIcon("Name Temperature")))
    .anchor(0.5f, 1));

相关问题