📄 querybuildertaskagsutil.java
字号:
package com.esri.solutions.jitk.web.tasks.query.querybuilder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import com.esri.adf.web.ags.data.AGSLocalMapResource;
import com.esri.adf.web.ags.data.AGSMapFunctionality;
import com.esri.adf.web.ags.data.AGSMapResource;
import com.esri.adf.web.ags.util.AGSUtil;
import com.esri.adf.web.data.WebLayerInfo;
import com.esri.adf.web.data.WebMap;
import com.esri.adf.web.data.geometry.GeometryUtil;
import com.esri.adf.web.data.geometry.WebExtent;
import com.esri.adf.web.data.geometry.WebGeometry;
import com.esri.adf.web.data.geometry.WebPoint;
import com.esri.adf.web.data.query.QueryResult;
import com.esri.adf.web.data.query.WebQuery;
import com.esri.arcgisws.EsriFieldType;
import com.esri.arcgisws.EsriSearchOrder;
import com.esri.arcgisws.EsriSpatialRelEnum;
import com.esri.arcgisws.Field;
import com.esri.arcgisws.Fields;
import com.esri.arcgisws.Geometry;
import com.esri.arcgisws.MapLayerInfo;
import com.esri.arcgisws.MapServerPort;
import com.esri.arcgisws.Record;
import com.esri.arcgisws.RecordSet;
import com.esri.arcgisws.SpatialFilter;
public class QueryBuilderTaskAgsUtil {
private static Logger _logger = Logger.getLogger(QueryBuilderTaskAgsUtil.class.getName());
public static String chkStr(String s) {
return (s == null) ? "" : s.trim();
}
public static String chkStr(String s, String defaultVal) {
s = chkStr(s);
return (s.length()==0) ? defaultVal : s;
}
public static LinkedHashMap<String, String> getAgsFieldList(Object resource, String id, int lyrId) {
try {
if(!(resource instanceof AGSMapResource)) return null;
AGSMapResource agsMapResource = (AGSMapResource)resource;
AGSMapFunctionality agsMapFunc = (AGSMapFunctionality)(agsMapResource).getFunctionality("map");
MapLayerInfo mapLayer = agsMapFunc.getLayerInfo(lyrId);
if(mapLayer.isHasAttributes()) {
LinkedHashMap<String, String> fieldList = new LinkedHashMap<String, String>();
Fields fields = mapLayer.getFields();
if(fields != null) {
Field[] flds = fields.getFieldArray();
for(int i=0; i < flds.length; i++) {
Field fld = flds[i];
String alias = chkStr(fld.getAliasName(), fld.getName());
int fldType = (fld.getType() == EsriFieldType.esriFieldTypeString) ? 12: 4;
if(!fld.getType().equals(EsriFieldType.esriFieldTypeGeometry))
fieldList.put(fld.getName() + "!" + fldType, alias);
}
return fieldList;
} else {
_logger.warn("Service: " + agsMapResource.getEndPointURL() + ", Layer Name: " + mapLayer.getName() + " layer fields property was null, ignoring");
}
} else {
_logger.debug("Service: " + agsMapResource.getEndPointURL() + ", Layer Name: " + mapLayer.getName() + " has no attribute fields, ignoring");
}
} catch(Exception e) {
_logger.error("EXCEPTION: Unable to get ags field list", e);
}
return null;
}
public static List<QueryResult> doQuery(Object resource, WebQuery webQuery, QueryBuilderCriteria qbc, WebLayerInfo webLayerInfo) throws Exception {
List<QueryResult> results = new ArrayList<QueryResult>();
int lyrId = webLayerInfo.getId();
if (!(resource instanceof AGSMapResource)) return null;
AGSMapResource agsMapResource = (AGSMapResource)resource;
AGSMapFunctionality agsMapFunc = (AGSMapFunctionality)(agsMapResource).getFunctionality("map");
MapLayerInfo mapLayer = agsMapFunc.getLayerInfo(lyrId);
Field[] flds = mapLayer.getFields().getFieldArray();
MapServerPort mapServer = agsMapResource.getMapServer();
SpatialFilter spatialFilter = new SpatialFilter();
spatialFilter.setSpatialRel(EsriSpatialRelEnum.esriSpatialRelIntersects);
spatialFilter.setWhereClause(qbc.getWhereClause());
spatialFilter.setSearchOrder(EsriSearchOrder.esriSearchOrderSpatial);
spatialFilter.setGeometryFieldName("");
spatialFilter.setSpatialReferenceFieldName("");
spatialFilter.setSpatialRelDescription("");
WebGeometry geometry = qbc.getWebGeometry();
if(geometry instanceof WebPoint) {
WebMap webMap = webQuery.getWebContext().getWebMap();
double d = webMap.getCurrentExtent().getWidth() / webMap.getWidth() * 6;
WebPoint pt = (WebPoint) geometry;
geometry = new WebExtent(pt.getX() - d, pt.getY() - d, pt.getX() + d, pt.getY() + d, pt.getSpatialReference());
}
spatialFilter.setFilterGeometry(AGSUtil.toAGSGeometry(geometry));
RecordSet recordSet = mapServer.queryFeatureData(mapServer.getDefaultMapName(), lyrId, spatialFilter);
Record[] records = recordSet.getRecords();
int maxRecords = qbc.getMaxRecordCount();
int size = (maxRecords < records.length) && (maxRecords > 0) ? maxRecords : records.length;
for(int i=0; i < size; i++) {
Object[] objs = records[i].getValues();
Map<String, Object> details = new LinkedHashMap<String, Object>();
WebGeometry webGeometry = null;
String displayName = "";
for(int j=0; j < flds.length; j++) {
if(flds[j].getType() == EsriFieldType.esriFieldTypeGeometry) {
webGeometry = AGSUtil.fromAGSGeometry((Geometry)objs[j]);
details.put(flds[j].getName(), webGeometry.getGeometryType());
continue;
} else if(flds[j].getType() == EsriFieldType.esriFieldTypeString && chkStr(flds[j].getName()).equalsIgnoreCase("Name")) {
displayName = objs[j].toString();
}
details.put(flds[j].getName(), objs[j]);
}
QueryResult queryResult = new QueryResult(webLayerInfo, displayName, webQuery, details, GeometryUtil.computeWebExtent(webGeometry), webGeometry);
results.add(queryResult);
}
return results;
}
public static LinkedHashMap<String, String> getServiceLayerList(AGSMapResource agsMapResource, String resourceId, List<WebLayerInfo> queryLayerList) {
try {
LinkedHashMap<String, String> newLayerList = new LinkedHashMap<String, String>();
if(agsMapResource != null) {
AGSMapFunctionality agsMapFunc = (AGSMapFunctionality)(agsMapResource).getFunctionality("map");
MapLayerInfo[] mapLayers = agsMapFunc.getLayerInfos();
String mapSourceName = agsMapResource.getAlias();
if (agsMapResource instanceof AGSLocalMapResource) {
mapSourceName = ((AGSLocalMapResource)agsMapResource).getServerObjectName();
}
for(Iterator<WebLayerInfo> it = queryLayerList.iterator(); it.hasNext();) {
WebLayerInfo webLayerInfo = it.next();
for(int i=0; i < mapLayers.length; i++) {
MapLayerInfo mapLayer = mapLayers[i];
if(mapLayer.getSubLayerIDs() == null && mapLayer.getLayerID() == webLayerInfo.getId()) {
newLayerList.put(resourceId + "!" + mapLayer.getLayerID(), mapSourceName + "." + mapLayer.getName());
}
}
}
}
return newLayerList;
} catch(Exception e) {
_logger.error("Unable to get service layer list", e);
}
return null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -