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

ArcGIS Server 专题图的实现

阅读更多
测试完毕.地图服务是用ArcGis自带的USA.mxd.还留有的问题就是不能清除,需要重启服务清除。

专题地图:是突出反映一种或几种主题要素的地图,地图的主题要素是根据专门用途的需要确定的,它们应表达的详细,其它的地理要素则根据表达主题的需要作为地理基础选绘。
http://blog.csdn.net/mader/archive/2008/10/16/3084501.aspx
http://webgis.xdz.com.cn/


近日研究了在ArcGIS Server web adf (9.2)专题图实现,整理如下: (以柱状图为例,饼状图和直方图类似),希望对大家有所帮助!
package com.esri.webadf.sample;

import java.util.List;
import com.esri.adf.web.ags.data.AGSLocalMapResource;
import com.esri.adf.web.data.WebContext;
import com.esri.adf.web.data.WebLayerInfo;
import com.esri.adf.web.data.query.WebQuery;
import com.esri.adf.web.faces.event.MapEvent;
import com.esri.arcgis.carto.ChartRenderer;
import com.esri.arcgis.carto.FeatureLayer;
import com.esri.arcgis.carto.ILayer;
import com.esri.arcgis.carto.IRendererFields;
import com.esri.arcgis.carto.MapServer;
import com.esri.arcgis.display.BarChartSymbol;
import com.esri.arcgis.display.IChartSymbol;
import com.esri.arcgis.display.ILineSymbol;
import com.esri.arcgis.display.IMarkerSymbol;
import com.esri.arcgis.display.IRgbColor;
import com.esri.arcgis.display.ISymbolArray;
import com.esri.arcgis.display.RgbColor;
import com.esri.arcgis.display.SimpleFillSymbol;
import com.esri.arcgis.display.SimpleLineSymbol;
import com.esri.arcgis.geodatabase.ICursor;
import com.esri.arcgis.geodatabase.IRowBuffer;
import com.esri.arcgis.geodatabase.QueryFilter;


public class BarChart {

	private WebContext webContext = null;

	public WebContext getWebContext() {
		return webContext;
	}

	public void setWebContext(WebContext webContext) {
		this.webContext = webContext;
	}

