【问题标题】:Google Map API Marker add dynamic lable in Ruby On RailsGoogle Map API Marker 在 Ruby On Rails 中添加动态标签
【发布时间】:2014-06-18 08:19:19
【问题描述】:

我想在地图上显示传感器的许多位置,我需要在标记上显示所有当前传感器值(不在信息窗口上,用户无需单击标记即可查看数据)

创建许多不同的图标和更改图标对我来说是不现实的。 有没有办法在标记上显示动态数据?说在标记顶部显示一个数字标签。我找到了一个,但无法将其翻译成 ruby​​ on rails 代码。 这是我为java 找到的链接。 这是一个link,可用于在 ROR 上创建 gmaps

这就是我现在所拥有的。使用 gem Gmaps4rails。

在 app/asssts/gmaptest.js.coffee 中

class CustomMarkerBuilder extends Gmaps.Google.Builders.Marker
create_marker: ->
options = _.extend @marker_options(), @rich_marker_options()
@serviceObject = new RichMarker options

rich_marker_options: ->
marker = document.createElement("div")
marker.setAttribute('class', 'custom_marker_content')
marker.innerHTML = this.args.custom_marker
{ content: marker }

create_infowindow: ->
return null unless _.isString @args.custom_infowindow

boxText = document.createElement("div")
boxText.setAttribute("class", 'custom_infowindow_content')
boxText.innerHTML = @args.custom_infowindow
@infowindow = new InfoBox(@infobox(boxText))

infobox: (boxText)->
content: boxText
pixelOffset: new google.maps.Size(-140, 0)
boxStyle:
  width: "280px"
@buildMap=(markers)->
handler = Gmaps.build("Google", builders: { Marker: CustomMarkerBuilder } )
handler.buildMap { internal: id: "custom_builder" }, ->
marker = handler.addMarker
lat:               40.689167
lng:               -74.044444
custom_marker:     "<img src='images/star.jpg' width='30' height='30'> Some text here"
custom_infowindow: "<img src='images/statue.jpg' width='90' height='140'> some test here"

handler.map.centerOn marker
handler.getMap().setZoom(15)
@hash = Gmaps4rails.build_markers(@noiseDevices) do |noiseDevice, marker|
marker.lat noiseDevice.latitude
marker.lng noiseDevice.longitude
end

在 app/controller/gmaptest_controller.rb 中

@noiseDevices = NoiseDevice.all
@hash = Gmaps4rails.build_markers(@noiseDevices) do |noiseDevice, marker|
marker.lat noiseDevice.latitude
marker.lng noiseDevice.longitude
marker.json({custom_marker: "hi all"})
end

在 app/view/gmaptest/index.html.erb 中

<script src="//maps.google.com/maps/api/js?v=3.13&amp;sensor=false&amp;libraries=geometry" type="text/javascript"></script>
<script src='//google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js' type='text/javascript'></script>
<script src='//google-maps-utility-library-v3.googlecode.com/svn/trunk/richmarker/src/richmarker-compiled.js' type='text/javascript'></script>

<h1>Listing gmaptests</h1>

<table>
  <tr>
    <th>Latitude</th>
    <th>Longitude</th>
    <th>Address</th>
    <th>Description</th>
    <th>Title</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @noiseDevices.each do |noiseDevice| %>
  <tr>
    <td><%= noiseDevice.latitude %></td>
    <td><%= noiseDevice.longitude %></td>




  </tr>
<% end %>
</table>

<br />

<%= link_to 'New gmaptest', new_g1test_path %>
<div style='width: 800px;'>
<div id="custom_builder" style='width: 800px; height: 400px;'></div>
 </div>
<div style='width: 800px;'>
  <div id="map" style='width: 800px; height: 400px;'></div>
</div>


<script type="text/javascript">

handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = handler.addMarkers(<%=raw @hash.to_json %>);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
});
</script>

现在的问题是,当我尝试按照视频/教程编辑视图中的文件时,整个谷歌地图窗口消失。原因之一是添加 buildMap() 和其他将脚本更改为 <script type="text/javascript">
var handler = Gmaps.build("Google", builders: { Marker: CustomMarkerBuilder } ) handler.buildMap({ internal: id: "map" }, function(){ var markers = handler.addMarkers(<%=raw @hash.to_json %>); }); </script>

【问题讨论】:

  • 你看apneadiving.github.io了吗?
  • @apneadiving 哦!谢谢你。我只是发现 custom_marker 可能满足我的需要。
  • @apneadiving 我尝试将代码从自定义标记复制到 myfile.js.coffee,但真的不知道下一步该做什么。标记保持不变
  • 你到底有什么?
  • @apneadiving 现在我有一个 ROR 项目,你提供的链接是 java 脚本。不知道如何与我的项目合并。功能是我需要的

标签: javascript ruby-on-rails ruby google-maps gmaps4rails


【解决方案1】:

第 1 步:

创建一个咖啡文件,命名为gmaps4rails_builder.coffee

class @CustomMarkerBuilder extends Gmaps.Google.Builders.Marker
  create_marker: ->
    options = _.extend @marker_options(), @rich_marker_options()
    @serviceObject = new RichMarker options

  rich_marker_options: ->
    marker = document.createElement("div")
    marker.setAttribute('class', 'custom_marker_content')
    marker.innerHTML = this.args.custom_marker
    { content: marker }

第二步:

在你看来:

<script src='//google-maps-utility-library-v3.googlecode.com/svn/trunk/richmarker/src/richmarker-compiled.js' type='text/javascript'></script>

<script type="text/javascript">  
  var handler = Gmaps.build("Google", builders: { Marker: CustomMarkerBuilder } )
  handler.buildMap({ internal: id: "map" }, function(){
    var markers = handler.addMarkers(<%=raw @hash.to_json %>);
  });
</script>

第三步:

在您的控制器中:

@hash = Gmaps4rails.build_markers(@noiseDevices) do |noiseDevice, marker|
  marker.lat noiseDevice.latitude
  marker.lng noiseDevice.longitude
  marker.json({
    custom_marker: "marker html here"
  })
end

【讨论】:

  • 我再次阅读了您的video,gmaps4rails 咖啡脚本中的file 将放在控制器的咖啡文件中,位于 app/assets/javascripts/gmaptest.js.coffee 头文件和 html 下文件我也跟着你的视频。问题是,在我在 view/gmaptest/index.html.erb 中添加行 buildMap() 之后,我的整个谷歌地图窗口消失了。当我尝试时会发生这种情况也可以关注您的视频。
  • 我能问一下把这个“gmaps4rails_builder.coffee”文件放在哪里吗?它在 app/assets/javascripts 下吗?
  • 是的,并确保您在 application.js 中需要它
猜你喜欢
  • 1970-01-01
  • 2014-06-17
  • 2017-10-08
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2017-10-11
相关资源
最近更新 更多