From d74b495736f0c04522ec54274b70fed0ded2878d Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 27 Jun 2023 11:30:06 +0800
Subject: [PATCH] 任务新增导出
---
public/map/core/manager/querymanager.js | 330 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 330 insertions(+), 0 deletions(-)
diff --git a/public/map/core/manager/querymanager.js b/public/map/core/manager/querymanager.js
new file mode 100644
index 0000000..e118e1c
--- /dev/null
+++ b/public/map/core/manager/querymanager.js
@@ -0,0 +1,330 @@
+/**
+ * 查询搜索
+ * @author Liuyl
+ * @date 2015/10/30
+ */
+define([
+"dojo/_base/declare", "dojo/_base/array", "dojo/_base/lang",
+"dojo/json", "dojo/request", "dojo/request/script",
+"esri/tasks/query", "esri/tasks/QueryTask", "esri/tasks/StatisticDefinition",
+"base/AppEvent", "base/ConfigData"
+], function(
+ declare, arrayUtil, lang,
+ JSON, request, script,
+ Query, QueryTask, StatisticDefinition,
+ AppEvent, ConfigData
+) {
+ return declare("QueryManager", null, {
+ QueryArguments: declare(null, {
+ constructor: function(props) {
+
+ this.type = null;
+ this.extent = null;
+ this.poiType = null;
+ this.keyword = null;
+ this.returnGeometry = true;
+ this.outSpatialReference = null;
+ $.extend(true, this, props);
+ }
+ }),
+ defaultOptions: {
+ poi_service: "http://www.servicelnditu.com/OneMapServer/rest/services/poi2015/MapServer/0",
+ poi_service_fgdb: "http://www.servicelnditu.com/OneMapServer/rest/services/poi2015/MapServer/0",
+ poi_keyword_field: "NAME",
+ poi_pinyin_field: "NAMEPY",
+ poi_type1_field: "TYPE1",
+ poi_type2_field: "TYPE2",
+ poi_pac_field: "PACSHI",
+ poi_fields: {
+ "OBJECTID": "",
+ "NAME": "名称",
+ "NAMEPY": "拼音",
+ "ADDNAME": "地址",
+ "TELEPHONE": "电话"
+ },
+ result_widget_name: "QueryResultWidget",
+ smartquery_service: "../ProxyServlet?http://www.lnditu.gov.cn/SmartQueryService/rest/query/smartquery"
+
+ },
+ constructor: function(options) {
+ this.options = {};
+ $.extend(true, this.options, this.defaultOptions, options);
+ AppEvent.addAppEventListener(AppEvent.CONFIG_LOADED, lang.hitch(this, this.onConfigLoaded));
+ AppEvent.addAppEventListener(AppEvent.BASE_MAP_LAYER_LOADED, lang.hitch(this, this.onMapLoaded));
+ AppEvent.addAppEventListener(AppEvent.RUN_QUERY, lang.hitch(this, function(evt) {
+ this.query(evt);
+ }));
+ AppEvent.addAppEventListener(AppEvent.RUN_SMART_QUERY, lang.hitch(this, function(evt) {
+ this.smartQueryFromPoi(evt);
+ }));
+ this.newestQueryId = null;
+ },
+ onConfigLoaded: function() {},
+ onMapLoaded: function(map) {
+ this._map = map;
+ },
+ smartQuery: function(evt) {
+ //var queryString = this._parseQueryString(evt);
+ try {
+ request.get(this.options.smartquery_service + this._parseQueryString(evt.args), {
+ handleAs: "json"
+ }).then(function(data) {
+ AppEvent.dispatchAppEvent(AppEvent.QUERY_SUCCESS, {
+ hockId: evt.hockId,
+ result: data
+ });
+ },
+ function(error) {
+ AppEvent.dispatchAppEvent(AppEvent.QUERY_ERROR, {
+ hockId: evt.hockId,
+ error: error
+ });
+ });
+ } catch (err) {
+ AppEvent.dispatchAppEvent(AppEvent.QUERY_ERROR, {
+ hockId: evt.hockId,
+ error: err
+ });
+ }
+
+ },
+ _parseQueryString: function(argsObject) {
+ var queryString = "?";
+ arrayUtil.forEach(Object.keys(argsObject), function(item, index) {
+ if (queryString != "?") {
+ queryString += "&";
+ }
+ queryString += item + "=" + JSON.stringify(argsObject[item]);
+ });
+ return queryString;
+ },
+ smartQueryFromPoi: function(evt) {
+ try {
+ var url = this.options.poi_service;
+ var query = new Query();
+ query.where = this._parsePoiWhereString(evt.args.keyword);
+ query.outFields = Object.keys(this.options.poi_fields);
+ query.returnGeometry = false;
+ query.start = 0;
+ query.num = 10;
+ var queryTask = new QueryTask(url);
+ queryTask.execute(query, lang.hitch(this, function(result) {
+ var data = {
+ count: 0,
+ items: []
+ };
+ if (result.features) {
+ for (var key in result.features) {
+ if (!result.features[key].attributes.ADDNAME || !result.features[key].attributes.NAME)
+ continue;
+ data.items[data.count] = {
+ adress: result.features[key].attributes.ADDNAME,
+ name: result.features[key].attributes.NAME,
+ id: ""
+ };
+ data.count++;
+ if (data.count >= 10)
+ break;
+ }
+ }
+
+ AppEvent.dispatchAppEvent(AppEvent.QUERY_SUCCESS, {
+ hockId: evt.hockId,
+ result: {
+ data: data
+ }
+ });
+ }), lang.hitch(this, function(err) {
+ AppEvent.dispatchAppEvent(AppEvent.QUERY_ERROR, {
+ hockId: evt.hockId,
+ error: err
+ });
+ }));
+ } catch (err) {
+ AppEvent.dispatchAppEvent(AppEvent.QUERY_ERROR, {
+ hockId: evt.hockId,
+ error: err
+ });
+ }
+
+ },
+ _parsePoiWhereString: function(keyword) {
+ var whereSql = "";
+ if (keyword) {
+ if ((/[\u4e00-\u9fa5]+/).test(keyword)) {
+ whereSql = this.options.poi_keyword_field + " like '%" + keyword + "%'";
+ } else {
+ whereSql = "lower(" + this.options.poi_pinyin_field + ") like '%" + keyword.toLowerCase() + "%'";
+ }
+ }
+ return whereSql;
+ },
+ query: function(evt) {
+ try {
+ var queryArgs = new this.QueryArguments();
+ $.extend(true, queryArgs, evt);
+
+ this._do_query(queryArgs);
+ } catch (err) {
+ this._errorCallback(err, {
+ hockId: evt.hockId
+ });
+ }
+ },
+ _do_query: function(queryArgs) {
+ switch (queryArgs.type) {
+ case "statistics":
+ this.queryPoiForDistrictStatistics(queryArgs,
+ lang.hitch(this, this._resultCallback),
+ lang.hitch(this, this._errorCallback)
+ );
+ break;
+ case "search":
+ queryArgs.id = uuid();
+ this.newestQueryId = queryArgs.id;
+
+ this.queryPoiForExtent(queryArgs,
+ lang.hitch(this, this._resultCallback),
+ lang.hitch(this, this._errorCallback)
+ );
+ break;
+ case "poiId":
+ queryArgs.id = uuid();
+ this.newestQueryId = queryArgs.id;
+
+ this.queryPoiForExtent(queryArgs,
+ lang.hitch(this, this._resultCallback),
+ lang.hitch(this, this._errorCallback)
+ );
+ break;
+ default:
+ break;
+ }
+ },
+
+ _resultCallback: function(result, qArgs) {
+ if (qArgs.id && this.newestQueryId != qArgs.id) {
+ return;
+ }
+ AppEvent.dispatchAppEvent(AppEvent.QUERY_SUCCESS, {
+ hockId: qArgs.hockId,
+ result: result,
+ type: result.type
+ });
+ },
+ _errorCallback: function(err, qArgs) {
+ if (this.newestQueryId == qArgs.id) {
+ AppEvent.dispatchAppEvent(AppEvent.QUERY_ERROR, {
+ hockId: qArgs.hockId,
+ error: err
+ });
+ }
+ },
+ queryPoiForDistrictStatistics: function(qArgs, resultCallback, errorCallback) {
+ var query = new Query();
+ var queryTask = new QueryTask(this.options.poi_service);
+ query.extent = null;
+ query.where = this._parseWhereSql(qArgs);
+ var statisticDefinition = new StatisticDefinition();
+ statisticDefinition.statisticType = "count";
+ statisticDefinition.onStatisticField = "OBJECTID";
+ statisticDefinition.outStatisticFieldName = "COUNT";
+
+ query.outStatistics = [statisticDefinition];
+ query.groupByFieldsForStatistics = ["PACSHI"];
+ if (qArgs.extent) {
+ query.outSpatialReference = qArgs.extent.spatialReference
+ } else {
+ query.outSpatialReference = this._map.spatialReference;
+ }
+ query.outFields = ["PACSHI", "COUNT"];
+
+ queryTask.execute(query, lang.hitch(this, function(result) {
+ result.type = qArgs.type;
+ result.poiType = qArgs.poiType;
+ result.keyword = qArgs.keyword;
+ resultCallback(result, qArgs);
+ }), lang.hitch(this, function(err) {
+ errorCallback(err, qArgs);
+ }));
+ },
+ queryPoiForExtent: function(qArgs, resultCallback, errorCallback) {
+ var url = this.options.poi_service;
+ var query = new Query();
+
+ if (qArgs.poiId) {
+ query.objectIds = [qArgs.poiId];
+ } else {
+ query.where = this._parseWhereSql(qArgs);
+ }
+ if (qArgs.extent) {
+ query.outSpatialReference = qArgs.extent.spatialReference;
+ if (qArgs.extent && !qArgs.extent.hasOwnProperty("xmin")) {
+ query.geometry = qArgs.extent;
+ url = this.options.poi_service_fgdb;
+ }
+
+ } else {
+ query.outSpatialReference = this._map.spatialReference;
+ }
+ query.outFields = Object.keys(this.options.poi_fields);
+ query.returnGeometry = qArgs.returnGeometry;
+ var queryTask = new QueryTask(url);
+ queryTask.execute(query, lang.hitch(this, function(result) {
+ result.type = qArgs.type;
+ result.extent = qArgs.extent;
+ resultCallback(result, qArgs);
+ }), lang.hitch(this, function(err) {
+ errorCallback(err, qArgs);
+ }));
+ },
+ _parseWhereSql: function(qArgs) {
+ var _whereSql = _linkWhereSql("and",
+ _parsePoiCodeWhereSql.call(this, qArgs.poiType),
+ _parseExtentWhereSql.call(this, qArgs.extent));
+ _whereSql = _linkWhereSql("and",
+ _whereSql,
+ //_parseKeywordWhereSql.call(this, qArgs.keyword)
+ this._parsePoiWhereString(qArgs.keyword)
+ );
+
+ return _whereSql;
+
+
+
+ function _linkWhereSql(type, sql1, sql2) {
+ if (!sql1)
+ return sql2;
+ if (!sql2)
+ return sql1;
+ return "( " + sql1 + " ) " + type + " ( " + sql2 + " )";
+ }
+
+ function _parseExtentWhereSql(extent) {
+ if (extent && extent.hasOwnProperty("xmin"))
+ return "LON>" + extent.xmin + " and LON<" + extent.xmax + " and LAT>" + extent.ymin + " and LAT<" + extent.ymax;
+ else
+ return "";
+ }
+
+ function _parsePoiCodeWhereSql(type) {
+ if (type) {
+ if (type.length == 2) {
+ return this.options.poi_type1_field + " = '" + type + "'";
+ } else if (type.length == 4) {
+ return this.options.poi_type2_field + " = '" + type + "'";
+ }
+
+ }
+ return "";
+ }
+
+ function _parseKeywordWhereSql(keyword) {
+ if (keyword) {
+ return this.options.poi_keyword_field + " like '%" + keyword + "%'";
+ }
+ return "";
+ }
+ }
+ });
+});
\ No newline at end of file
--
Gitblit v1.9.3