此处API群集错误:“未定义addLayer”

时间:2018-08-14 17:53:33

标签: javascript here-api

我尝试在我的应用程序中使用clastering,但是我收到一个未定义addLayer的错误消息。”

我不知道如何解决此问题。

我只是从Here API示例api集群中复制并粘贴此示例函数

然后我将lat和lng传递给函数,但addLayer未定义。

我有map对象,但是addLayer未定义。

function startClustering(map, data) {
  // First we need to create an array of DataPoint objects,
  // for the ClusterProvider
  var dataPoints = data.map(function(item) {
    return new H.clustering.DataPoint(item.latitude, item.longitude);
  });

  // Create a clustering provider with custom options for clusterizing the input
  var clusteredDataProvider = new H.clustering.Provider(dataPoints, {
    clusteringOptions: {
      // Maximum radius of the neighbourhood
      eps: 32,
      // minimum weight of points required to form a cluster
      minWeight: 2
    }
  });

  // Create a layer tha will consume objects from our clustering provider
  var clusteringLayer = new H.map.layer.ObjectLayer(clusteredDataProvider);

  // To make objects from clustering provder visible,
  // we need to add our layer to the map

  map.addLayer(clusteringLayer);

}

然后我将lat和lng传递给函数,但addLayer未定义。

我有地图对象,胸围不存在addLayer。

我嵌入了脚本

<script type="text/javascript" src="https://js.api.here.com/v3/3.0/mapsjs-clustering.js"></script>

在我的索引上。

我不知道如何解决此问题。

如果有人知道如何解决,我很乐意倾听

编辑:每个评论请求的其他代码:

function addMarkerToCameraGroup(map, coordinate, html) { // add and remove markers
  document.querySelector(".camera-box").addEventListener("click", function() {
    if (document.getElementsByClassName("camera-marker-position")[0] === undefined) {
      map.addObject(cameraMarker);
      self.startClustering(map, coordinate);
    } else {
      map.removeAll();
    }
  });
}

1 个答案:

答案 0 :(得分:0)

您第二次以"Try to create a cluster unsing a sample but addLayer got undefinied"的身份提出此问题,该问题未包含其中的一些详细信息。但是,考虑到您对这个问题所做的其他编辑/上下文,似乎您正在添加事件侦听器,其中map可能超出范围或尚未为匿名函数内部的可见性定义。

document.querySelector(".camera-box").addEventListener("click", function() {
    if (document.getElementsByClassName("camera-marker-position")[0] === undefined) {
      map.addObject(cameraMarker);
      self.startClustering(map, coordinate);
    } else {
      map.removeAll();
    }
  });

您可以进行打字检查,以查看单击事件发生时是否已定义地图,并且/或者确认它是否为H.map。在没有看到完整列表的情况下,也可能是因为您没有将map设置为全局变量,而是在页面初始化的其他位置声明了它,所以在触发click事件时超出了范围。

您可以检查JavaScript callback scope以获得有关闭包的详细信息,在声明函数时可以在事件中提供map。有关更多常规信息:JavaScript HTML DOM EventListener