javascript - 在谷歌地图中显示 parse.com 的所有地理点

标签 javascript google-maps parse-platform google-maps-api-3

我正在尝试从 parse.com 中的一个类中获取所有地理点,并将它们显示为谷歌地图中的标记。 (大约只有 1 个 geoipoin,lat lng,就像一个魅力,所以这里是代码)

 function businessProfile(uid) {
      Parse.initialize("APPID", "JSKEY");
      var bprofile = Parse.Object.extend("magazia");
      var query = new Parse.Query(bprofile);
      query.notEqualTo("objectId", null);
      query.find({
          success: function(results) {
            for (var i = 0; i < results.length; i++) { var object = results[i];
                  var locationsBlock = {};
                  locationsBlock = JSON.parse(JSON.stringify(object));
                  var location = {};
                  location = JSON.parse(JSON.stringify(locationsBlock.latlon));
                  var lat = location.latitude;
                  var lon = location.longitude;
                  var magname = object.get('name');
                  setData(magname, lat, lon);
              }


          },
         error: function(error) {

              alert("Error: " + error.code + " " + error.message);
          }
      });
  }

所以通过上面的代码,我得到了 16 个不同行的所有地理点,并将它们放入一个数组(我希望我做的正确),该数组在函数外部声明,因为我在 map 初始化时再次调用它下面的功能。

function initMap() {

  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 3,
    center: {lat: 34.9, lng: 111.2}
  });

  setMarkers(map);
}
function setData(magname, lat, lon){
    var arlat = [];
arlat.push(magname, lat, lon);
console.log(arlat);
}
function setMarkers(map) {

  for (var i = 0; i < arlat.length; i++) {
    var arlat = arlat[i];
    var marker = new google.maps.Marker({
      position: {lat: arlat[1], lng: arlat[2]},
      map: map,
      title: arlat[0]

    });
  }
}

所以现在我一直在研究如何使用标记将每个地理点放置到 map 中。 我知道它与“for 循环”有关,但我被困在那里。现在它只显示列表标记中的第一个,我想显示所有标记。

更新

所以对我的代码进行了一次更新,我已经成功地传递了我在解析中从类(class)获得的所有名称和经纬度,现在我将它们放入 function setData()

现在的问题是,我如何在 setMarkers() 中传递 arlat 数组,因为 setMarkers 函数从 initMap() 获取 map 变量 并且我希望它也采用 setData() 函数中的 arlat 数组,以便我可以在右侧部分打印经纬度和名称?这是 console.log(arlat)

的预览

enter image description here

最佳答案

而不是推送三个变量:

arlat.push(magname, lat, lon);

你可能应该 push一个对象,像这样:

 arlat.push({lat: lat, lon: lon});

然后我们只需要遍历引脚(您可以使用 for 循环来完成,但是 forEach 可能更简单,因为您不必索引到数组中,只需使用接受数组元素)...

var marker = new google.maps.Marker({
    position: myLatLng,
    map: map,
    icon: iconBase + 'marker.png',

    title: 'Hello World!'
});
arlat.forEach(function(positionObject) {
    var pin = new google.maps.Marker({
        position: {
            lat: positionObject.lat,
            lon: positionObject.lon
        },
        map: map,
        //title: positionObject.title, //if title property is set above
        icon: 'http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|00ff00' //green pin, more available
    });
});

这对你有用吗?有关图标的更多信息,请查看 google maps API (您可能已经看过)

更新 - 根据您的更新,我注意到您正在重新分配 arlat 的值,这与 foreach 迭代冲突。我已将其更改为使用对象,而不是覆盖数组对象 - 参见 this plunkr或下面的代码片段。

function initialize() {
  var arlat = [];
  setData('a', 34.0, 111.2);
  setData('v', 30.1, 116.3);
  initMap();

  function initMap() {
    var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 3,
      center: {
        lat: 34.9,
        lng: 111.2
      }
    });
    setMarkers(map);
  }

  function setData(magname, lat, lon) {
    //notice how we name the properties below: name, lat, lon - these are referenced down below in setMarkers()
    arlat.push({
      name: magname,
      lat: lat,
      lon: lon
    });
  }

  function setMarkers(map) {
    for (var i = 0; i < arlat.length; i++) {
      var marker = new google.maps.Marker({
        position: {
          lat: arlat[i].lat,
          lng: arlat[i].lon
        },
        map: map,
        title: arlat[i].name
      });
    }
  }
}
google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#map {
  height: 90%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<div id="map"></div>

关于javascript - 在谷歌地图中显示 parse.com 的所有地理点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35135978/

相关文章:

javascript - 通过路由器导出 Angular 6 访问元素

javascript - 在 PHP 和 JavaScript 中设置货币格式

android - 如何在 MapActivity 中的标记上方显示气球?没有小部件吗?

java - 限制 Android Google Places API 仅搜索给定区域

ios - 应用程序启动时加载用户配置文件,选择 View 时崩溃,将 PFFile 转换为 UIImage

javascript - 如何从包含 promise 链的常规 javascript 函数返回值?

javascript - 单击任何菜单按钮返回一页并向下滚动到位置

javascript - d3 v4 : Using stack with histogram data?

javascript - 将 infoWindows 添加到数组中的多个标记

ios - 关系查询后解析编辑对象