`
Virgo_S
  • 浏览: 1153556 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

空间查询及属性文本查询的代码

阅读更多
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---");
	}
	
}

内容摘要
使用ArcGIS Server java ADF开发,如果需要空间关系查询,可以有两种办法,
一种是通过com.esri.arcgisws.SpatialFilter这个包来实现,是一种SOAP的方式,
另外一种是使用传统的AO的方式实现:com.esri.arcgis.geodatabase.SpatialFilter注意两个包的命名一样,很容易混淆。
过程描述
第一种方式的代码如下:
 
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();
    ...
    }

在一般的情况下,建议使用第一种方式空间查询





  • 大小: 78.2 KB
分享到:
评论

相关推荐

    C# 文本朗读代码

    在上述代码中,我们首先导入了System.Speech.Synthesis命名空间,然后创建了一个`SpeechSynthesizer`对象。通过`Speak`方法,我们可以将字符串转换为语音输出。还可以通过`Rate`和`Volume`属性调整朗读速度和音量。 ...

    c#文本编辑器源代码

    在本文中,我们将深入探讨基于C#编程语言构建的文本编辑器源代码。C#是一种由微软开发的面向对象的编程语言,广泛用于Windows应用程序、游戏开发以及Web服务。使用C#编写文本编辑器,我们可以利用.NET框架的强大功能...

    QQ非主流空间代码模板

    这些代码用于改变QQ空间的布局、颜色、字体、动态效果等方面,使用户能够摆脱默认设置,打造出独特且具有个性化的网络空间。 在非主流文化中,QQ空间的装饰往往追求与众不同,强调个性化和视觉冲击力,因此这类代码...

    粗糙集属性约简代码

    6. **应用领域**:粗糙集属性约简在多个领域都有应用,如决策系统、医学诊断、金融风险评估、文本分类、推荐系统等。通过约简,可以降低数据的复杂性,提高模型的可解释性,从而更有效地解决问题。 7. **评价指标**...

    arcgis engine空间查询

    在提供的压缩包“空间查询统计”中,很可能包含了演示如何执行上述空间查询的代码实例,包括但不限于统计在特定区域内的对象数量、计算特定类型特征的汇总属性等。这些示例代码将帮助初学者理解如何在实际项目中集成...

    Arcgis Engine空间查询统计

    在提供的“chp04”文件中,可能包含了关于这一主题的详细教程或代码示例,帮助开发者更好地理解和应用ArcGIS Engine进行空间查询统计。通过深入学习和实践,开发者能够熟练掌握这些技能,创建出满足各种需求的GIS...

    静态个人空间代码

    【静态个人空间代码】是一个基于CSS和HTML(主要使用了Div元素)构建的网页模板,设计用于创建个性化、静态的在线个人展示空间。这个模板以其简洁性和易理解性为特点,适合初学者学习和开发者快速搭建页面。接下来,...

    世界大学城空间制作代码

    根据给定的信息“世界大学城空间制作代码”,我们可以推断出这部分内容主要涉及网页设计与制作方面的知识。接下来,我们将详细解析这段代码所包含的主要知识点。 ### 一、HTML元素与属性 #### 1. `&lt;b&gt;` 标签 这个...

    QQ空间代码高亮显示源码

    QQ空间代码高亮显示源码主要涉及到网页编程和前端开发技术,用于在QQ空间中展示代码片段时,增强代码的可读性和美观性。代码高亮通常包括语法着色、行号显示、缩进引导、代码折叠等功能。下面将详细阐述相关知识点:...

    qq空间代码使用指南

    本文将详细介绍如何通过代码在QQ空间中添加Flash动画、音乐及其他元素,帮助你打造独一无二的个性化空间。 #### Flash动画的嵌入与应用 Flash动画曾在网络世界中占据一席之地,尤其是在QQ空间中,它成为了展示个性...

    实现文件属性对话框 vb源代码

    在这个项目中,开发者可能使用了各种控件来构建对话框,如Label(用于显示文本)、TextBox(用于输入或显示文件属性)、CommandButton(用于执行操作)等。了解每个控件的属性和方法是理解代码的基础。 2. **文件I/...

    基于“中文新闻信息分类与代码”文本分类

    在实际应用中,文本分类即是在给定的分类体系下,根据文档的内容或属性,将其归入一个或多个类别的过程。随着信息存储和通信技术的发展,信息量剧增,文本分类技术可以帮助用户过滤和分类大量文档,提高信息利用率。...

    百度hi空间模块代码

    这段代码片段虽然是从“百度hi空间模块代码”这一主题中摘取的,但它涵盖了CSS中的多个关键领域:背景处理、滚动条定制、字体与链接行为、特殊元素样式,以及布局和导航标签的设计。这些知识对于任何希望深入了解...

    CSS代码属性大全.txt

    ### CSS代码属性大全:深入解析CSS主要属性 在网页设计与开发领域,CSS(层叠样式表)扮演着至关重要的角色,它负责控制HTML元素的布局、颜色、字体等视觉表现,使网页更加美观和易读。下面,我们将对《CSS代码属性...

    VB+MapX.rar_VB+MapX_gis查询系统_mapx 查询_属性查询系统_系统 vb

    在这个“VB+MapX_gis查询系统”中,我们看到的是一个用于美国城市查询的小型GIS应用,具备基本的地图显示以及目标和属性查询的能力。 1. **Visual Basic (VB)**:VB是Microsoft开发的一种面向对象的编程语言,适用...

    C#文本编辑器代码实现了基本功能

    在C#中,我们可以使用`System.Windows.Forms`命名空间来构建图形用户界面(GUI),如`TextBox`控件用于显示和编辑文本,`MenuStrip`控件用于创建菜单栏,`OpenFileDialog`和`SaveFileDialog`用于打开和保存文件。...

    有MDI功能的文本编辑器_简单C#代码的文本编辑器_fooduaj_

    【标题】"有MDI功能的文本编辑器_简单C#代码的文本编辑器_fooduaj_" 提供了一个关于创建一个基本的文本编辑器的项目,这个编辑器使用了C#编程语言,并集成了MDI(多文档界面)功能。在C#中,MDI允许用户在一个父窗口...

    文本编辑器C#代码及应用程序

    在VS 2008中编写C#代码,开发者可以利用其强大的集成开发环境(IDE)进行代码编写、调试和测试,极大地提高了开发效率。 该文本编辑器实现了基本的文本操作功能,如文本的读入、编辑和保存。在读入方面,编辑器通过...

    最新HTML代码属性对照表

    - **`&lt;listing&gt;`**:以较小的等宽字体显示文本,适合显示列表或代码。 - **`&lt;font&gt;`**:定义字体颜色、大小等属性。虽然 `&lt;font&gt;` 标签已被废弃,但在一些旧文档中仍然可见。 - **`color`**:设置字体颜色。 - **`...

    android 查询工具源代码

    【标题】"Android 查询工具源代码"涉及到的是一个Android应用程序的开发,主要功能包括查询电话号码的归属地以及IP地址的查询。这个工具是开发者为了方便用户获取信息而设计的,可能是一个集成在手机上的小型实用...

Global site tag (gtag.js) - Google Analytics