查询数据
可以使用featureService创建queryObject,然后通过queryObject查询图层中的数据,详见参考文档。
let server = new wserver.Server();
let featureService = server.createFeatureService();
let layer = "demo.msp_demo_pt";
let queryObj = featureService.createQueryObject(layer);
基础查询
如果已经知道数据的id,可以使用queryById查询数据。
//根据id查询
queryObj.queryById(1,(feature)=>{
console.log(feature);
});
可以指定多个id,同时查询多条数据。
//根据id批量查询
queryObj.queryByIds([1,2],(feature)=>{
console.log(feature);
});
可以在查询时指定查询的过滤条件、空间范围、并指定返回字段及排序字段。
//设置查询返回字段
queryObj.setOutFields('name');//仅返回name字段
//queryObj.setOutFields('*');//返回所有字段
queryObj.setReturnGeometry(true);//返回空间字段
//设置排序字段
queryObj.setOrderByFields("name asc,std_owner desc")
//设置where条件
queryObj.setWhere("1=1");
//设置查询空间范围
queryObj.setGeometry({
"type": "Polygon",
"coordinates": [
[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]]
]
});
//执行查询
queryObj.execute(function (features) {
console.log(features);
});
有时希望对指定区域周边数据,此时可以指定缓冲区,缓冲查询的返回结果会自动生成的缓冲区。
queryObj.setOutFields('*');
//设置查询条件
queryObj.setWhere("1=1");
//设计缓冲查询条件
queryObj.setGeometry({type:"Point",coordinates:[117.597656,40.111689]});//几何对象,可以为任意有效的GeoJSON Geometry对象
queryObj.setBufferDistance(200000); //缓冲半径,单位为米
//执行查询
queryObj.execute(function (features,bufferPolygon) {
//输出查询结果
console.log(features);
//输出缓冲区
console.log(bufferPolygon)
});
详见示例
分页查询
地图易平台每次查询最多只能返回5000条数据,如果查询结果过多,需要使用分页查询。
使用executeWithPage进行分页查询,该方法返回分页查询对象,详见参考文档。
//创建查询对象,指定要查询的图层名称
queryObject = featureService.createQueryObject(layer);
//设置属性查询条件
queryObject.setWhere("1=1");
//设置每页大小
queryObject.setPageSize(10);
//执行查询并在地图上绘制查询结果
queryObject.executeWithPage(function (rs) {
pageResult = rs;
console.log(`共${pageResult.getTotal()}条记录 `);
console.log(`共${pageResult.getTotalPage()}页数据 `);
firstPage();
})
使用firstPage()获取第1页数据:
pageResult.firstPage(function (features) {
console.log(features);
})
使用firstPage()获取最后一页数据:
pageResult.lastPage(function (features) {
console.log(features);
})
使用prePage()获取上一页数据:
pageResult.prePage(function (features) {
console.log(features);
})
使用prePage()获取下一页数据:
pageResult.nextPage(function (features) {
console.log(features);
})
有时需要自动抓取所有页数据,可以使用autoLoadPage()方法。
let beginPage = 1;
let endPage = pageResult.getTotalPage();
let allFeatures = [];
let pageCallback = function (pageNumber, features) {
console.log(`第${pageNumber}加载完成`);
for(let i = 0; i <features.length ; i ++){
allFeatures.push(features[i]);
}
};
let endCallback = function () {
//加载完成,此时features中包含图层的所有数据
console.log("加载完成");
console.log(allFeatures);
};
pageResult.autoLoadPage(beginPage, endPage, pageCallback, endCallback);
详见示例。