1

我試圖在網上找到它,但沒有多少運氣。 Stackoverflow似乎也沒有類似的問題解決方案。這是最接近的比較,我發現:鼠標懸停地標鏈接時突出​​顯示Google地圖折線

http://groups.google.com/group/google-maps-js-api-v3/browse_thread/thread/2121de2422cf5053?pli=1

但是這個人的活頁看起來並不像他們說的很遠(他們只有2010年1月對他們的地圖工作)...但相同的思路我想做的事。我不知道如何實現給定的解決方案,因爲我將有數百個折線,並且不想爲它們中的每一個創建全局變量...

我想要做的是「集羣「以某種方式具有從該標記開始/結束的一組多段線的地標。然後,我會在該地標的側邊欄/菜單外鏈接中提供一個鏈接,我希望當用戶將鼠標懸停/懸停到地標的鏈接時,與地標關聯的多段線會更改其不透明度(即高光)。我認爲我的問題是:

  1. 如何引用已創建的折線?我如何弄清楚它的手柄?
  2. 我能以某種方式使用「穿過」我的標記的事實來更改多段線的屬性嗎? (即aSel.onmouseover(「接觸這個物體的所有多段線都具有不透明度= 1」))
  3. 有關如何修改gmaps4rails.base.js文件的「create polyline」函數來執行此操作的任何建議? https://github.com/apneadiving/Google-Maps-for-Rails/blob/master/app/assets/javascripts/gmaps4rails/gmaps4rails.base.js.coffee 我有這種感覺,那麼我的問題就會變成「我在創建多段線時如何知道鏈接/地標的處理程序?」如果我嘗試這種方法...

我目前使用Rails和gmaps4rails插件來嘗試這個,但我打開其他優雅的建議/解決方案。

感謝您的幫助!

==========================================

這是我迄今爲止嘗試過的代碼,下面是apneadiving的建議(我不是Rails,javascript,Coffeescript或Maps專家...):

在gmaps4rails.base.js中的createSidebar功能,添加的第二行:

aSel.onclick = @sidebar_element_handler(currentMap, marker_container.serviceObject, 'click') 
aSel.onmouseover = @sidebar_highlight_paths(currentMap, marker_container.serviceObject) 

然後定義:

sidebar_highlight_paths : (currentMap, marker) -> 
    return() -> 
    for polyline in Gmaps.map.polylines 
     points = polyline.serviceObject.latLngs.getArray()[0].getArray() 
     if (@sidebar_intersect(points, marker.position)) 
     @polyline.setOptions({strokeOpacity: 1.0}) 

sidebar_intersect : (a, b) -> 
    [a, b] = [b, a] if a.length > b.length 
    value for value in a when value in b 

相交功能是基於在這裏下車的響應: Coffeescript: Array element matches another array

現在我得到的不透明性和不改變這個錯誤在我的Chrome的JavaScript控制檯,每當我將鼠標懸停在鏈接:

遺漏的類型錯誤:對象中的JavaScript :無效(0);沒有方法 'sidebar_intersect' Gmaps4Rails.Gmaps4Rails.sidebar_highlight_pathsgmaps4rails.base.js:434

資源解釋爲圖像但具有MIME類型text/html移送: 「http://maps.googleapis.com/maps/gen_204?ev=api_viewport&cad=src:apiv3,ts:1336420051554」。

434線(上面無方法錯誤)是:

if @map_options.auto_adjust 
    #from markers 
    @extendBoundsWithMarkers() 
->line 432<- 
    #from polylines: 
    for polyline in @polylines ->line 434<- 
    polyline_points = polyline.serviceObject.latLngs.getArray()[0].getArray() 
    for point in polyline_points 
     @boundsObject.extend point 

這無關我的新功能,sidebar_intersect,所以我很困惑!此外,我現在忽略資源解釋錯誤,因爲它似乎更普遍...

感謝您的提示,aneadiving,我欣賞其他人誰可以闡明我的新錯誤...

=============================

好的,想通了 - 謝謝你的提示apneadiving!對於未來的參考(這實際上可以幫助任何人),我基本上都添加了這兩條線(的onmouseover和onmouseout)以createSidebar在gmaps4rails.base.js.coffee:

aSel.onclick = @sidebar_element_handler(currentMap, marker_container.serviceObject, 'click') 
aSel.onmouseover = @sidebar_highlight_paths(currentMap, marker_container.serviceObject) 
aSel.onmouseout = @sidebar_reset_paths(currentMap, marker_container.serviceObject) 
li.appendChild(aSel) 
ul.appendChild(li) 

然後:

sidebar_highlight_paths : (currentMap, marker) -> 
return() -> 
    for polyline in Gmaps.map.polylines 
    b = polyline.serviceObject.latLngs.getArray()[0].getArray() 
    for latlng in b 
     if (marker.position.equals(latlng)) 
     polyline.serviceObject.setOptions({strokeOpacity: 1}) 

sidebar_reset_paths : (currentMap, marker) -> 
return() -> 
    for polyline in Gmaps.map.polylines 
    polyline.serviceObject.setOptions({strokeOpacity: 0.1} 
+1

這需要很多工作。我會給你一些軌道:1)循環'Gmaps.map.polylines'並標記你想要的多義線,例如:'Gmaps.map.polylines [0] .foo =「bar」'2)不知道你怎麼知道它通過一個標記,但如果你知道它,只需處理谷歌多段線對象例如:'Gmaps.map.polylines [0] .serviceObject' – apneadiving

回答

0

好,想通了 - 謝謝你的提示apneadiving!對於未來的參考(這實際上可以幫助任何人),我基本上都添加了這兩條線(的onmouseover和onmouseout)以createSidebar在gmaps4rails.base.js.coffee:

aSel.onclick = @sidebar_element_handler(currentMap,marker_container.serviceObject, 'click') 
aSel.onmouseover = @sidebar_highlight_paths(currentMap,marker_container.serviceObject) 
aSel.onmouseout = @sidebar_reset_paths(currentMap,marker_container.serviceObject) 
li.appendChild(aSel) 
ul.appendChild(li) 

然後:

sidebar_highlight_paths : (currentMap, marker) -> 
return() -> 
    for polyline in Gmaps.map.polylines 
    b = polyline.serviceObject.latLngs.getArray()[0].getArray() 
    for latlng in b 
     if (marker.position.equals(latlng)) 
     polyline.serviceObject.setOptions({strokeOpacity: 1}) 

sidebar_reset_paths : (currentMap, marker) -> 
return() -> 
    for polyline in Gmaps.map.polylines 
    polyline.serviceObject.setOptions({strokeOpacity: 0.1} 
相關問題