import {
Zondy,formatQuery,formatEdits,extend
} from '../common';
import {ArcGisServiceBase} from "./ServiceBase";
import {ArcGisQuery} from "./Query";
/**
* @class module:ArcGis.ArcGisFeatureLayer
* @description ArcGis服务
* @author 基础平台-杨琨
*/
class ArcGisFeatureLayer {
constructor(options) {
this.id = null;
this.uid = null;
this.indexes = {
items : []
};
this.load = null;
this.attributionVisible = true;
this.listMode = "show";
this.hasAttributionData = false;
this.createQueryVersion = 1;
this.blendMode = "normal";
this.capabilities = null;
this.copyright = null;
this.loadError = null;
this.loadStatus = "not-loaded";
this.loaded = false;
this.loadWarnings = [];
this.customParameters = null;
this.definitionExpression = null;
this.displayField = null;
this.dynamicDataSource = null;
this.editFieldsInfo = null;
this.editingEnabled = true;
this.editingInfo = null;
this.effect = null;
this.elevationInfo = null;
this.featureReduction = null;
this.fields = null;
this.fieldsIndex = {
dateFields:[],
fields:[],
uid:""
};
this.formTemplate = null;
this.gdbVersion = null;
this.geometryType = null;
this.hasM = null;
this.hasZ = null;
this.historicMoment = null;
this.isTable = false;
this.labelingInfo = null;
this.labelsVisible = true;
this.layerId = null;
this.legendEnabled = true;
this.maxScale = 0;
this.minScale = 0;
this.opacity = 1;
this.operationalLayerType = "ArcGisFeatureLayer";
this.objectIdField = null;
this.outFields = null;
this.parent = null;
this.path = null;
this.parsedUrl = null;
this.popupEnabled = true;
this.popupTemplate = null;
this.portalItem = null;
this.refreshInterval = 0;
this.relationships = null;
this.renderer = null;
this.returnM = null;
this.returnZ = null;
this.resourceReferences = {
paths:[],
portalItem: null
};
this.screenSizePerspectiveEnabled = true;
this.serviceDefinitionExpression = null;
this.source = null;
this.scaleRangeId = "0,0";
this.sourceJSON = null;
this.spatialReference = {
imageCoordinateSystem: null,
isGeographic: true,
isWGS84: true,
isWebMercator: false,
isWrappable: true,
latestVcsWkid: null,
latestWkid: null,
vcsWkid: null,
wkid: 4326,
wkt: "GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]]"
};
this.templates = null;
this.sublayerTitleMode = "item-title";
this.timeExtent = null;
this.timeInfo = null;
this.timeOffset = null;
this.title = "";
this.trackIdField = null;
this.type = "feature";
this.typeIdField = null;
this.types = null;
this.url = null;
this.useViewTime = true;
this.version = null;
this.userIsAdmin = false;
this.visible = true;
extend(this,options)
//判断是查询整个地图还是单个图层
this._queryService = this.url && this.url.indexOf('FeatureServer') + 'FeatureServer'.length === this.url.length ? 'queryByMap' : 'queryByLayer'
this._applyEditsService = this.url && this.url.indexOf('FeatureServer') + 'FeatureServer'.length === this.url.length ? 'applyEditsByMap' : 'applyEditsByLayer'
let service = new ArcGisServiceBase();
//对整个地图查询,url为http://localhost:6080/arcgis/rest/services/wuhan_2/FeatureServer
this.queryByMap = function (query) {
let url = this.url + "/query?f=json";
url = formatQuery(query,url,["geometry","layerDefs"],null);
return service.getPromise(url);
}
//对单个图层查询,url为http://localhost:6080/arcgis/rest/services/wuhan_2/FeatureServer/{layerId}
this.queryByLayer = function (query) {
let url = this.url + "/query?f=json";
url = formatQuery(query,url,["geometry"],null);
return service.getPromise(url);
}
//单个图层编辑
this.applyEditsByLayer = function (edits,options) {
let url = this.url + "/applyEdits",dataStr="";
options = options ? options : {
gdbVersion:[],
rollbackOnFailure: true,
f:'json'
}
//处理edits
let editArr = ["addFeatures","updateFeatures","deleteFeatures"];
if(edits.deleteFeatures){
let IdsArr = [];
for(let i = 0;i < edits.deleteFeatures.length;i++){
IdsArr.push(edits.deleteFeatures[i].objectId);
}
edits.deleteFeatures = IdsArr.join(",");
}
dataStr = formatEdits(dataStr,edits,editArr);
//处理options
dataStr = formatEdits(dataStr,options);
//去聊多余的&符号
dataStr = dataStr.substring(0,dataStr.length - 1);
return service.getPromiseP(url,dataStr);
}
//整个地图编辑
this.applyEditsByMap = function (edits,options) {
options = options ? options : {
gdbVersion:[],
rollbackOnFailure: true,
f:'json'
}
let url = this.url + "/applyEdits",dataStr="";
//处理请求参数
//处理edits
dataStr += "edits=" + encodeURIComponent(JSON.stringify(edits)) + "&";
//处理options
dataStr = formatEdits(dataStr,options);
//去聊多余的&符号
dataStr = dataStr.substring(0,dataStr.length - 1);
return service.getPromiseP(url,dataStr);
}
}
}
/**
* @function module:ArcGis.ArcGisFeatureLayer.prototype.createQuery
* @description 创建查询参数对象
* @author 基础平台-杨琨
*/
ArcGisFeatureLayer.prototype.createQuery = function () {
return new ArcGisQuery();
}
/**
* @function module:ArcGis.ArcGisFeatureLayer.prototype.queryFeatures
* @description 查询要素信息
* @author 基础平台-杨琨
* @param query - {String} 必选项,查询参数。
* @param {String} [query.geometry] 可选项。几何对象,要素查询条件,形式为x,y坐标。支持单个点,多个点、线、矩形、多边形。无需配合where使用,可单独查询。
* 格式为:geometry对象或xmin,ymin,xmax,ymax点坐标;Example:单个点:geometry=-104,35.6;封闭矩形:geometry=-104,35.6,-94.32,41;geometry对象:{xmin: -104, ymin: 35.6, xmax: -94.32, ymax: 41};
* 参考链接:Geometry objects:https://developers.arcgis.com/documentation/common-data-types/geometry-objects.htm
* @param {String} [query.geometryType] 可选项。配合geometry使用,当通过几何对象进行要素查询时,集合对象的类型,默认为矩形。可选值为:esriGeometryPoint | esriGeometryMultipoint | esriGeometryPolyline | esriGeometryPolygon | esriGeometryEnvelope
* Example:geometryType=esriGeometryEnvelope
* @param {String} [query.spatialRel] 可选项。空间关系。即所选的几何对象与图层的相交关系。例如包含、相交、相离等,默认值为esriSpatialRelIntersects。
* 可选值为:esriSpatialRelIntersects | esriSpatialRelContains | esriSpatialRelCrosses | esriSpatialRelEnvelopeIntersects | esriSpatialRelIndexIntersects | esriSpatialRelOverlaps | esriSpatialRelTouches | esriSpatialRelWithin
* Example:spatialRel=esriSpatialRelIntersects
* @param {String} [query.returnGeometry] 可选项。返回要素集合时,是否返回几何信息。默认为true。返回几何信息。可选值:true | false
* @param {String} [query.geometryPrecision] 可选项。指定返回的要素集合中x、y坐标的小数位数。Example:geometryPrecision=3
* @param {String} [query.maxAllowableOffset] 可选项。简化返回的几何要素时,允许的最大偏移量。对返回的要素的geometry对象起作用。
* @param {String} [query.where] 可选项。通过where进行条件查询。与整个地图的查询相比没有返回值过滤。Example:where=POP2000 > 350000
* 参考链接:SQL语句:https://developers.arcgis.com/rest/services-reference/query-feature-service-.htm#ESRI_SECTION2_07DD2C5127674F6A814CE6C07D39AD46
* @param {String} [query.sqlFormat] 可选项。sql语句的格式,默认为none。
* @param {String} [query.objectIds] 可选项。通过Id查询要素。格式:objectIds=<objectId1>, <objectId2>;Example:objectIds=37, 462
* @param {String} [query.orderByFields] 可选项。返回的要素几何以何种方式进行排序。是升序或降序。格式:orderByFields=field1 <ORDER>, field2 <ORDER>, field3 <ORDER>;
* Example: orderByFields=STATE_NAME ASC, RACE DESC, GENDER
* @param {String} [query.groupByFieldsForStatistics] 可选项。"以某个字段进行分组。只有当outStatistics 为true是有效
* 格式:groupByFieldsForStatistics=field1, field2;Example:groupByFieldsForStatistics=STATE_NAME, GENDER"
* @param {String} [query.outFields] 可选项。指定要显示的返回字段,为空时都不显示。Example:outFields=AREANAME,ST,POP2000;outFields=*
* @param {String} [query.inSR] 可选项。几何对象的空间参考系。当不指定时,默认为地图的空间参考系。
* @param {String} [query.outSR] 可选项。返回的要素几何的空间参考系。默认为地图的空间参考系。
* @param {String} [query.returnCentroid] 可选项。返回要素集合时,是否返回每个要素的中心点。仅对layer有效。默认false;可选值:true | false
* @param {String} [query.returnM] 可选项。是否返回m值,默认为false。可选值:true | false
* @param {String} [query.returnZ] 可选项。是否返回z轴的值,默认为false。可选值:true | false
* @param {String} [query.time] 可选项。按照时间进行查询。有两种方式瞬时查询和范围查询。Example:瞬时查询:time=<timeInstant>;time=1199145600000,即 (1 Jan 2008 00:00:00 GMT)
* 范围查询:time=<startTime>, <endTime>;time=1199145600000, 1230768000000,即 (1 Jan 2008 00:00:00 GMT to 1 Jan 2009 00:00:00 GMT);起始时间或结束时间可为null,即time=null, 1230768000000
* @param {String} [query.distance] 可选项。缓冲距离。Example:distance=<distance>;distance=100
* @param {String} [query.units] 可选项。缓冲距离单位。可选值:esriSRUnit_Meter | esriSRUnit_StatuteMile | esriSRUnit_Foot | esriSRUnit_Kilometer |
* esriSRUnit_NauticalMile | esriSRUnit_USNauticalMile
* @param {String} [query.supportsQueryWithDistance] 可选项。是否开启缓冲距离。默认false,不开启。可选项:true | false
* @param {String} [query.returnDistinctValues] 可选项。返回值是否去重,只保留不同的值。默认为false。最好配合outfields一起使用。也可以和returnCountOnly使用。不能和geometry配合使用可选值:true | false
* @param {String} [query.returnIdsOnly] 可选项。是只返回要素的ID还是返回要素集合。默认为false,即返回要素集合。可选值:true | false
* @param {String} [query.returnCountOnly] 可选项。是只返回查询到的要素数量还是要素集合。默认为false,即返回要素集合。可选值:true | false
* @param {String} [query.returnExtentOnly] 可选项。是否返回要素范围。
* @param {String} [query.resultOffset] 可选项。当返回要素集合时,返回从resultOffset开始的要素。默认值为0;Example:resultRecordCount=10
* @param {String} [query.resultRecordCount] 可选项。指定返回结果数量。
* @param {String} [query.signal ] 可选项。是否取消异步任务。
* @example
* //加载地图容器
map = new mapboxgl.Map({
container: 'map',
crs: 'EPSG:4326',
minZoom: 3,
zoom: 6,
center: [(114.02942023086823 + 114.9174350782441)/2,(30.562371200134724 + 30.96640367892471)/2]
});
//加载容器的级数控件,非必须
var navigationControl = new mapboxgl.NavigationControl();
map.addControl(navigationControl, 'top-left');
//加载一个地图
mapDocLayer = new mapboxgl.Zondy.Map.ArcGisTileLayer({
url: 'http://219.142.81.85/arcgis/rest/services/10wanZH/MapServer',
mapgisOffset: -1
});
mapDocLayer.addToMap(map);
//<-----------------------------查询单个图层------------------------------->
//初始化要素编辑对象
var queryServiceByLayer = new Zondy.Service.ArcGisFeatureLayer({
//要查询的图层url,记得发布地图时,勾选Feature Access
url: 'http://localhost:6080/arcgis/rest/services/wuhan_2/FeatureServer/1'
});
//创建查询参数对象
var queryParamsLayer = queryServiceByLayer.createQuery();
//示例一 =====> objectIds查询,这里我查询objectId为155的要素,并返回该要素的全部字段
queryParamsLayer.objectIds = "155";
queryParamsLayer.outFields = "*";
//示例二 =====> where查询,这里我查询Name为金口街道的要素,并返回该要素的Name,countyname字段
queryParamsLayer.where = "Name = '金口街道'";
queryParamsLayer.outFields = "Name,countyname";
//示例三 =====> geometry查询--简单点查询(封闭矩形),并设置returnCountOnly为true只返回要素数量
queryParamsLayer = queryServiceByLayer.createQuery();
queryParamsLayer.geometry = "114.100,30.399,114.42,30608";
queryParamsLayer.returnCountOnly = true;
//示例四 =====> geometry查询--多边形查询,此时geometryType也要设成相应的值esriGeometryPolygon(多边形)
queryParamsLayer.geometry = {
"rings" : [[[114.100,30.399],[114.214,30.723],[114.321,32.344],[114.42,30608],
[114.100,30.399]]],
"spatialReference" : {"wkid" : 4326}
}
queryParamsLayer.geometryType = "esriGeometryPolygon";
queryParamsLayer.returnCountOnly = false;
//调用查询方法,并在then方法中执行之后的处理步骤
queryServiceByLayer.queryFeatures(queryParamsLayer).then(function (data){
console.log('查询单个图层')
console.log(JSON.parse(data))
})
//<-----------------------------查询整个地图------------------------------->
//初始化要素编辑对象
var queryServiceByMap = new Zondy.Service.ArcGisFeatureLayer({
//要查询的图层url,记得发布地图时,勾选Feature Access
//此处url没有加layerId!!!,因此查询的是整个地图
url: 'http://localhost:6080/arcgis/rest/services/wuhan_2/FeatureServer'
});
//创建查询参数对象
var queryParamsMap = queryServiceByLayer.createQuery();
//示例一 =====> layerDefs(where)查询,layerId即图层id,where即查询语句,outFields选择显示的字段
queryParamsMap.layerDefs = [{"layerId" : 1, "where" : "OBJECTID=155", "outFields" : "Name,pyname"}];
//示例二 =====> geometry查询--简单点查询(封闭矩形),layerId即图层id,outFields选择显示的字段,注意因为是在整个地图文档上查询
// 此处必须在layerDefs指定查询的图层,因此不能单独使用geometry
queryParamsMap.layerDefs = [{"layerId" : 1, "outFields" : "Name,pyname"}];
queryParamsMap.geometry = "114.100,30.399,114.42,30608";
//示例三 =====> geometry查询--多边形查询
queryParamsMap.layerDefs = [{"layerId" : 1, "outFields" : "Name,pyname"}];
//设置要查询的多边形对象,rings为多边形点数组,spatialReference为多边形的坐标系可选填
queryParamsMap.geometry = {
"rings" : [[[114.100,30.399],[114.214,30.723],[114.321,32.344],[114.42,30608],
[114.100,30.399]]],
"spatialReference" : {"wkid" : 4326}
}
//如果是多边形,这里也要设成相应的选项
queryParamsMap.geometryType = "esriGeometryPolygon";
//调用查询方法,并在then方法中执行之后的处理步骤
queryServiceByMap.queryFeatures(queryParamsMap).then(function (data){
console.log('查询整个地图')
console.log(JSON.parse(data))
})
*/
ArcGisFeatureLayer.prototype.queryFeatures = function (query) {
return this[this._queryService](query);
}
/**
* @function module:ArcGis.ArcGisFeatureLayer.prototype.applyEdits
* @description 要素编辑
* @author 基础平台-杨琨
* @param edits - {Object} 必选项,要执行的要素编辑操作。
* @param {Array} [edits.addFeatures] 可选项。添加要素的集合。格式addFeatures:[feature-object1,feature-object2,...]。
* feature-object没有必填项,也就是说空值也会新增。[{},{}]如此则新增两个空数据。其中OBJECTID是自增的,无法指定。
* 格式为:
* [
* {
* "geometry":{},
* "attributes":{}
* }
* ]
* 参考文档:https://developers.arcgis.com/documentation/common-data-types/feature-object.htm
* @param {Array} [edits.updateFeatures] 可选项。要更新要素的集合。格式updateFeatures:[feature-object1,feature-object2,...]。
* OBJECTID必须填写,其他选填。
* 格式为:
* [
* {
* "geometry":{},
* "attributes":{
* "OBJECTID":"Your-ID",//OBJECTID必填,其他的都是选填。
* ...
* }
* }
* ]
* 参考文档:https://developers.arcgis.com/documentation/common-data-types/feature-object.htm
* @param {String} [edits.deleteFeatures] 可选项。删除要素。
* @param {String} [edits.deleteFeatures.objectIds ] 可选项。通过ObjectId来删除要素。
* @param {String} [edits.deleteFeatures.where ] 可选项。通过where语句来删除要素。
* @param {String} [edits.deleteFeatures.geometry ] 可选项。通过geometry对象来删除要素。
* @param {String} [edits.deleteFeatures.geometryType ] 可选项。指定geometry的想的类型。
* @param {String} [edits.deleteFeatures.inSR ] 可选项。指定geometry对象的坐标系,默认为地图坐标系。
* @param {String} [edits.deleteFeatures.spatialRel ] 可选项。指定geometry与图层的相交关系,例如包含、相交、相离等,默认值为esriSpatialRelIntersects。
可选值为:esriSpatialRelIntersects | esriSpatialRelContains | esriSpatialRelCrosses | esriSpatialRelEnvelopeIntersects | esriSpatialRelIndexIntersects | esriSpatialRelOverlaps | esriSpatialRelTouches | esriSpatialRelWithin
Example:spatialRel:esriSpatialRelIntersects
* @param options - {Object} 可选项,额外编辑选项。
* @param {String} [options.gdbVersion] 可选项,地理数据库版本号。
* @param {String} [options.rollbackOnFailure ] 可选项,是否允许回滚,默认为true,可选值true|false。
* @param {String} [options.useGlobalIds] 可选项,是否允许使用GlobalId,可选值true|false。
* @example
* //要素集合
* var features = [
* {
"geometry": {
"points": [
[
114.23201742000003,
30.576808980000067
]
]
},
"attributes": {
"gml_id": "layer_lottery_pt.58836",
"Name": "彩票销售店",
"pyname": "cpxsd",
"kind": "AE04",
"zipcode": null,
"telephone": "027-83876450",
"display_x": "114.23746",
"display_y": "30.57435",
"side": "L",
"address": "汉宜路170号附近",
"mpLayer": 0
}
}
]
//<-------------------------单个图层的编辑操作示例----------------------------------------->
//初始化要素服务对象
var queryService = new Zondy.Service.ArcGisFeatureLayer({
url: 'http://localhost:6080/arcgis/rest/services/wuhan_2/FeatureServer/0'
});
//新增操作
//调用编辑服务
queryService.applyEdits({
addFeatures: features
}).then(function (data){
//在这里编写成功之后的操作
console.log('新增成功')
console.log(data)
})
//更新操作
//更新操作必须指定OBJECTID
features[0].attributes.OBJECTID='577'
//调用编辑服务
queryService.applyEdits({
updateFeatures: features
}).then(function (data){
//在这里编写成功之后的操作
console.log('更新成功')
console.log(data)
})
//删除操作,通过ObjectId删除要素
queryService.applyEdits({
deleteFeatures: 4020
}).then(function (data){
//在这里编写成功之后的操作
console.log('删除成功')
console.log(data)
})
//先新增要素,然后进行查询操作、新增要素、删除要素、
//要编辑的要素对象
var features = [
{
"geometry": {
"points": [
[
114.23201742000003,
30.576808980000067
]
]
},
"attributes": {
"gml_id": "layer_lottery_pt.58836",
"Name": "彩票销售店",
"pyname": "cpxsd",
"kind": "AE04",
"zipcode": null,
"telephone": "027-83876450",
"display_x": "114.23746",
"display_y": "30.57435",
"side": "L",
"address": "汉宜路170号附近",
"mpLayer": 0
}
}
]
//初始化要素服务对象
var queryService = new Zondy.Service.ArcGisFeatureLayer({
url: 'http://localhost:6080/arcgis/rest/services/wuhan_2/FeatureServer/0'
});
//调用编辑服务,新增要素
queryService.applyEdits({
addFeatures: features
}).then(function (addData){
//在这里编写成功之后的操作
console.log('新增成功');
addData = JSON.parse(addData);
console.log(addData);
//创建查询参数对象
var queryParamsLayer = queryService.createQuery();
//设置查询条件,根据objectIds进行查询
queryParamsLayer.objectIds = addData.addResults[0].objectId;
queryParamsLayer.outFields = "*";
queryService.queryFeatures(queryParamsLayer).then(function (queryData) {
console.log('查询成功');
queryData = JSON.parse(queryData);
console.log(queryData);
features[0].attributes.objectId = queryData.features[0].attributes.OBJECTID;
features[0].attributes.Name = "修改名字";
queryService.applyEdits({
updateFeatures:features
}).then(function (updateData) {
console.log('更新成功');
updateData = JSON.parse(updateData);
console.log(updateData);
var objIds = updateData.updateResults[0].objectId;
queryService.applyEdits({
deleteFeatures:objIds
}).then(function (deleteData) {
console.log('删除成功');
deleteData = JSON.parse(deleteData);
console.log(deleteData);
});
});
});
})
//<----------------------整个地图的编辑操作----------------------------------->
//初始化要素服务对象
var queryService = new Zondy.Service.ArcGisFeatureLayer({
//编辑整个地图,因此末尾不带layerId
url: 'http://localhost:6080/arcgis/rest/services/wuhan_2/FeatureServer'
});
//设置返回格式
var options = {
gdbVersion:[],
rollbackOnFailure: true,
f:'json'
}
//新增要素
//新增要素的格式,[{第0个图层新增操作},{第1个图层新增操作},...],对每个图层的操作分开来写,要带上layerid
var edit = [
{
//id即为layerId,必须带,否则不知道编辑哪一个图层
"id" : 0,
//adds操作,[feature-object1,feature-object2,feature-object3,...]
adds: [
{
"geometry": {
"points": [
[
114.23201742000003,
30.576808980000067
]
]
},
"attributes": {
"gml_id": "layer_lottery_pt.58836",
"Name": "彩票销售店",
"pyname": "cpxsd",
"kind": "AE04",
"zipcode": null,
"telephone": "027-83876450",
"display_x": "114.23746",
"display_y": "30.57435",
"side": "L",
"address": "汉宜路170号附近",
"mpLayer": 0
}
}
]
}
]
queryService.applyEdits(edit,options).then(function (data){
//在这里编写成功之后的操作
console.log('新增成功')
console.log(data)
})
//更新要素
var edit = [
{
//id即为layerId,必须带,否则不知道编辑哪一个图层
"id" : 0,
//updates操作,[feature-object1,feature-object2,feature-object3,...]
updates: [
{
"geometry": {
"points": [
[
114.23201742000003,
30.576808980000067
]
]
},
"attributes": {
"gml_id": "layer_lottery_pt.58836",
//objectId也必须要带
"objectId":4013,
"Name": "彩票销售店",
"pyname": "cpxsd",
"kind": "AE04",
"zipcode": null,
"telephone": "027-83876450",
"display_x": "114.23746",
"display_y": "30.57435",
"side": "L",
"address": "汉宜路170号附近",
"mpLayer": 0
}
}
]
}
]
queryService.applyEdits(edit,options).then(function (data){
//在这里编写成功之后的操作
console.log('更新成功')
console.log(data)
})
//根据ObjectId删除要素
var edit = [
{
//id即为layerId,必须带,否则不知道编辑哪一个图层
"id" : 0,
deletes: [4014]
}
]
queryService.applyEdits(edit,options).then(function (data){
//在这里编写成功之后的操作
console.log('删除成功')
console.log(data)
})
//新增、更新、删除同时进行,图层0、1分别进行操作
var edit = [
//对图层0进行操作
{
//id即为layerId,必须带,否则不知道编辑哪一个图层
"id" : 0,
adds:[
{
"geometry": {
"points": [
[
114.23201742000003,
30.576808980000067
]
]
},
"attributes": {
"gml_id": "layer_lottery_pt.58836",
"Name": "彩票销售店",
"pyname": "cpxsd",
"kind": "AE04",
"zipcode": null,
"telephone": "027-83876450",
"display_x": "114.23746",
"display_y": "30.57435",
"side": "L",
"address": "汉宜路170号附近",
"mpLayer": 0
}
}
],
updates:[
{
"geometry": {
"points": [
[
114.23201742000003,
30.576808980000067
]
]
},
"attributes": {
"gml_id": "layer_lottery_pt.58836",
"objectId":4017,
"Name": "彩票销售店",
"pyname": "cpxsd",
"kind": "AE04",
"zipcode": null,
"telephone": "027-83876450",
"display_x": "114.23746",
"display_y": "30.57435",
"side": "L",
"address": "汉宜路170号附近",
"mpLayer": 0
}
}
],
deletes:[4016]
},
//对图层1进行操作
{
id:1,
deletes: [155]
}
]
queryService.applyEdits(edit,options).then(function (data){
//在这里编写成功之后的操作
console.log('编辑完成')
console.log(data)
})
*/
ArcGisFeatureLayer.prototype.applyEdits = function (edits,options) {
return this[this._applyEditsService](edits,options);
}
/**
* @function module:ArcGis.ArcGisFeatureLayer.prototype.queryFeatureCount
* @description 要素查询,仅返回要素数量
* @author 基础平台-杨琨
* @param query - {String} 必选项,查询参数。
* @param options - {String} 可选项,是否取消异步操作。
* @example 调用方法同queryObjectIds
*/
ArcGisFeatureLayer.prototype.queryFeatureCount = function (query) {
query.returnCountOnly = true;
return this[this._queryService](query);
}
/**
* @function module:ArcGis.ArcGisFeatureLayer.prototype.queryObjectIds
* @description 要素查询,仅返回ObjectId
* @author 基础平台-杨琨
* @param query - {String} 必选项,查询参数,参考queryFeatures方法。
* @param options - {String} 可选项,是否取消异步操作。
* @example
//加载地图容器
map = new mapboxgl.Map({
container: 'map',
crs: 'EPSG:4326',
minZoom: 3,
zoom: 6,
center: [(114.02942023086823 + 114.9174350782441)/2,(30.562371200134724 + 30.96640367892471)/2]
});
//加载容器的级数控件,非必须
var navigationControl = new mapboxgl.NavigationControl();
map.addControl(navigationControl, 'top-left');
//加载一个地图
mapDocLayer = new mapboxgl.Zondy.Map.ArcGisTileLayer({
url: 'http://219.142.81.85/arcgis/rest/services/10wanZH/MapServer',
mapgisOffset: -1
});
mapDocLayer.addToMap(map);
//<-----------------------------查询单个图层------------------------------->
//初始化要素编辑对象
var queryServiceByLayer = new Zondy.Service.ArcGisFeatureLayer({
//要查询的图层url,记得发布地图时,勾选Feature Access
url: 'http://localhost:6080/arcgis/rest/services/wuhan_2/FeatureServer/1'
});
//创建查询参数对象
var queryParamsLayer = queryServiceByLayer.createQuery();
//查询layerId为1,countyname为江夏区的要素,并返回其Id
queryParamsLayer.where = "countyname='江夏区'"
queryServiceByLayer.queryObjectIds(queryParamsLayer).then(function (data){
console.log('查询单个图层')
console.log(JSON.parse(data))
})
//<-----------------------------查询整个地图------------------------------->
//初始化要素编辑对象
var queryServiceByMap = new Zondy.Service.ArcGisFeatureLayer({
//要查询的图层url,记得发布地图时,勾选Feature Access
//此处url没有加layerId!!!,因此查询的是整个地图
url: 'http://localhost:6080/arcgis/rest/services/wuhan_2/FeatureServer'
});
//创建查询参数对象
var queryParamsMap = queryServiceByLayer.createQuery();
//查询layerId为1,countyname为江夏区的要素,并返回其Id
queryParamsMap.layerDefs = {"1":"countyname = '江夏区'"}
queryServiceByMap.queryObjectIds(queryParamsMap).then(function (data){
console.log('查询整个地图')
console.log(JSON.parse(data))
})
*/
ArcGisFeatureLayer.prototype.queryObjectIds = function (query) {
query.returnIdsOnly = true;
return this[this._queryService](query);
}
/**
* @function module:ArcGis.ArcGisFeatureLayer.prototype.queryExtent
* @description 要素查询,仅返回要素geometry数组
* @author 基础平台-杨琨
* @param query - {String} 必选项,查询参数。
* @param options - {String} 可选项,是否取消异步操作。
* @example 调用方法同queryObjectIds
*/
ArcGisFeatureLayer.prototype.queryExtent = function (query) {
query.returnExtentOnly = true;
return this[this._queryService](query);
}
export {ArcGisFeatureLayer};
Zondy.Service.ArcGisFeatureLayer = ArcGisFeatureLayer;