【问题标题】:How to add a static map marker in the HERE maps Android sdk?如何在 HERE maps Android sdk 中添加静态地图标记?
【发布时间】:2016-04-20 08:06:35
【问题描述】:

我想制作地图旋转时不会移动的标记,就像折线一样。我的目标是给标记一个单一的方向,即使发生错误也不会改变。

我已经尝试过每种标记类型,但我无法获得想要的效果。

任何形式的帮助都将不胜感激,因为我被困在这里很长时间了

【问题讨论】:

  • 如果我做对了,你想避免标记不断旋转以面对你,对吗?我不确定你可以用标记来做到这一点。我现在唯一能想到的就是使用MapLocalModel。但是你必须自己提供模型和纹理
  • 谢谢!我看了你的建议,看起来这是完成我想做的事情的唯一方法。但是,对于这么简单的事情,我发现这真的很复杂...... HERE 应该真的像谷歌地图一样让这个更简单。现在我必须了解模型和纹理是如何工作的......无论如何,谢谢
  • MapLocalModel 主要用于绘制复杂的纹理或阴影对象。我们用它在地图中添加有趣的东西,比如汽车和 3d 对象。请按照我的回答中的建议使用 MapMarker 类。

标签: android marker here-api


【解决方案1】:

您可以绘制一个简单的矩形,其正面和背面的纹理如下:

    // Two triangles
    FloatBuffer buff = FloatBuffer.allocate(12);
    buff.put(0- delta);
    buff.put(0- delta);
    buff.put(1.f);

    buff.put(0 + delta);
    buff.put(0 - delta);
    buff.put(1.f);

    buff.put(0 - delta);
    buff.put(0 + delta);
    buff.put(1.f);

    buff.put(0 + delta);
    buff.put(0 + delta);
    buff.put(1.f);

    // Two triangles to generate the rectangle. Both front and back face
    IntBuffer vertIndicieBuffer = IntBuffer.allocate(12);
    vertIndicieBuffer.put(0);
    vertIndicieBuffer.put(2);
    vertIndicieBuffer.put(1);
    vertIndicieBuffer.put(2);
    vertIndicieBuffer.put(3);
    vertIndicieBuffer.put(1);
    vertIndicieBuffer.put(0);
    vertIndicieBuffer.put(1);
    vertIndicieBuffer.put(2);
    vertIndicieBuffer.put(1);
    vertIndicieBuffer.put(3);
    vertIndicieBuffer.put(2);

    // Texture coordinates
    FloatBuffer textCoordBuffer = FloatBuffer.allocate(8);
    textCoordBuffer.put(0.f);
    textCoordBuffer.put(0.f);
    textCoordBuffer.put(1.f);
    textCoordBuffer.put(0.f);
    textCoordBuffer.put(0.f);
    textCoordBuffer.put(1.f);
    textCoordBuffer.put(1.f);
    textCoordBuffer.put(1.f);

    // The LocalMesh itself.
    LocalMesh mesh = new LocalMesh();
    mesh.setVertices(buff);
    mesh.setVertexIndices(vertIndicieBuffer);
    mesh.setTextureCoordinates(textCoordBuffer);

    MapLocalModel model = new MapLocalModel();
    model.setMesh(mesh);
    model.setDynamicScalingEnabled(true);
    model.setAnchor(new GeoCoordinate(LATITUDE, LONGITUDE, 0.0));

将图像附加到其上以获得纹理,并使用 MapRenderLisener#onPredraw() 更改本地模型对象的俯仰和偏航以跟随相机。

【讨论】:

  • 谢谢,这正是我所需要的!
  • 我们如何在 android 中获取本地网格导入?
  • 地图导航时如何获取MapLocalModel中设置偏航的准确方向值?
【解决方案2】:

MapMarker 对象是您要查找的对象?它锚定在您给它的位置,并且无论您对地图应用的倾斜和旋转如何,它都将始终在屏幕 2d 空间中绘制。

希望这会有所帮助。

【讨论】:

  • 好吧,根据你刚刚给我的链接,情况正好相反:“地图处理屏幕上图标的正确放置以及平移和旋转。”如果地图旋转,MapMarker 将旋转而且我看不到任何禁用它的方法...
  • MapMarker 不旋转,它是在平面二维屏幕空间中绘制的。我相信我们的文档在这个意义上有点令人困惑。它应该声明它是“锚定”到地理坐标的,并且无论地图的倾斜或方向如何,它始终是正面的。
  • 是的,就是这样,它总是朝前,我想要一个不会那样做的标记,因为我正在尝试添加具有特定角度的特定图像(也许我也不清楚) .如果有办法在没有 MapLocalModel 的情况下做到这一点,请告诉我怎么做,我将不胜感激。谢谢
  • 在这种情况下,MapLocalModel 是您最好的选择。我会发布一段代码来帮助你。
  • 上述sn-p的delta值是多少?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多