14

我有来自数据库的 lat&long 值。如何使用 android google map api v2 显示基于 lat&long 值的标记。在原始的 android google maps 中,我们基于概念 itemoverlay 显示标记。在 v2 中,我不知道如何显示标记。

    dbAdapter.open();
        Cursor points = dbAdapter.clustercall(Btmlft_latitude, toprgt_latitude,
                Btmlft_longitude, toprgt_longitude, gridsize1);
        int c = points.getCount();
        Log.d("count of points", "" + c);

        if (points != null) {
            if (points.moveToFirst()) {
                do {

                    int latitude = (int) (points.getFloat(points
                            .getColumnIndex("LATITUDE")) * 1E6);
                    int longitude = (int) (points.getFloat(points
                            .getColumnIndex("LONGITUDE")) * 1E6);

                    mapView.addMarker(new MarkerOptions().position(
                            new LatLng(latitude, longitude)).icon(
                            BitmapDescriptorFactory.defaultMarker()));

                } while (points.moveToNext());

            }
        }
        points.close();
        dbAdapter.close();

那是我的代码。我从数据库中获取 lat&long 值,但是如何根据 lat&long 值添加标记来映射。

我读了android google maps api v2.In,它只给出了静态添加的标记数据

4

3 回答 3

27

使用标记

放置在地图表面上特定点的图标。标记图标是针对设备屏幕而不是地图表面绘制的;即,它不一定会由于地图旋转、倾斜或缩放而改变方向。

标记具有以下属性:

图像上将放置在标记的 LatLng 位置的点。这默认为图像左侧和图像底部的 50%。

位置

标记在地图上的位置的 LatLng 值。如果要移动标记,可以随时更改此值。

标题

用户点击标记时在信息窗口中显示的文本字符串。您可以随时更改此值。

片段

显示在标题下方的附加文本。您可以随时更改此值。

图标

为标记显示的位图。如果未设置图标,则会显示默认图标。您可以使用 defaultMarker(float) 指定默认图标的替代颜色。创建标记后,您将无法更改图标。

拖动状态

如果要允许用户拖动标记,请将此属性设置为 true。您可以随时更改此值。默认值为真。

能见度

默认情况下,标记是可见的。要使标记不可见,请将此属性设置为 false。您可以随时更改此值。

GoogleMap map = ... // get a map.
   // Add a marker at San Francisco.
   Marker marker = map.addMarker(new MarkerOptions()
       .position(new LatLng(37.7750, 122.4183))
       .title("San Francisco")
       .snippet("Population: 776733"));
于 2013-01-07T11:35:08.833 回答
12

您必须使用GoogleMap.addMarker(MarkerOptions); 我在博客教程中解释过的方法:http: //bon-app-etit.blogspot.be/2012/12/add-informationobject-to-marker-in.html

在此博客上,您会发现更多关于新 Maps API 的帖子:

  • 将地图移动到当前位置或某个位置
  • 创建自定义信息窗口
  • 将地理数据或对象与标记相关联
于 2013-01-07T23:53:51.503 回答
4

我猜问题是您将纬度/经度值乘以 1E6 而不是将它们除以 1E6。如果您存储的值来自 GeoPoints,那可能是您的问题。否则,您添加标记的方式很好,应该可以工作。

即您传递给 new LatLng() 的 lat/lng 值应该看起来像 45.4,-95.5 NOT 45400000,-95500000

查看以下代码:

//mMap is a GoogleMap and point is a GeoPoint
this.mMap.addMarker(getMarker(point, drawableId))

...

public MarkerOptions getMarker(GeoPoint point, int drawableId)
{
    return new MarkerOptions()
    .position(new LatLng(point.getLatitudeE6() / 1000000.0, point.getLongitudeE6() / 1000000.0))
    .icon(BitmapDescriptorFactory.fromResource(drawableId));
}
于 2013-01-07T16:33:04.180 回答