	public void createBarChart(MapEvent event) {

		
		try {
			//得到制作专题图的图层ID
			//		  。。。。。。。。。。
			WebQuery query = event.getWebContext().getWebQuery();
			List<WebLayerInfo> layerList = query.getQueryLayers();
			for(int i=0;i<layerList.size();i++){
				WebLayerInfo info = layerList.get(i);
				info.getName();
			}
			int layerID = 3;

			//得到专题图分析元素的属性名称列表
			String[] fieldName = new String[2];
			fieldName[0] = "POP1990";
			fieldName[1] = "POP1999";

			//得到专题图分析的图层对象(FeatureLayer)
			AGSLocalMapResource res = (AGSLocalMapResource) this.webContext.getResources().get("ags1");
			MapServer mapServer = res.getLocalMapServer();
			ILayer fiLayer;
			fiLayer = mapServer.getLayer(mapServer.getMapName(0), layerID);
			FeatureLayer fLayer = (FeatureLayer) fiLayer;

			//创建ChartRenderer对象  注意:在web adf中创建AO对象用AGSLocalMapResource对象的createArcObject(String)方法
			ChartRenderer chartRender = (ChartRenderer) res.createArcObject(ChartRenderer.getClsid());

			//在IRendererFileds中指定柱状图各列显示字段值   
			IRendererFields rendererFields = chartRender;
			rendererFields.addField(fieldName[0], null);
			rendererFields.setFieldAlias(0, rendererFields.getField(0));
			rendererFields.addField(fieldName[1], null);
			rendererFields.setFieldAlias(1, rendererFields.getField(1));

			//查出各元素指定属性最大值  必须的
			QueryFilter queryFilter = (QueryFilter) res.createArcObject(QueryFilter.getClsid());
			queryFilter.addField(fieldName[0]);
			queryFilter.addField(fieldName[1]);
			ICursor cursor = fLayer.ITable_search(queryFilter, true);
			int numFields = 2; //柱状图列的个数
			int[] fieldIndecies = new int[numFields];
			fieldIndecies[0] = fLayer.findField(fieldName[0]);
			fieldIndecies[1] = fLayer.findField(fieldName[1]);
			double maxValue = 0;
			boolean firstValue = true;
			IRowBuffer row = cursor.nextRow();
			while (row != null) {
				for (int fieldIndex = 0; fieldIndex < numFields; fieldIndex++) {
					double fieldValue = Double.parseDouble(row.getValue(
							fieldIndecies[fieldIndex]).toString());
					if (firstValue) {
						maxValue = fieldValue;
						firstValue = false;
					}
					if (fieldValue > maxValue)
						maxValue = fieldValue;
				}
				row = cursor.nextRow();
			}

			//实例化图表对象
			BarChartSymbol barChartSymbol = (BarChartSymbol) res.createArcObject(BarChartSymbol.getClsid());

			IChartSymbol chartSymbol = barChartSymbol;
			barChartSymbol.setWidth(10);
			IMarkerSymbol markerSymbol = barChartSymbol;
			chartSymbol.setMaxValue(maxValue);
			markerSymbol.setSize(60);

			//设置柱状图每列填充颜色及线颜色
			SimpleFillSymbol fillSymbol1 = (SimpleFillSymbol) res.createArcObject(SimpleFillSymbol.getClsid());
			IRgbColor rgbColor1 = (IRgbColor) res.createArcObject(RgbColor.getClsid());

			rgbColor1.setRed(255);
			rgbColor1.setGreen(0);
			rgbColor1.setBlue(0);
			rgbColor1.setUseWindowsDithering(true);

			ILineSymbol ilinesym1 = (ILineSymbol) res.createArcObject(SimpleLineSymbol.getClsid());
			ilinesym1.setColor(rgbColor1);
			ilinesym1.setWidth(1);
			fillSymbol1.setOutline(ilinesym1);

			fillSymbol1.setColor(rgbColor1);
			barChartSymbol.addSymbol(fillSymbol1);

			SimpleFillSymbol fillSymbol2 = (SimpleFillSymbol) res.createArcObject(SimpleFillSymbol.getClsid());

			IRgbColor rgbColor2 = (RgbColor) res.createArcObject(RgbColor.getClsid());

			rgbColor2.setRed(238);
			rgbColor2.setGreen(195);
			rgbColor2.setBlue(235);
			rgbColor2.setUseWindowsDithering(true);

			ILineSymbol ilinesym2 = (ILineSymbol) res.createArcObject(SimpleLineSymbol.getClsid());
			ilinesym2.setColor(rgbColor2);
			ilinesym2.setWidth(1);
			fillSymbol2.setOutline(ilinesym2);
			fillSymbol2.setColor(rgbColor2);
			barChartSymbol.addSymbol(fillSymbol2);

			chartRender.setChartSymbolByRef(chartSymbol);
			chartRender.setUseOverposter(false);
			//设置FeatureRenderer ChartRenderer对象
			fLayer.setRendererByRef(chartRender);
			//刷新地图显示图表
//			map1.refresh();
			this.webContext.refresh();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



到此完成柱状专题图实现
分享到:
评论
3 楼 skying8603 2010-09-25  
Arcgis javascript1.5 API能不能生成arcgis的专题图啊?请指教
2 楼 sorh 2009-09-03  
哎  我这里的问题是 专题图上去了以后 删不掉。。。。
1 楼 langkins 2009-05-25  
刚开始做gis web 应用, 正要做专题图,看了你的代码受益良多,但是我不知道用怎样的方式让刷新的效果显示到页面上去?望指教。
回复帖子或者Email都可以,mail:langkins@yahoo.com.cn,
不胜感谢!

相关推荐

    基于ArcGISServer的城镇地价专题图制作及发布系统设计与实现

    基于ArcGISServer的城镇地价专题图制作及发布系统设计与实现

    arcgisengine二次开发实现专题地图

    6. **地图服务与工作流**:如果数据来自 ArcGIS Server,可以通过`IGlobeConnection`或`IMapServer`接口访问服务,实现动态加载和更新专题地图。 7. **用户体验**:使用`IMapControl`和`IFeatureSelection`等接口,...

    arcgis server 例子

    在本实例中,我们重点关注的是如何利用ArcGIS Server与ADF(ArcObjects for .NET Framework)来实现各类专题图的创建和应用。 首先,让我们了解什么是专题图。专题图是GIS中的一个重要概念,它将地理数据根据特定...

    arcgisserver开发实验2

    - 实验包括了在ArcGIS Server环境下实现地图导出、动态添加图层、自定义工具创建以及专题地图开发等高级功能。 3. 实现地图导出的方法: - 描述了如何在ArcGIS Server中实现地图导出功能,这涉及到使用VS2008创建...

    刘光《ArcGIS Server JavaScript API开发GeoWeb 2.0应用》书的源代码

    7. **动态图层和专题图**:如何动态地生成图层和创建专题图,这可能在Chapter11的代码中介绍。 8. **事件处理和交互**:监听并响应用户的点击、拖拽等交互事件,可能在Chapter12的源码中包含相关示例。 9. **...

    arcgis server 开发从入门到精度 专题制图源码

    2. 制图表达:学习各种专题图的绘制方法,如比例尺图、统计图、热力图等,以及如何通过ArcGIS Server动态生成这些专题图。 3. 动态渲染:掌握动态渲染技术,实现根据用户输入参数实时更新专题图的效果。 四、源码...

    arcgisserver培训资料

    这个“arcgisserver培训资料”包含了一个重要的主题——“ArcGIS Server范围专题图”,这表明我们将深入探讨如何利用ArcGIS Server创建和管理范围专题图。 **范围专题图的概念** 范围专题图是GIS中的一个重要概念...

    基于ArcGISServer和Ajax的WebGIS系统开发

    ### 基于ArcGISServer和Ajax的WebGIS系统开发 #### 1. 引言 随着互联网技术的快速发展,WebGIS(Web Geographic Information System)已成为地理信息系统领域的重要组成部分,广泛应用于各种地理信息服务场景中。...

    基于ArcGISServer的专题图渲染方法研究.pdf

    ### 基于ArcGIS Server的专题图渲染方法研究 #### 一、引言 专题图作为地理信息系统(GIS)中的一个重要组成部分,通过使用不同的颜色、符号和其他视觉元素来表示地图上的特征信息,使得用户能够直观地理解地理...

    Flex for arcgisserver 开发笔记

    - **Demo2:超市销售系统专题图演示**:演示如何创建和展示具有特定主题的地图。 - **Demo3:超市销售系统统计图演示**:通过图表形式展示销售数据,提供更直观的分析。 **查询** - **Demo1:空间查询**:基于地理...

    2009年7月ESRI培训中心南师大ArcGIS培训资料ArcGIS Server

    - **组件库(ArcObjects)**: ArcGIS Server 集成了功能强大的 ArcObjects 组件库,该库包含超过 3000 个类和接口,覆盖了空间数据存储、几何体对象操作、专题图绘制、空间分析等多个方面。 - **扩展性和灵活性**: ...

    Web地图设计模式——ArcGIS Server

    总的来说,Web地图设计模式在ArcGIS Server中的应用强调底图和专题图层的分离,通过缓存提高底图效率,利用客户端渲染提升专题图层的交互性。这种设计使得地图服务既能快速响应用户需求,又能灵活适应数据变化,是...

    use ArcGIS API for Flex control ArcGIS Server

    高级篇涵盖了专题图的制作、地理处理任务的执行、缓存管理、性能优化等更复杂的GIS操作。 **知识点总结** - **ArcGIS API for Flex**:用于构建基于Flex的GIS应用,与ArcGIS Server进行数据交互。 - **Flex**:...

    ArcGIS10server for js_sdk.zip

    ArcGIS Server 可以发布动态地图服务,客户端通过JavaScript SDK动态请求地图切片,以实现地图的无缝浏览。此外,还可以发布地理处理服务,执行复杂的GIS任务,例如缓冲区分析、网络分析等,并将结果返回到客户端。 ...

    arcgis server实例

    开发者需要掌握如何在ArcGIS Server上实现这些功能。 9. **源码示例**:压缩包中的源码提供了实际的编程实例,这有助于开发者理解和学习如何在.NET环境中与ArcGIS Server交互。通过分析和运行这些示例,开发者可以...

    ARCGIS直接调用百度、天地图地图服务的插件

    在ARCGIS中使用百度地图插件,可以实现在地图界面中加载百度地图的卫星图、地形图或者道路图,甚至可以结合百度的定位服务,实现地图上的动态定位。 天地图是由国家测绘地理信息局主导建设的国家级地理信息公共服务...

    基于ArcGIS SQL Server实现遥感影像入库及调用方法.pdf

    基于ArcGIS和SQL Server实现遥感影像入库及调用方法,主要涉及到地理信息系统(GIS)、遥感技术、数据库管理以及数据处理技术。以下是具体的知识点: 1. ArcGIS和SQL Server的角色和功能: - ArcGIS是地理信息系统...

    基于java的arcgis_server开发

    【基于Java的ArcGIS Server开发】是一个专题,主要探讨如何使用Java语言来开发Esri的ArcGIS Server应用程序。ArcGIS Server是一种地理信息系统平台,用于创建、托管和分发地图及地理服务。Java作为广泛使用的编程...

    Arcgis Server安装

    - **地图展示**:包括标注、符号化、专题图渲染等功能。 - **开发组件**:提供各类控件和工具包用于开发定制化的GIS应用程序。 #### 四、可创建的应用类型 - **桌面扩展**:例如在ArcMap、ArcCatalog、ArcScene 和...

    arcgis for javascript 统计专题图

    在这个主题中,我们将深入探讨如何利用`arcgisGraphics`和`arcgisFeatureLayer`扩展地图的功能,实现统计专题图的创建。 1. **arcgisGraphics**: `arcgisGraphics`是ArcGIS for JavaScript API中的一个核心组件,...

Global site tag (gtag.js) - Google Analytics