package com.esri.adf.web; import java.rmi.RemoteException; import java.util.Collection; import java.util.List; import java.util.Map; import com.esri.adf.web.ags.data.AGSLocalMapResource; import com.esri.adf.web.ags.data.AGSMapResource; import com.esri.adf.web.data.WebContext; import com.esri.adf.web.data.geometry.WebExtent; import com.esri.adf.web.data.query.IdentifyCriteria; import com.esri.adf.web.data.query.QueryResult; import com.esri.adf.web.data.query.TextCriteria; import com.esri.adf.web.data.query.WebQuery; import com.esri.adf.web.faces.event.MapEvent; import com.esri.adf.web.faces.event.MapToolAction; import com.esri.arcgis.carto.IFeatureLayer; import com.esri.arcgis.carto.IFeatureSelection; import com.esri.arcgis.carto.IMap; import com.esri.arcgis.carto.IMapServer; import com.esri.arcgis.carto.IMapServerObjects; import com.esri.arcgis.carto.esriSelectionResultEnum; import com.esri.arcgis.geodatabase.Field; import com.esri.arcgis.geodatabase.ICursor; import com.esri.arcgis.geodatabase.IField; import com.esri.arcgis.geodatabase.IFields; import com.esri.arcgis.geodatabase.IRecordSet; import com.esri.arcgis.geodatabase.IRow; import com.esri.arcgis.geodatabase.ISelectionSet; import com.esri.arcgis.geodatabase.SpatialFilter; import com.esri.arcgis.geodatabase.esriSpatialRelEnum; import com.esri.arcgis.geometry.Envelope; import com.esri.arcgis.server.IServerContext; import com.esri.arcgisws.EnvelopeN; import com.esri.arcgisws.EsriSearchOrder; import com.esri.arcgisws.EsriSpatialRelEnum; import com.esri.arcgisws.MapServerPort; import com.esri.arcgisws.Record; import com.esri.arcgisws.RecordSet; public class ADFQuery implements MapToolAction { private static final long serialVersionUID = 713600076584099585L; WebContext context = null; int c = 0; /* * WebQuery */ private void test1(WebExtent extent) { AGSMapResource res = (AGSMapResource) context.getResources().get("ags0"); IdentifyCriteria ic = new IdentifyCriteria(extent); WebQuery query = (WebQuery) context.getAttribute("query"); List layer = context.getWebQuery().getQueryLayers(); List results = query.query(ic, layer); for (int i = 0; i < results.size(); i++) { QueryResult result = (QueryResult) results.get(i); result.highlight(); Map map = result.getDetails(); map.size(); Collection col = map.values(); Object[] obj = col.toArray(); for (int j = 0; j < obj.length; j++) { System.out.println(obj[j]); } } } /* * arcgisws.SpatialFilter */ private void test2(WebExtent extent) { AGSMapResource res = (AGSMapResource) context.getResources().get("ags0"); MapServerPort mapServer = res.getMapServer(); EnvelopeN env = new EnvelopeN(extent.getMinX(), extent.getMinY(), extent.getMaxX(), extent.getMaxY(), null, null, null, null, null); com.esri.arcgisws.SpatialFilter filter = new com.esri.arcgisws.SpatialFilter(); filter.setSpatialRel(EsriSpatialRelEnum.esriSpatialRelIntersects); filter.setWhereClause(""); filter.setSearchOrder(EsriSearchOrder.esriSearchOrderSpatial); filter.setSpatialRelDescription(""); filter.setGeometryFieldName(""); filter.setFilterGeometry(env); int layerId = 1; try { RecordSet rs = mapServer.queryFeatureData(mapServer.getDefaultMapName(), layerId, filter); Record[] rd = rs.getRecords(); for (int i = 0; i < rd.length; i++) { Object[] obj = rd[i].getValues(); for (int j = 0; j < obj.length; j++) { String s = obj[j].toString(); } } } catch (RemoteException e) { e.printStackTrace(); } } /* * geodatabase.SpatialFilter */ private void test3(WebExtent extent){ try { AGSLocalMapResource res = (AGSLocalMapResource) context.getResources().get("ags0"); IMapServer mapServer = res.getLocalMapServer(); IServerContext sc = res.getServerContext(); Envelope env = (Envelope) sc.createObject(Envelope.getClsid()); env.putCoords(extent.getMinX(), extent.getMinY(), extent.getMaxX(), extent.getMaxY()); com.esri.arcgis.geodatabase.SpatialFilter filter = (SpatialFilter) sc .createObject(com.esri.arcgis.geodatabase.SpatialFilter .getClsid()); filter.setGeometryByRef(env); filter.setSpatialRel(esriSpatialRelEnum.esriSpatialRelIndexIntersects); System.out.println("---1--- "); int layerId = 1; IRecordSet rs = mapServer.queryFeatureData(mapServer.getDefaultMapName(), layerId, filter); IFields fds = rs.getFields(); System.out.println("---cnt2--- " + fds.getFieldCount()); for (int i = 0; i < fds.getFieldCount(); i++) { IField fd = (Field) fds.getField(i); System.out.println(fd.getName()); } ICursor cursor = rs.getCursor(true); IRow row = cursor.nextRow(); while (row != null) { System.out.println("------ " + row.getValue(4)); row = cursor.nextRow(); } } catch (Exception e) { e.printStackTrace(); } } /* * IFeatureSelection */ private void test4(WebExtent extent){ AGSLocalMapResource res = (AGSLocalMapResource) context.getResources().get("ags0"); IServerContext sc = res.getServerContext(); IMapServerObjects mso = (IMapServerObjects) res.getLocalMapServer(); IMap map; try { map = mso.getMap(res.getLocalMapServer().getDefaultMapName()); IFeatureLayer fl = (IFeatureLayer) map.getLayer(1); Envelope env = (Envelope) sc.createObject(Envelope.getClsid()); env.putCoords(extent.getMinX(), extent.getMinY(), extent.getMaxX(), extent.getMaxY()); com.esri.arcgis.geodatabase.SpatialFilter filter = (SpatialFilter) sc .createObject(com.esri.arcgis.geodatabase.SpatialFilter .getClsid()); filter.setGeometryByRef(env); filter.setSpatialRel(esriSpatialRelEnum.esriSpatialRelIndexIntersects); IFeatureSelection fs = (IFeatureSelection) fl; fs.selectFeatures(filter,esriSelectionResultEnum.esriSelectionResultNew, false); ISelectionSet ss = fs.getSelectionSet(); } catch (Exception e) { e.printStackTrace(); } } /* * TextCriteria */ private void test5() { AGSMapResource res = (AGSMapResource) context.getResources().get("ags0"); TextCriteria tc = new TextCriteria(); tc.setSearchText("北京市"); WebQuery query = (WebQuery) context.getAttribute("query"); List layer = context.getWebQuery().getQueryLayers(); List results = query.query(tc, layer); for (int i = 0; i < results.size(); i++) { QueryResult result = (QueryResult) results.get(i); result.highlight(); Map map = result.getDetails(); map.size(); Collection col = map.values(); Object[] obj = col.toArray(); for (int j = 0; j < obj.length; j++) { System.out.println(obj[j]); } } } public void execute(MapEvent arg0) throws Exception { context = arg0.getWebContext(); WebExtent ex = (WebExtent) arg0.getWebGeometry(); ex = (WebExtent) ex.toMapGeometry(arg0.getWebContext().getWebMap()); test5(); System.out.println("---ok---"); } }
SpatialFilter filter = new SpatialFilter(); String mapName=functionality.getMapDescription().getName(); this.getWebContext().getWebGraphics().clearGraphics(); WebPoint wPoint=(WebPoint)event.getWebGeometry().toMapGeometry(event.getWebContext().getWebMap()); Geometry geom = AGSUtil.toAGSGeometry(wPoint); com.esri.arcgisws.PointN pontN = (com.esri.arcgisws.PointN)geom; Point aoPont = (Point)AGSUtil.createArcObjectFromStub(pontN, serverContext); filter.setFilterGeometry(geom); filter.setSpatialRel(com.esri.arcgisws.EsriSpatialRelEnum.esriSpatialRelRelation); filter.setWhereClause(""); filter.setSearchOrder(com.esri.arcgisws.EsriSearchOrder.esriSearchOrderSpatial); filter.setGeometryFieldName(""); filter.setSpatialReferenceFieldName(""); filter.setSpatialRelDescription(spatialType); MapLayerInfo layerInfos[] = functionality.getLayerInfos(); for(int layerIndex=0;layerIndex<layerInfos.length;layerIndex++){ MapLayerInfo mapLayerInfo = (MapLayerInfo) layerInfos[layerIndex]; Field[] fields=mapLayerInfo.getFields().getFieldArray(); RecordSet recordSet = mapServer.queryFeatureData(mapName, layerIndex, filter); ... }
SpatialFilter spatialFilter= (SpatialFilter)serverContext.createObject(SpatialFilter.getClsid()); WebPolygon wPgon=(WebPolygon)event.getWebGeometry().toMapGeometry(event.getWebContext().getWebMap()); GraphicElement ge = new GraphicElement(); ge.setGeometry(wPgon); ge.setSymbol(this.getWebContext().getWebQuery().getPolygonGraphicSymbol()); this.getWebContext().getWebGraphics().addGraphics(ge); Geometry geom = AGSUtil.toAGSGeometry(wPgon); com.esri.arcgisws.PolygonN pgonN = (com.esri.arcgisws.PolygonN)geom; Polygon aoPgon = (Polygon)AGSUtil.createArcObjectFromStub(pgonN, serverContext); for(int layerIndex=0;layerIndex<pMap.getLayerCount();layerIndex++){ ILayer layer=pMap.getLayer(layerIndex); FeatureLayer featureLayer=(FeatureLayer)layer; IFeatureClass featureClass=featureLayer.getFeatureClass(); spatialFilter.setGeometryByRef(aoPgon); spatialFilter.setSpatialRel(esriSpatialRelEnum.esriSpatialRelWithin); spatialFilter.setGeometryField(featureClass.getShapeFieldName()); IFeatureCursor featureCursor = featureClass.search(spatialFilter, true); IFeature feature = featureCursor.nextFeature(); ... }