【问题标题】:Add multiple geopoints and markers automatically in Google Maps在 Google 地图中自动添加多个地理点和标记
【发布时间】:2011-08-18 20:49:33
【问题描述】:

是否可以使在地图中添加地理点更加“自动”?我的意思是,如果我们要在地图中添加很多点(超过 100 个),我们不必像这样一个一个地添加它们:

GeoPoint point2 = new GeoPoint(microdegrees(36.86774),microdegrees(10.305302));
GeoPoint point3 = new GeoPoint(microdegrees(36.87154),microdegrees(10.341815));
GeoPoint point4 = new GeoPoint(microdegrees(36.876093),microdegrees(10.325716));  

pinOverlay.addPoint(point2);
pinOverlay.addPoint(point3);
pinOverlay.addPoint(point4);

有没有办法将它们全部存储在一个表中,然后编译器将它们一个一个添加?

【问题讨论】:

  • 你考虑过for循环吗?
  • @Manish Burman:我在哪里存储 long 和 lat 值? (感谢您在我的帖子中添加 -1 :)。

标签: android google-maps google-maps-markers


【解决方案1】:

您需要将它们存储在 SQLite 数据库或其他形式的数据存储中,然后您可以将它们拉入并使用 ItemizedOverlay 将它们放置在地图上,请参阅 Google Map View(教程)。

从数据库游标创建数组

Cursor cursor =  mDbHelper.getItems();
cursor.moveToFirst();

List<CatchItem> catchList = new ArrayList<CatchItem>();

if (cursor != null && cursor.getCount() > 0) {
    for (int i = 0; i < cursor.getCount(); i++) {
        CatchItem item = new CatchItem();

        item.Latitude = cursor.getDouble(cursor.getColumnIndex("latitude"));
        item.Longitude = cursor.getDouble(cursor.getColumnIndex("longitude"));

        catchList.add(item);
        cursor.moveToNext();
    }
}

ItemizedOverlay

List<Overlay> overlays = mMaps.getOverlays();
overlays.clear();
CatchesItemizedOverlay catchOverlays = new CatchesItemizedOverlay(getResources().getDrawable(R.drawable.map_markeroverlay_blue72), this);

for (int i = 0; i < catchList.size(); i++) {
    double lat = catchList.get(i).Latitude;
    double lng = catchList.get(i).Longitude;

    GeoPoint geopoint = new GeoPoint((int)(lat*1E6), (int)(lng*1E6));
    catchOverlays.addOverlay(new CatchOverlayItem(this, geopoint, catchList.get(i)));
}

overlays.add(catchOverlays);

CatchesItemizedOverlay 是我自己的扩展ItemizedOverlay(我需要自定义功能)。 catchList 对象只是一个具有经纬度的自定义对象。

希望这对你有用。

【讨论】:

  • 好的,感谢您编辑答案,我将测试此代码:)。
  • 以及如何在 catchList 上添加项目?这段代码只是为了获取值。
  • 这完全取决于您存储位置数据的方式。我将我的存储在 SQLite 数据库中,并在此代码之前填充我的对象。 vogella.de/articles/AndroidSQLite/article.html 有一个很好的使用 SQLite 的例子
  • 好的,所以总结一下我必须建立一个 SQlite 数据库来存储 2 个值(纬度和经度)然后在地图中修复它们我必须使用这个代码(希望它会工作)。哎呀,我有一些工作要做:\。谢谢您的回答。接受:D.
  • 谢谢。一旦您从 SQLite DB 获得经纬度项目的光标,我添加了代码来创建您的数组。享受吧。
【解决方案2】:

您可以将它们存储在 SQLite 数据库中,并根据需要提取它们

【讨论】:

  • 哇,事情变得更难了:\.
  • 对...或者你可以使用 AsyncTask,然后使用 onProgressUpdate()
  • 请看 hooked82,我认为它更简单。没有?
  • hooked82 确实找到了更好的解决方案。这将使事情变得不那么复杂。试试看 =)
猜你喜欢
  • 1970-01-01
  • 2018-05-26
  • 2013-09-20
  • 1970-01-01
  • 2012-12-23
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
相关资源
最近更新 更多