如何传递内联 JSON 而不是 URL 路径

How To Pass Inline JSON Instead of URL Path

你能看一下 This Demo 并告诉我如何传递 Javascript 对象,例如

var projects = [
   { "ProjectID":"15260", "Longitude":"-118.641508",  "Latitude":"51.949915" },
   { "ProjectID":"17043", "Longitude":"-125.444557",  "Latitude":"51.097552"},
   .....
   {  "ProjectID":"17088", "Longitude":"-124.160699", "Latitude":"50.897618" }
];

而不是

中的 URL
var photos = esriRequest({
              url: "data/1000-photos.json",
              handleAs: "json"
            });
            photos.then(addClusters, error);
          });

如您所见,esriRequest() 正在处理来自服务器的 JSON 文件 (data/1000-photos.json),但在我的例子中,我有一个 jQuery Ajax 在 .done() 上调用 returns 相同的数据,我不想将它们保存在 saerver 上。

我已经尝试删除 esriRequest() 并像

一样直接将 addClusters() 加载到地图中
map.on("load", addClusters);

 function addClusters() {
            var photoInfo = {};
            var wgs = new SpatialReference({
              "wkid": 4326
            });
  photoInfo.data = arrayUtils.map(function() {
      for (var i = 0; i < projects.length; i++) {
      var latlng = new  Point(parseFloat(projects.lng), parseFloat(projects.lat), wgs);
      var webMercator = webMercatorUtils.geographicToWebMercator(latlng);
      var attributes = {
        "Caption": p.caption,
        "Name": p.full_name,
        "Image": p.image,
        "Link": p.link
      };
      return {
        "x": webMercator.x,
        "y": webMercator.y,
        "attributes": attributes
      };
               }
    });

但是 photoInfo.data 还是空的!

 photoInfo.data = arrayUtils.map(function() {
      for (var i = 0; i < projects.length; i++) {
      var latlng = new  Point(parseFloat(projects.lng), parseFloat(projects.lat), wgs);

我在这里看到了几个问题:

  • 您正在调用 map(它接受一个数组和一个函数)但您只传递了一个参数。
  • 您在 map 中有一个 for 循环。这毫无意义。
  • 您访问 projects.lng(整个数组)而不是 projects[i].lng(当前元素)。
  • 您的对象没有 lnglat 属性(或 captionfull_nameimagelink).

试试这样的方法:

photoInfo.data = arrayUtils.map(projects, function(p) {
    var latlng = new Point(parseFloat(p.Longitude), parseFloat(p.Latitude), wgs);
    var webMercator = webMercatorUtils.geographicToWebMercator(latlng);
    var attributes = {
        "Caption": "Project ID: " + p.ProjectID
    };
    return {
        "x": webMercator.x,
        "y": webMercator.y,
        "attributes": attributes
    };
});

您的照片字段似乎包含照片上的数据。但是这个link需要跨服务器访问。