先看效果图:

包含三个部分:信息窗口(标题是要素的某个属性信息,其余是感兴趣的属性信息)、图上图形按照某一属性大小不一显示,图例

1、创建底图用于存放以上三部分:

"esri/Map","esri/views/MapView"

var map = new Map({

  basemap:"dark-gray"
});

var view = new MapView({

  map:map,

  container:"viewDiv",

  center:[-144.492, 62.771],

  zoom:5,

  ui:{  //自定义ui用于存放图例的位置

    padding:{bottom:15,right:0}

  }

});

2、为了完成以上三个部分,框架设置为实现主要的五个函数,分别是获取数据、创建图形、创建图形图层、创建图例、捕捉错误信息。

view.when(function(){

  getData()  //获取数据

  .then(createGraphics)  //创建图形数组

  .then(createLayer)  //创建图形图层

  .then(createLegend)  //创建图例

  .then(errback)  //捕捉错误信息

})

3、获取JSON数据函数实现

"esri/config","esri/request"

function getData(){

  var url = "https://developers.arcgis.com/javascript/latest/sample-code/layers-featurelayer-collection/live/data/week.json";

  esriConfig.request.corsEnabledServers.push(url);  //配置请求

  return esriRequest(url,{responseType:"json"});  //返回获取的json数据

}

4、创建图形

"esri/geometry/Point"

function createGraphics(response){

  var geoJSON = response.data;

  //返回的是每个JSON数据对应的图形组成的数组

  return geoJSON.features.map(function(feature,i){

    geometry:new Point({

      x:feature.geometry.coordinates[0],

      y:feature.geometry.coordinates[1]

    }),

    attributes:{

      ObjectID:i,

      title:feature.properties.title,

      type:feature.properties.type,

      place:feature.properties.place,

      depth: feature.geometry.coordinates[2] + " km",

      time:feature.properties.time,

      mag:feature.properties.mag,      

      mmi:feature.properties.mmi,

      felt:feature.properties.felt,

      sig:feature.properties.sig,

      url:feature.properties.url

    }

  })

}

5、创建图形图层

"esri/layers/FeatureLayer"

//设置全局变量要素图层

var layer;

function createLayer(graphics){

  //设置图形图层必须的属性设置:source fields objectIdField renderer

  layer = new FeatureLayer({

    sources:graphics,

    fields:fields,

    objectIdField:"ObjectID",

    renderer:quakerenderer,

    popupTemplate:pTemplate  

  });

  map.add(layer);

  return layer;

}

//设置fields

var fields = [{

  name:"ObjectID",  //全程必须要自己定义一个ObjectID因为这是图形图层创建的必须属性

  alias:"ObjectID",

  type:"oid"

},{

  name:"title",

  alias:"title",

  type:"string"

},...{

  name:"time",

  alias:"time",

  type:"date"

},{

  name:"mag",

  alias:"Magnitude",

  type:"double"

}];

//设置渲染方式

var quakerenderer = {

  type:"simple",

  symbol:{

    type:"simple-marker",

    style:"circle",

    size:20,

    color:[211,255,0,0],

    outline:{

      width:1,

      color:"#FF0055",

      style:"solid"

    }

  },

  visualVariables:[{

    type:"size",

    field:"mag",

    valueUnit:"unknow",

    minDataValue:2,

    maxDataValue:7,

    minSize:{

      type: "size",
            valueExpression: "$view.scale",
            stops: [
            {
              value: 1128,
              size: 12
            },
            {
              value: 36111,
              size: 12
            },
            {
              value: 9244649,
              size: 6
            },
            {
              value: 73957191,
              size: 4
            },
            {
              value: 591657528,
              size: 2
            }]

    },

    maxSize:{

      type: "size",
            valueExpression: "$view.scale",
            stops: [
            {
              value: 1128,
              size: 80
            },
            {
              value: 36111,
              size: 60
            },
            {
              value: 9244649,
              size: 50
            },
            {
              value: 73957191,
              size: 50
            },
            {
              value: 591657528,
              size: 25
            }]

    }

  }]

}

//设置信息窗口

var pTemplate = [{

  title:{title},

  content:[{

    type:"fields",

    fieldInfos:[{

      fieldName:"place",

      label:"Location",

      visible:true

    }...{

      filedName:"felt",

      label:"Number who felt the quake",

      visible:true,

      format:{places:0,digitSeparator:true}

    },...{

      fieldName:"time",

      label:"Date and time",

      format:{dateFormat:"short-date-short-time"}

    }]

  }]

}]

6、创建图例

"esri/widgets/Legend"

var legend;

