ArcGIS API for JS 之 不依赖地图服务创建FeatureLayer图层
2017-12-05 17:50
766 查看
在ArcGIS API for JS中,有一个很强大的要素图层类——FeatureLayer类。它是一种图形要素图层,继承于esri/layers/GraphicLayer,用来对服务图层中的要素服务进行显示。但是通常依赖ArcGIS
Server发布的地图服务来获取数据源,实际应用中,很多业务数据来源数据库亦或者是前端JSON格式的数据,并不一定是从地图服务来获取的。而通过API文档中所示,创建FeatureLayer图层有两种方式,本文重点解决如何通过第二种方式,脱离地图服务,创建要素图层。
在创建要素图层的时候,最重要的就是构造featureCollectionObject,featureCollecttionObject又是由featureSet和layerDefinition构成。正式由这两个参数,构建了一个类似于标准的featureLayer的数据格式。
featureSet由 esri/task/FeatureSet 来创建,输入参数采用json的格式,这个json格式的数据其实就是构建了一个shp数据层,这里,我们可以采用arcgis的arctools来将shp数据转化为geoJson数据,具体转化方法请参考:这里;转化之后就如下所示:
[javascript] view
plain copy
var dz = {
//数据的基本属性
"displayFieldName": "",
"fieldAliases": {
"FID": "FID",
"UserID": "UserID",
"NAME": "NAME",
"TYPE_USER": "TYPE_USER",
"CODE": "CODE",
"ADDRESS": "ADDRESS",
"TELEPHONE": "TELEPHONE"
},
"geometryType": "esriGeometryPoint",
"spatialReference": {
"wkid": 4490,
"latestWkid": 4490
},
//所含有的字段信息
"fields": [
{
"name": "FID",
"type": "esriFieldTypeOID",
"alias": "FID"
},
{
"name": "UserID",
"type": "esriFieldTypeInteger",
"alias": "UserID"
},
{
"name": "NAME",
"type": "esriFieldTypeString",
"alias": "NAME",
"length": 100
},
{
"name": "TYPE_USER",
"type": "esriFieldTypeString",
"alias": "TYPE_USER",
"length": 10
},
{
"name": "CODE",
"type": "esriFieldTypeString",
"alias": "CODE",
"length": 20
},
{
"name": "ADDRESS",
"type": "esriFieldTypeString",
"alias": "ADDRESS",
"length": 100
},
{
"name": "TELEPHONE",
"type": "esriFieldTypeString",
"alias": "TELEPHONE",
"length": 60
}
],
//所含有的集合要素集
"features": [
{
"attributes": {
"FID": 0,
"UserID": 0,
"NAME": "湖滨商业街262号写字楼",
"TYPE_USER": "120201",
"CODE": "320211",
"ADDRESS": "湖滨街262",
"TELEPHONE": " "
},
"geometry": {
"x": 120.277378,
"y": 31.534747999999997
}
},
{
"attributes": {
"FID": 1,
"UserID": 0,
"NAME": "东方银座(西南门)",
"TYPE_USER": "120201",
"CODE": "320211",
"ADDRESS": "新区长江路旁",
"TELEPHONE": " "
},
"geometry": {
"x": 120.359826,
"y": 31.540464
}
},
{
"attributes": {
"FID": 2,
"UserID": 0,
"NAME": "东方银座",
"TYPE_USER": "120201",
"CODE": "320211",
"ADDRESS": "新区长江路旁",
"TELEPHONE": " "
},
"geometry": {
"x": 120.36029500000001,
"y": 31.540967
}
}]}
这里就相当于模拟了一个个新的属性点构成的一个要素图层。而layerDefinition则是用来描述这个要素图层的,最少需要“geometryType”和“fields”,因此,他的构造格式如下所示:
[javascript] view
plain copy
var layerDefinition = {
"geometryType": "esriGeometryPoint",
"fields":[
{
"name": "FID",
"type": "esriFieldTypeOID",
"alias": "FID"
},
{
"name": "UserID",
"type": "esriFieldTypeInteger",
"alias": "UserID"
},
{
"name": "NAME",
"type": "esriFieldTypeString",
"alias": "NAME",
"length": 100
},
{
"name": "TYPE_USER",
"type": "esriFieldTypeString",
"alias": "TYPE_USER",
"length": 10
},
{
"name": "CODE",
"type": "esriFieldTypeString",
"alias": "CODE",
"length": 20
},
{
"name": "ADDRESS",
"type": "esriFieldTypeString",
"alias": "ADDRESS",
"length": 100
},
{
"name": "TELEPHONE",
"type": "esriFieldTypeString",
"alias": "TELEPHONE",
"length": 60
}
]
};
这样就可以不依赖服务构造出一个FeatureLayer的要素图层。具体全部代码如下所示:
[javascript] view
plain copy
var featureSet = new esri.tasks.FeatureSet(dz);
var featureCollection = {
layerDefinition: layerDefinition,
featureSet: featureSet
};
var featurelayer = new esri.layer.FeatureLayer(featureCollection);
对图层进行渲染之后的热力图结果如下图所示:
宁波整形美容医院http://www.lyxcl.org/
Server发布的地图服务来获取数据源,实际应用中,很多业务数据来源数据库亦或者是前端JSON格式的数据,并不一定是从地图服务来获取的。而通过API文档中所示,创建FeatureLayer图层有两种方式,本文重点解决如何通过第二种方式,脱离地图服务,创建要素图层。
在创建要素图层的时候,最重要的就是构造featureCollectionObject,featureCollecttionObject又是由featureSet和layerDefinition构成。正式由这两个参数,构建了一个类似于标准的featureLayer的数据格式。
featureSet由 esri/task/FeatureSet 来创建,输入参数采用json的格式,这个json格式的数据其实就是构建了一个shp数据层,这里,我们可以采用arcgis的arctools来将shp数据转化为geoJson数据,具体转化方法请参考:这里;转化之后就如下所示:
[javascript] view
plain copy
var dz = {
//数据的基本属性
"displayFieldName": "",
"fieldAliases": {
"FID": "FID",
"UserID": "UserID",
"NAME": "NAME",
"TYPE_USER": "TYPE_USER",
"CODE": "CODE",
"ADDRESS": "ADDRESS",
"TELEPHONE": "TELEPHONE"
},
"geometryType": "esriGeometryPoint",
"spatialReference": {
"wkid": 4490,
"latestWkid": 4490
},
//所含有的字段信息
"fields": [
{
"name": "FID",
"type": "esriFieldTypeOID",
"alias": "FID"
},
{
"name": "UserID",
"type": "esriFieldTypeInteger",
"alias": "UserID"
},
{
"name": "NAME",
"type": "esriFieldTypeString",
"alias": "NAME",
"length": 100
},
{
"name": "TYPE_USER",
"type": "esriFieldTypeString",
"alias": "TYPE_USER",
"length": 10
},
{
"name": "CODE",
"type": "esriFieldTypeString",
"alias": "CODE",
"length": 20
},
{
"name": "ADDRESS",
"type": "esriFieldTypeString",
"alias": "ADDRESS",
"length": 100
},
{
"name": "TELEPHONE",
"type": "esriFieldTypeString",
"alias": "TELEPHONE",
"length": 60
}
],
//所含有的集合要素集
"features": [
{
"attributes": {
"FID": 0,
"UserID": 0,
"NAME": "湖滨商业街262号写字楼",
"TYPE_USER": "120201",
"CODE": "320211",
"ADDRESS": "湖滨街262",
"TELEPHONE": " "
},
"geometry": {
"x": 120.277378,
"y": 31.534747999999997
}
},
{
"attributes": {
"FID": 1,
"UserID": 0,
"NAME": "东方银座(西南门)",
"TYPE_USER": "120201",
"CODE": "320211",
"ADDRESS": "新区长江路旁",
"TELEPHONE": " "
},
"geometry": {
"x": 120.359826,
"y": 31.540464
}
},
{
"attributes": {
"FID": 2,
"UserID": 0,
"NAME": "东方银座",
"TYPE_USER": "120201",
"CODE": "320211",
"ADDRESS": "新区长江路旁",
"TELEPHONE": " "
},
"geometry": {
"x": 120.36029500000001,
"y": 31.540967
}
}]}
这里就相当于模拟了一个个新的属性点构成的一个要素图层。而layerDefinition则是用来描述这个要素图层的,最少需要“geometryType”和“fields”,因此,他的构造格式如下所示:
[javascript] view
plain copy
var layerDefinition = {
"geometryType": "esriGeometryPoint",
"fields":[
{
"name": "FID",
"type": "esriFieldTypeOID",
"alias": "FID"
},
{
"name": "UserID",
"type": "esriFieldTypeInteger",
"alias": "UserID"
},
{
"name": "NAME",
"type": "esriFieldTypeString",
"alias": "NAME",
"length": 100
},
{
"name": "TYPE_USER",
"type": "esriFieldTypeString",
"alias": "TYPE_USER",
"length": 10
},
{
"name": "CODE",
"type": "esriFieldTypeString",
"alias": "CODE",
"length": 20
},
{
"name": "ADDRESS",
"type": "esriFieldTypeString",
"alias": "ADDRESS",
"length": 100
},
{
"name": "TELEPHONE",
"type": "esriFieldTypeString",
"alias": "TELEPHONE",
"length": 60
}
]
};
这样就可以不依赖服务构造出一个FeatureLayer的要素图层。具体全部代码如下所示:
[javascript] view
plain copy
var featureSet = new esri.tasks.FeatureSet(dz);
var featureCollection = {
layerDefinition: layerDefinition,
featureSet: featureSet
};
var featurelayer = new esri.layer.FeatureLayer(featureCollection);
对图层进行渲染之后的热力图结果如下图所示:
宁波整形美容医院http://www.lyxcl.org/
相关文章推荐
- ArcGIS API for JS 之 不依赖地图服务创建FeatureLayer图层
- ArcGIS API for JS 不依赖地图服务创建FeatureLayer并设置Label
- arcgis-api-for-js-之添加图层到地图及地图服务设置可见图层
- arcgis api for js实现克里金插值渲染图--不依赖GP服务
- 离线谷歌卫星地图加载服务中间件调用示例For ArcGIS JS API
- 使用arcgis for js 4.x api加载地图和服务
- arcgis api for js实现克里金插值渲染图--不依赖GP服务
- arcgis-api-for-js-之地图参数的基本配置
- arcgis api for js之echarts开源js库实现地图统计图分析
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务
- ArcGIS API for JS v4.6 调用Esri在线地图和图层例子(2D和3D)
- arcgis api for js入门开发系列四地图查询
- arcgis-api-for-js-之创建图层和添加图层(1)
- ArcGIS api for javascript——用第二个服务的范围设置地图范围
- ArcGIS API For Javascript GP工具 Printing Tools导出地图或者打印地图(二):GP 服务Printing Tools
- ArcGIS API for Silverlight部署本地地图服务
- arcgis for flex api version3.7 教程:8.创建地图
- arcgis-api-for-js-之创建一个3D地图
- Arcgis API for JS 地图小部件
- arcgis api for js入门开发系列十三地图最短路径分析