0

我在 ruby​​ 上并在页面上设置地图。我可以在初始化时添加标记,但我想要的是遍历我的@events 并找到经度和纬度字段并执行类似的操作

<% @event.each do |event|%>
  <script type="text/javascript">
    var long = <%= event.longitude %>;
    var lati = <%= event.latitude %>;
    addMarker(long, lati);
  </script>
<% end %>

我不熟悉google api,但希望有可能。

这是我在构建地图 api 方面所拥有的

function initialize() 
{
    var lat, lon, map, myOptions;
    //check if user has geo feature
    if(navigator.geolocation){
    navigator.geolocation.getCurrentPosition(
    //get position

    function(position){
        lat = position.coords.latitude;
        lon = position.coords.longitude;

        //init map
        myOptions = {
           center: new google.maps.LatLng(lat, lon),
           zoom: 8,
           mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map_canvas"),
            myOptions);
            var myLatlng = new google.maps.LatLng(46.4352,-80.9455);
    var marker = new google.maps.Marker({
        position: myLatlng,
        title:"Hello World!"
    });
    // To add the marker to the map, call setMap();
    marker.setMap(map);
    },
    // if there was an error
    function(error){
        alert('ouch');
    });
    }
    //case the users browser doesn't support geolocations
    else 
    {
        alert("Your browser doesn't support geolocations, please consider downloading Google Chrome");
    }
}
4

1 回答 1

2

这是我的建议:

<script type="text/javascript">

  function addMarker(lat, lng) {
    var marker = new google.maps.Marker({
      position: new google.maps.LatLng(lat, lng),
      map: map
    });
  }

  <% @events.each do |event| %>
    addMarker(<%= event.latitude %>, <%= event.longitude %>);
  <% end %>

</script>

创建一个addMarker函数(如果它尚不存在),它接受两个参数——纬度和经度——并将相应的标记添加到现有地图。然后,您可以使用 Ruby 创建一个对addMarkerper的调用@event

有一些方法可以进一步优化。例如,您可以有一个单独的 Ruby 脚本,将坐标输出为 JSON,并使用异步 HTTP 请求(也称为 Ajax)在运行时将坐标加载到数组中,然后您可以使用该数组来填充地图。

于 2013-01-08T00:26:55.130 回答