function createLegend(layer){

  //如果图例已经存在了就更新,未存在就创建

  if(legend){

    legend.layerInfos = [{

      layer:layer,

      title:"Magnitude"

    }];

  }

  else{

    legend = new Legend({

      view:view,

      layerInfos:[{

        layer:layer,

        title:"Earthquake"

      }]

    },"infoDiv");  //放置在infoDiv的标签当中

  }

}

7、捕捉错误信息

function errback(error){

  console.error("create legend failed!",error);

}

利用请求的JSON数据创建图形图层的更多相关文章

  1. 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

    作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...

  2. Struts2.5 利用Ajax将json数据传值到JSP

    AJAX +JSON=>JSP AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着 ...

  3. 一种从JSON数据创建Java类的高效办法

    <一种从JSON数据创建Java类的高效办法> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs JSON格式的数据经常会遇到,比如调用Web服 ...

  4. PHP/Post 提交请求获取json数据,并转化为所需要的数组

    /** * Post 提交请求获取json数据,并转化为所需要的数组 */ function request_post($url = '', $param = '') { if (empty($url ...

  5. 在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法

    在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法 最近在做一个小东西,使用kindeditor上传图片的时候,自己写了一个上传的方法,按照协议规则通过ajax返回json ...

  6. 【VueJS】VueJS开发请求本地json数据的配置

    VueJS开发请求本地json数据的配置,旧版本是build/dev-server.js,新版本是build/webpack.dev.conf.js. VueJS开发请求本地json数据的配置,早期的 ...

  7. Java JSON数据创建和读取

    Java  json数据创建 package com.JavaTest; import com.google.gson.JsonArray; import com.google.gson.JsonOb ...

  8. Nginx下HTML页面POST请求静态JSON数据返回405状态

    在浏览器访问HTML页面,发现一些静态JSON数据没有显示,F12查看,如下图所示: 可以看到请求方式为POST 将请求链接复制在浏览器地址栏访问,可以正常请求到数据 F12查看,可以看到请求方式为G ...

  9. Beego框架POST请求接收JSON数据

    原文: https://blog.csdn.net/Aaron_80726/article/details/83870563 ------------------------------------- ...

随机推荐

  1. HDU 5901 Count primes( Meisell-Lehmer算法模板 )

    链接:传送门 题意:计算 [ 1 , n ] 之间素数的个数,(1 <= n <= 1e11) 思路:Meisell-Lehmer算法是计算超大范围内素数个数的一种算法,原理并不明白,由于 ...

  2. BZOJ 3144 [HNOI2013]切糕 (最大流+巧妙的建图)

    题面:洛谷传送门 BZOJ传送门 最大流神题 把点权转化为边权,切糕里每个点$(i,j,k)$向$(i,j,k+1)$连一条流量为$v(i,j,k)$的边 源点$S$向第$1$层的点连边,第$R+1$ ...

  3. 01.Python基础-5.函数

    1 函数的介绍 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 内置函数 自定义函数 2 函数的定义和调用 2.1 函数的定义和调用 定义 def 函数名([参数]): 代码块 [ ...

  4. 地图API示例

    http://developer.baidu.com/map/jsdemo.htm#i6_2

  5. 2019-04-03 SQL Group By某列,预先对该列进行一个预处理,提炼出共有的信息,即关键字case when 列名什么条件 then 赋值 else 赋值 end as 新列名

    select sum(发行金额) from( select PoolNameFormat,count(cast(ItemValue as decimal(19,4))) as 发行笔数,sum(cas ...

  6. 面试准备专题——JVM,类编译,类加载,内存错误

    jvm体系总体分四大块: 类的加载机制 jvm内存结构 GC算法 垃圾回收 GC分析 命令调优 类的加载机制 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法 ...

  7. 关于安卓sdk开发环境的的更新-Android SDK下载和更新失败

    由于特别原因,我们更新安卓sdk时不会成功.解决办法: 修改C:\Windows\System32\drivers\etc\hosts文件.添加一行:74.125.237.1       dl-ssl ...

  8. mysql查询优化--临时表和文件排序(Using temporary; Using filesort问题解决)

    先看一段sql: <span style="font-size:18px;">SELECT * FROM rank_user AS rankUser LEFT JOIN ...

  9. 基本SQL查询

    当在数据库的表中存入数据后,就可以查询这些已经存入的数据.下面学习基本SQL查询 本节要点: l  如何使用select语句 Select语句的语法 SELECT语句中的运算 使用DISTINCT和U ...

  10. 关于java发送email

    转载:https://blog.csdn.net/qq_32371887/article/details/72821291 1:使用JavaMail发送邮件 // 1.创建一个程序与邮件服务器会话对象 ...