Javascript RubyonRails-Geocoder对象作为google地图标记数组
我目前正在开发一个销售代表跟踪工具,我一直在为地图中的地理编码对象显示标记数组。我正在使用geocoder的near函数查找通过url传递的距离我所在位置0.5km的地理编码对象。只要半径内只有一个对象,我当前的代码就可以工作,我知道我需要使用数组来显示多个对象,但在过去的两周里,我一直在这样做Javascript RubyonRails-Geocoder对象作为google地图标记数组,javascript,ruby-on-rails,arrays,ruby,google-maps-api-3,Javascript,Ruby On Rails,Arrays,Ruby,Google Maps Api 3,我目前正在开发一个销售代表跟踪工具,我一直在为地图中的地理编码对象显示标记数组。我正在使用geocoder的near函数查找通过url传递的距离我所在位置0.5km的地理编码对象。只要半径内只有一个对象,我当前的代码就可以工作,我知道我需要使用数组来显示多个对象,但在过去的两周里,我一直在这样做 stores_controller.rb def index @latitude = params[:latitude].to_f @longitude = params[:longit
stores_controller.rb
def index
@latitude = params[:latitude].to_f
@longitude = params[:longitude].to_f
@stores = current_user.stores
@locations = @stores.near([@latitude, @longitude], 0.5)
end
my stores/index.html.erb上的地图
function initMap() {
<% @locations.each do |store| %>
var lat = <%= store.latitude %>
var lng = <%= store.longitude %>
var mylatlng = {lat: lat, lng: lng}
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 15,
center: mylatlng
});
var marker = new google.maps.Marker({
position: mylatlng,
map: map,
animation: google.maps.Animation.DROP,
});
google.maps.event.addListener(marker, 'click', function () {
var c = confirm('Would you like to visit this store?')
if (c === true) {
window.location.href = '<%= store_path(store) %>';
}
if (c === false) {
window.location.href = '<%= dashboard_path %>';
}
});
var contentString = 'Please click on this Marker to visit' + ' ' + '<%= store.storename %>';
var infowindow = new google.maps.InfoWindow({
content: contentString
});
google.maps.event.addListenerOnce(map, 'tilesloaded', function() {
infowindow.open(map, marker);
});
}
<% end %>
函数initMap(){
var lat=
乏液化天然气=
var mylatng={lat:lat,lng:lng}
var map=new google.maps.map(document.getElementById('map'){
缩放:15,
中心:mylatlng
});
var marker=new google.maps.marker({
职位:mylatlng,
地图:地图,
动画:google.maps.animation.DROP,
});
google.maps.event.addListener(标记,'click',函数(){
var c=confirm('您想访问此商店吗?')
如果(c==true){
window.location.href='';
}
如果(c==false){
window.location.href='';
}
});
var contentString='请单击此标记访问'+'+'';
var infowindow=new google.maps.infowindow({
内容:contentString
});
google.maps.event.addListenerOnce(映射'tilesloaded',函数(){
信息窗口。打开(地图、标记);
});
}
应用程序的设置方式一次最多只能有两到三个对象,我知道json是一种选择,但我希望有一种方法可以避免这样做。我读过的所有关于map Array的资源都涉及手动传递arrays参数,但我需要动态地传递,因为对象会随着rep的不同而变化
提前感谢您的帮助。您正在以一种毫无意义的方式将Javascript与Ruby代码混合在一起。它使用一个的原因是,当您使用@locations数组中的单个对象执行它时,它会运行一次并正确输出该Javascript。当它有>1个对象时,它基本上复制了
initMap
Javascript方法的内容
假设您使用的是jQuery,下面是一种可行的方法:
<%- @locations.map {|store| "<div id='store_#{store.id}' class='store-object' data-latitude='#{store.latitude}' data-longitude='#{store.longitude}' data-name='#{store.name}' data-path='#{store_path(store)}'></div>".html_safe} %>
function initMap() {
var $stores = $(".store-object");
$stores.each(function() {
var lat = $(this).data("latitude");
var lng = $(this).data("longitude");
var mylatlng = {lat: lat, lng: lng}
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 15,
center: mylatlng
});
var marker = new google.maps.Marker({
position: mylatlng,
map: map,
animation: google.maps.Animation.DROP,
});
google.maps.event.addListener(marker, 'click', function () {
var c = confirm('Would you like to visit this store?')
if (c === true) {
window.location.href = $(this).data("path");
}
if (c === false) {
window.location.href = '<%= dashboard_path %>';
}
});
var contentString = 'Please click on this Marker to visit' + ' ' + $(this).data("name");
var infowindow = new google.maps.InfoWindow({
content: contentString
});
google.maps.event.addListenerOnce(map, 'tilesloaded', function() {
infowindow.open(map, marker);
});
});
}
函数initMap(){
var$stores=$(“.store对象”);
$stores.each(函数(){
var lat=$(此).data(“纬度”);
var lng=$(此).data(“经度”);
var mylatng={lat:lat,lng:lng}
var map=new google.maps.map(document.getElementById('map'){
缩放:15,
中心:mylatlng
});
var marker=new google.maps.marker({
职位:mylatlng,
地图:地图,
动画:google.maps.animation.DROP,
});
google.maps.event.addListener(标记,'click',函数(){
var c=confirm('您想访问此商店吗?')
如果(c==true){
window.location.href=$(this.data(“路径”);
}
如果(c==false){
window.location.href='';
}
});
var contentString='请单击此标记访问'+'+$(this).data(“name”);
var infowindow=new google.maps.infowindow({
内容:contentString
});
google.maps.event.addListenerOnce(映射'tilesloaded',函数(){
信息窗口。打开(地图、标记);
});
});
}
感谢奥兰多为我指明了正确的方向。我通过使用JSON和标记和信息窗口的JS循环解决了我的问题。我没有更改控制器中的任何内容,修改后的代码如下所示
var map;
function initMap () {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: <%= params[:latitude] %>, lng: <%= params[:longitude] %>},
zoom: 18,
scrollwheel: false,
});
var json = <%= raw @locations.map.to_json {|store|}.html_safe %>;
for (var i = 0, length = json.length; i < length; i++) {
var data = json[i],
LatLng = {lat: data.latitude, lng: data.longitude};
var marker = new google.maps.Marker({
position: LatLng,
map: map,
animation: google.maps.Animation.DROP
});
google.maps.event.addListener(marker, 'click', function () {
var c = confirm('Would you like to visit this store?')
if (c === true) {
window.location.href = "stores/" + data.id;
}
if (c === false) {
window.location.href = '<%= dashboard_path %>';
}
});
var infowindow = new google.maps.InfoWindow();
infowindow.setContent('Click the Marker to visit' + ' ' + data.storename);
infowindow.open(map, marker);
}
}
var映射;
函数initMap(){
map=new google.maps.map(document.getElementById('map'){
中心:{lat:,lng:},
缩放:18,
滚轮:错误,
});
var json=;
for(var i=0,length=json.length;i
感谢您的回复,我对Rails、JS、JQuery和谷歌地图都是新手,并且一直在关注这方面的教程。我尝试了你的代码,它不会抛出任何错误,但不会显示地图或任何标记。使用Chrome开发工具,它也不会抛出任何错误,但似乎不想工作。我还试图稍微修改一下代码,但没有用。我是否必须为标记使用标记数组,因为在位置数组中一次可能加载多个存储?再次感谢您的帮助。