这里映射Javascript API - 信息气泡覆盖路由折线?

时间:2015-04-09 01:28:18

标签: javascript api here-api

我使用从A点到B点的路线渲染地图,并缩放到路线的边界框。

我还为点B(目的地)渲染了一个相关的信息泡泡。 我的应用程序的这个特定部分不涉及用户干预,因此完全无人值守 地图也会打印出来 B点总是不同的 使用Enterprise Javascript API v2.5.4

我的问题是,很多时候信息气泡覆盖了阻碍路线的路线折线。

我看到左下方,上方,下方的InfoBubble对齐选项,但由于这些点是动态的,这些选项无效

有关信息泡泡定位的任何建议,以确保它不会覆盖路线?

1 个答案:

答案 0 :(得分:1)

defaultXAlignmentdefaultYAlignment属性可用于设置InfoBubble的首选位置。

您可以使用defaultXAlignmentdefaultYAlignment属性来更改Infobubble的首选偏移量,例如:

var infoBubbles = new nokia.maps.map.component.InfoBubbles();
infoBubbles.options.set("defaultXAlignment", 
    nokia.maps.map.component.InfoBubbles.ALIGNMENT_RIGHT);
infoBubbles.options.set("defaultYAlignment",
     nokia.maps.map.component.InfoBubbles.ALIGNMENT_ABOVE);
map.components.add(infoBubbles);

在你的情况下,我会建议如下。

  • 缩放到路径的bounding box时,添加填充因子以确保有空间显示infoBubble。最简单的方法是缩小一个停止点,但您可以使用padding的{​​{1}}属性来确保在nokia.maps.map.Display时有足够的空间。看到 nokia.maps.map.Display.setPadding()

  • 然后计算起点和终点之间的承载

    zoom()
  • 如果结果介于0和Number.prototype.toRad = function() { // convert degrees to radians return this * Math.PI / 180; } function bearing(lat1, lon1, lat2, lon2) { lat1 = lat1.toRad(); lat2 = lat2.toRad(); var dLon = (lon2-lon1).toRad(); var y = Math.sin(dLon) * Math.cos(lat2); var x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon); return Math.atan2(y, x); } 之间,那么您正在东北修复Inf​​obubble以显示在右侧上述

  • 如果结果介于Math.PI/2Math.PI/2之间,您正在旅行东南,请修复Inf​​obubble以显示在右侧以下即可。
  • 如果结果介于Math.PI-Math.PI之间,您正在旅行西南,请修复Inf​​obubble以显示在左侧以下即可。
  • 如果结果介于-Math.PI/2和0之间,则您正在西北修复信息,以便在左侧上方显示

您可以找到有关完全修复-Math.PI/2答案here

的详细信息