簡體   English   中英

這里是Maps Javascript API-信息氣泡疊加路線折線嗎?

[英]Here Maps Javascript API - Information bubble overlaying route polyline?

我渲染了具有從A點到B點的路線的地圖,並縮放到該路線的邊界框。

我還為B點(目標)繪制了一個相關的信息氣泡。 我的應用程序的這一特定部分不涉及用戶干預,因此完全無人值守。打印的地圖B點使用Enterprise Javascript API v2.5.4總是不同的

我的問題是很多時候信息氣泡會覆蓋阻礙路線的路線折線。

我看到了左,右,上,下的InfoBubble對齊選項,但由於點是動態的,這些選項無濟於事

關於定位信息氣泡以確保其不會覆蓋路線的任何建議?

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。 最簡單的方法是縮小一個停靠點,但是可以使用nokia.maps.map.Displaypadding屬性來確保zoom()時有足夠的空間。 參見nokia.maps.map.Display.setPadding()

  • 其次,計算起點和終點之間的方位

     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); } 
  • 如果結果介於0和Math.PI/2之間,則說明您正向東北行駛,請修復信息氣泡,使其顯示在右側上方

  • 如果結果介於Math.PI/2Math.PI之間,則說明您正向東南行駛,請修復信息氣泡,使其顯示在右側下方
  • 如果結果介於-Math.PI-Math.PI/2之間,則-Math.PI/2您正在西南航行,請修復Inf​​obubble以在左側下方顯示。
  • 如果結果在-Math.PI/2和0之間,則-Math.PI/2您正在向西北行駛時將Infobubble修復為顯示在左側上方

您可以在此處找到有關完全修復InfoBubble的更多信息,答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM