⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 querybuildertaskagsutil.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 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 + -