【问题标题】:How to move a Mapsforge Layer (Marker) in Android如何在 Android 中移动 Mapsforge 图层(标记)
【发布时间】:2015-01-08 10:03:26
【问题描述】:

我正在使用适用于 Android 的 Mapsforge 0.5。我在地图上添加了一些标记:

map.getLayerManager().getLayers().add(layer);

我想要做的是改变现有图层的位置。我有一个对存储对象的引用,但没有任何方法可以移动标记。该位置只有一个吸气剂

layer.getPosition() : LatLong

LatLong 的纬度和经度字段是最终的 :( 我已经通过首先删除图层然后再次添加它来解决问题,但这会导致一些额外的协调逻辑。有什么方法可以实际移动图层(标记)?

【问题讨论】:

  • 抽象类Layer定义getPosition()方法返回null。 github.com/mapsforge/mapsforge/blob/master/mapsforge-map/src/… 任何像 TileLayer 这样的扩展类都不会修改它。
  • 好的,Marker 类扩展自 Layer 并修改了 getPosition() 私有字段 Marker.this.latLong 的值甚至不是最终的。它接受通过Marker.setLatLong() github.com/mapsforge/mapsforge/blob/master/mapsforge-map/src/…Marker.this.latLong 的更改
  • @eee 谢谢,我只需要投射到 Marker 才能移动位置......现在我理解了 API 背后的逻辑 - 有道理,因为 TileLayer 并没有真正的位置,但所有叠加层(如标记、圆圈等)都应有一个位置。请添加一个简单的答案,例如“投射到标记或其他类”,以便我可以接受它;)

标签: android mapsforge


【解决方案1】:

Mapsforge 将图层视为渲染图层、平铺图层、地图叠加(如标记)等。

抽象类Layer 定义getPosition() 方法默认返回null。

从它扩展而来的一些类如TileLayer 不会修改方法的行为。但是,某些 Layer 的扩展类确实会对其进行修改。

在您的情况下,一种地图覆盖类型,Marker 类从 Layer 扩展而来,并带有修改后的 getPosition() 方法。私有字段Marker.this.latLong 的值甚至不是最终值。它通过Marker.setLatLong() 方法接受对Marker.this.latLong 的更改。

如果Layer对象确实是Marker的实例,则可以将该对象强制转换为Marker

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 2013-09-13
    • 1970-01-01
    • 2016-05-30
    • 2017-12-29
    相关资源
    最近更新 更多