Arcgis JSAPI,错误:<circle>属性cx:预期长度,&#34; NaN&#34;

时间:2017-03-12 23:13:53

标签: javascript arcgis esri arcgis-js-api

我使用Arcgis JSAPI 4.3开发应用程序。 我尝试使用提供活动网站的公共API在地图上显示一些公共活动。

我将XMLHttpRequest响应作为Json数据,包括许多事件的事件纬度和经度信息。

但我在控制台中收到此错误; MapView.js:379错误:属性cx:预期长度,&#34; NaN&#34;。

****错误截图**** enter image description here

当我拖动地图时,错误计数越来越多。

标记始终显示在左上角,如下所示。 enter image description here

var latitude = [];
var longitude = [];
eventIO.request.onreadystatechange = function () {
    if (this.readyState === 4) {

      listItems = JSON.parse(this.responseText);
      data = listItems.recs;

      for (var j=0; j < data.length; j++) {
        latitude.push(data[j].venue.lat);
        longitude.push(data[j].venue.lng);
      }
}


  require([
    "esri/Map",
    "esri/PopupTemplate",
    "esri/views/MapView",
    "esri/Graphic",
    "esri/geometry/Point",
    "esri/geometry/Multipoint",
    "esri/geometry/Polyline",
    "esri/geometry/Polygon",
    "esri/symbols/SimpleMarkerSymbol",
    "esri/layers/FeatureLayer",
    "dojo/domReady!"
  ], function(
    Map, PopupTemplate, MapView,
    Graphic, Point, Multipoint, Polyline, Polygon,
    SimpleMarkerSymbol, FeatureLayer
  ) {   

    var map = new Map({
      basemap: "hybrid"
    });

    var view = new MapView({
      center: [30, 40],
      container: "viewDiv",
      map: map,
      zoom: 6
    });

    var myPoints = {"points": [[longitude, latitude]]};
    var multipoint = new Multipoint(myPoints);

    var markerSymbol = new SimpleMarkerSymbol({
      color: [226, 119, 40],
      outline: {
        color: [255, 255, 255],
        width: 2
      }
    });

    var pointGraphic = new Graphic({
      geometry: multipoint,
      symbol: markerSymbol
    });

    view.then(function() {
      view.graphics.add(pointGraphic);
    });

  });

&#34;多点&#34;

的控制台日志屏幕截图

enter image description here

2 个答案:

答案 0 :(得分:1)

API文档multipoints property "points"要求提供一个Number数组,控制台日志显示您的点数组包含字符串,即:"40.993603"

修改for循环以将纬度和经度值转换为float。

我甚至怀疑你没有正确地构建点数组来构建你的多点。在这个for循环中,你应该将经度和纬度推到同一个数组中。

var points = [];
for (var j=0; j < data.length; j++) {
  points.push([parseFloat(data[j].venue.lng, parseFloat(data[j].venue.lat)]);
}

然后:var multipoint = new Multipoint({"points" : points})

答案 1 :(得分:0)

我已将字符串转换为数组中的数字,将NaN值转换为固定值。

我已经更改了我的代码,例如下面的内容;​​

latitude.push(parseFloat(data[j].venue.lat) || 40 );
longitude.push(parseFloat(data[j].venue.lng) || 29 );
points.push([(parseFloat(data[j].venue.lat) || 40 ),(parseFloat(data[j].venue.lng) || 29 )]);

enter image description here

现在修好了。再次感谢您的帮助。

enter image description here