目的:
1.ArcGIS.Server.9.3和ArcGIS API for JavaScript实现实现点、线、面的buffer分析,这里是通过GeometryServer实现。
准备工作:
1. 在ArcGis Server9.3中发布名为usa的MapServer。
2.ArcGis Server9.3中发布名为Geometry的GeometryServer
完成后的效果图:


开始
0.关于GeometryServer的介绍,可以看本系列的第九篇。
1.启动vs新建名为BufferSample的ASP.NET Web应用程序。其实jsapi是纯客户端的开发了不需要vs也不需要.net了,纯html页面就可以了用记事本都可以开发了。我这里为了方便了就用vs2008了,毕竟可以调试js脚本了。
2.接着在工程中添加名为javascript的文件夹并且在这个文件夹里新建wabapp.js的文件,这里用来编写我们自己的js代码了,在Default.aspx页面里添加对这个js文件的引用,同时在Default.aspx页面里添加一个id为map的div标签作为地图控件的载体、5个input的功能按钮、2个input的输入框、1个select选择列表:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="BufferSample._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>Untitled Page</title>
    
<link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.2/js/dojo/dijit/themes/tundra/tundra.css">
    
<script src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.2" type="text/javascript"></script>
    
<script src="javascript/webapp.js"></script>
    
<style type="text/css">
        #Text1
        
{
            width
: 54px;
        
}
    
</style>
</head>
<body class="tundra">
    
<form id="form1" runat="server">
    
<table>
    
<tr><td><div>
        
<input id="Button1" type="button" value=" 点 " onclick="tb.activate(esri.toolbars.Draw.POINT);map.hideZoomSlider();" />&nbsp;
        
<input id="Button2" type="button" value=" 线 " onclick="tb.activate(esri.toolbars.Draw.LINE);map.hideZoomSlider();" />&nbsp;
        
<input id="Button3" type="button" value=" 面 " onclick="tb.activate(esri.toolbars.Draw.POLYGON);map.hideZoomSlider();" />&nbsp;
        
<input id="Button4" type="button" value="漫 游" onclick="tb.deactivate();map.showZoomSlider();"    />&nbsp; 
        
&nbsp;WKID:<input id="wkid" style="width:40px" type="text" value="102113" />Buffer距离:<input id="distance" style="width:40px" type="text" value="25" />
        
<select id="unit" name="unit">
        
<option value="UNIT_STATUTE_MILE">英里</option>
    
<option value="UNIT_FOOT"></option>
    
<option value="UNIT_KILOMETER">千米</option>
    
<option value="UNIT_METER"></option>
    
<option value="UNIT_NAUTICAL_MILE">海里</option>
    
<option value="UNIT_US_NAUTICAL_MILE">美式海里</option>
    
<option value="UNIT_DEGREE"></option>
</select>
        
<input id="Button5" type="button" value="清 除" onclick="map.graphics.clear();" />
        
</div></td><td></td></tr>
    
<tr><td><div id="map" style="width:550px; height:400px; border:1px solid #000;"></div></td><td valign="top" align="left">dd</td></tr>
    
</table>
    
    
    
</form>
</body>
</html>
3、上面的html代码中主要可以看一下5个input按钮的onclick事件,分别实现了画点、画线、画面、漫游、清楚图形的代码很简单了,还有就是单位选择的select了已经添加了7个常用的单位。
4、切换到wabapp.js编写js代码,本例子的js代码分为3部分功能,第一载入地图进行显示;第二进行画点、线、面操作;第三根据画的点、线、面图形进行buffer分析。具体的说明看代码注释:
dojo.require("esri.map");
dojo.require(
"esri.tasks.geometry");
dojo.require(
"esri.toolbars.draw");
dojo.require(
"esri.tasks.query");

djConfig 
= { isDebug:true };

var map,tb,geometryService,queryTask,query;
function init()
{
   startExtent 
= new esri.geometry.Extent(-183.780014745329,16.2975638854873,-61.4068547410964,74.0304580085983new esri.SpatialReference({wkid:4269}));
   map 
= new esri.Map("map");
   
//底图Tile图
   var imageryPrime = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer");
   map.addLayer(imageryPrime);
   
   
var usa = new esri.layers.ArcGISDynamicMapServiceLayer("http://jh-53a435fbc0e8/ArcGIS/rest/services/USA/MapServer");
   
//设置要显示的图层
   //usa.setVisibleLayers([0]);
   //设置图层透明度
   usa.setOpacity(0.8);
   map.addLayer(usa);
   
//设置地图视图范围
   map.setExtent(startExtent);
   geometryService 
= new esri.tasks.GeometryService("http://jh-53a435fbc0e8/ArcGIS/rest/services/Geometry/GeometryServer");
   tb 
= new esri.toolbars.Draw(map);
   dojo.connect(tb, 
"onDrawEnd", doDraw);
}

//画图
function doDraw(geometry)
{
   
//根据图形的类型定义显示样式
   switch (geometry.type)
   {
      
case "point":
          
var symbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE, 10new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 1), new dojo.Color([0,255,0,0.25]));
          
break;
      
case "polyline":
           
var symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASH, new dojo.Color([255,0,0]), 1);
           
break;
      
case "polygon":
           
var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0,0,0]), 1), new dojo.Color([255,0,0,0.25]));
           
break;
   }
   
//把绘制的图形添加到map.graphics进行显示
   var graphic = new esri.Graphic(geometry, symbol);
   map.graphics.add(graphic);
   
   
//如果是面需要先进行simplify操作,否则直接进行buffer
   if(geometry.type === "polygon")
   {
      geometryService.simplify([graphic],doSimplify);
   }
   
else
   {
      doBuffer([graphic]);
   }
}

//simplify结束调用buffer
function doSimplify(graphics)
{
   doBuffer(graphics);
}

function doBuffer(graphics)
{
   
//buffer参数
   var params = new esri.tasks.BufferParameters();
   
//buffer的范围值,从输入框中获取
   params.distances = [ dojo.byId("distance").value ];
   
//空间参考
   params.bufferSpatialReference =new esri.SpatialReference({wkid: dojo.byId("wkid").value});
   
//输出结果的空间参考
   params.outSpatialReference = map.spatialReference;
   params.features 
= graphics;
   
//buffer的单位,从列表框获取
   params.unit = eval("esri.tasks.BufferParameters."+dojo.byId("unit").value);
   
//buffer操作
   geometryService.buffer(params,showBuffer);
}

//显示buffer的结果
function showBuffer(features)
{
   
var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID,new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID,new dojo.Color([255,0,0,0.65]), 2),new dojo.Color([255,0,0,0.35]));
   
for (var j=0;j<features.length;j++)
   {
      
var graphic = new esri.Graphic(features[j].geometry,symbol);
      map.graphics.add(graphic);
   }
   tb.deactivate();
   map.showZoomSlider();
   
}

dojo.addOnLoad(init);
5、这样就完成了buffer的例子。

posted @ 2008-12-10 22:17 水的右边 阅读(1064) | 评论 (6)编辑
目的:
1.了解ArcGIS.Server.9.3.DotNet的ADF与ASP.NET AJAX的关系,这样能更好的理解客户端的编程。
背景:
AGS9.2 ADF与AGS9.3 ADF的Web applications开发方面最大的区别应该是9.3的应用构建于ASP.NET Ajax平台上的而且9.2是原先的ASP.NET script callback,当然9.3仍旧兼容这种模式了,当页面控件存在ScriptManager时,Web ADF控件使用ASP.NET AJAX异步调用,当该控件不存在时,Web ADF则使用script callback机制。ASP.NET AJAX分别提供了客户端和服务器端的解决方案,不论哪种情况,Web ADF客户端脚本库均使用ASP.NET AJAX客户端脚本来支持复杂的脚本环境,这样就非常有必要了解Web ADF JavaScript Library与ASP.NET Ajax JavaScript Library的关系。
一、ASP.NET AJAX后的初始化过程:
1.首先对生成的地图页面html代码进行分析发现如下的引入js文件的代码:
1<script src="/WebResource.axd?d=0N8KHp8frxNtVgNzCetRdUutgL87Ya16XZLqmCnhnEIFJEBuBoY4FrreHUOGtfyfKINM-ag5tJJ8INMJh0sWUjQer9_MCMnmT2nzoYarF8WUYrpkTLqKsux89TJpiHohAJWXCiGnR0n4iIvU2i-_ql2-BfWTZjG_BNfRgISWhzP7NicOQ8Sogo4_3reQFFkx0&amp;t=633592481492187500" type="text/javascript"></script>
这个就是引入了微软的名叫MicrosoftAjax.js文件(大家可以自己去获取一下读读它的代码),这样在ADF的脚本中可以使用ASP.NET Ajax类库提供的那些方法了,比如$get方法、$find方法、Sys.Application对象等
2.接着往下看能找到如下的代码:
1<script type="text/javascript">
2//<![CDATA[
3Sys.Application.initialize();esriSystemDecimalDelimiter=ESRI.ADF.System.decimalDelimiter='.';ESRI.ADF.System.maximumLapseTime = 20;esriBlankImagePath=ESRI.ADF.System.blankImagePath="/WebResource.axd?d=0N8KHp8frxNtVgNzCetRdUutgL87Ya16XZLqmCnhnEIFJEBuBoY4FrreHUOGtfyfKINM-ag5tJJ8INMJh0sWUjQer9_MCMnmT2nzoYarF8WUYrpkTLqKsux89TJpiHoh-lLjkMB7HpxriIQdK3c9BffxCo0OtvW-XlrUOieVkZQ1&t=633592481492187500";//]]>
4</script>
在这里主要是Sys.Application.initialize();这句是对ASP.NET Ajax是Sys.Application对象进行了初始化,在ASP.NET Ajax的页面中Application class被创建初始化负责整个客户端页面的生命周期。
3.在上面的代码中完成的Sys.Application的初始化工作,接下来的ADF控件的在客户端的初始化工作都交由Sys.Application对象的add_init方法来进行比如Toolbar控件、Navigation控件等。
posted @ 2008-12-09 22:44 水的右边 阅读(929) | 评论 (0)编辑
     摘要: 目的:1.ArcGIS.Server.9.3和ArcGIS API for JavaScript实现自定义图形,保存自定义的Graphic图形到服务端的xml文件中,同时也能在地图载入时读入xml中的图形数据显示到地图中。 这里的自定义面的Label是通过GeometryServer的labelPoints实现的。准备工作: 1. 在ArcGis Server9.3中发布名为Geometry的Ge...  阅读全文
posted @ 2008-12-08 22:08 水的右边 阅读(956) | 评论 (3)编辑
目的:
1.ArcGIS.Server.9.3和ArcGIS API for JavaScript实现距离量算和面积量算,这里主要是通过GeometryServer实现。
准备工作:
1. 在ArcGis Server9.3中发布名为usa的MapServer。
2.ArcGis Server9.3中发布名为Geometry的GeometryServer
完成后的效果图:


开始
0.关于GeometryServer的介绍,Geometry Service,Geometry Service是给程序提供几何计算如 buffering, simplifying, calculating areas 、lengths,  projecting等功能,Geometry Service可以用来代替ArcObjects 或geoprocessing service等做的这些几何计算,它是ArcGIS Server 9.3提供的新功能,本例子中就用到了simplifyingcalculating areas 、lengths、projecting四个功能。
1.启动vs新建名为MeasureSample的ASP.NET Web应用程序。其实jsapi是纯客户端的开发了不需要vs也不需要.net了,纯html页面就可以了用记事本都可以开发了。我这里为了方便了就用vs2008了,毕竟可以调试js脚本了。
2.接着在工程中添加名为javascript的文件夹并且在这个文件夹里新建wabapp.js的文件,这里用来编写我们自己的js代码了,在Default.aspx页面里添加对这个js文件的引用,同时在Default.aspx页面里添加一个id为map的div标签作为地图控件的载体、3个input的功能按钮、一个信息显示的span:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="MeasureSample._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>Untitled Page</title>
    
<link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.2/js/dojo/dijit/themes/tundra/tundra.css">
    
<script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.2"></script>
    
<script type="text/javascript" src="javascript/webapp.js"></script>
</head>
<body class="tundra">
    
<form id="form1" runat="server">
    
<div>
        
<input id="Button1" type="button" value="距离测量" onclick="toolbar.activate(esri.toolbars.Draw.LINE);map.hideZoomSlider();" /> <input id="Button2" 
            type
="button" value="面积测量" onclick="toolbar.activate(esri.toolbars.Draw.POLYGON);map.hideZoomSlider();" /> <input id="Button3" type="button" 
            value
="漫 游" onclick="toolbar.deactivate();map.showZoomSlider();" /><span id="distance"></span></div>
    
<div id="map" class="tundra" style="width:512px; height:400px; border:1px solid #000;"></div>
    
</form>
</body>
</html>
3.上面的html代码非常的简单了,主要可以看一下3个功能按钮的onclick事件方法。
4.切换到wabapp.js文件编写js功能代码,功能主要是分为3部分,第一载入地图进行显示;第二在地图上进行画线画面的功能;第三根据画的线或者面进行距离或者面积的量算。
5.这样讲一下关于距离和面积的量算,本例子的地图数据usa是采用是地理坐标系wkid为4269,要进行距离或者面积时就必须转换到大地坐标系下,就是地图投影了。本例子中用GeometryServer的project方法把usa投影到大地坐标系下wkid为32618。所以这里无论是距离测量还是面积测量首先必须进行project,对于距离测量完成投影后就可以直接用GeometryServer的lengths方法进行测量,对于面积测量还需要先进行simplify操作后在用GeometryServer的areasAndLengths方法进行测量。
6.具体的代码和说明如下:
dojo.require("esri.map");
dojo.require(
"esri.toolbars.draw");
dojo.require(
"esri.tasks.geometry");

var map, toolbar, symbol, geometryService;
function init()
{
   map 
= new esri.Map("map");
   
var dynamicMapServiceLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://mypc/ArcGIS/rest/services/USA/MapServer");
   map.addLayer(dynamicMapServiceLayer);
   toolbar 
= new esri.toolbars.Draw(map);
   
//添加toolbar画图完成后天事件监听调用doMeasure
   dojo.connect(toolbar, "onDrawEnd", doMeasure);
   
   
//实例化GeometryService,地址为ags发布的GeometryServer
   geometryService = new esri.tasks.GeometryService("http://mypc/ArcGIS/rest/services/Geometry/GeometryServer");
   
//添加onProjectComplete完成后事件监听
   dojo.connect(geometryService, "onProjectComplete", projectComplete);
}

//量算
function doMeasure(geometry)
{
   
//更加类型设置显示样式
   switch (geometry.type)
   {
      
case "polyline":
         
var symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0,0,0]), 2);
         
break;
      
case "polygon":
         
var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NONE, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255,0,0]), 2), new dojo.Color([255,255,0,0.25]));
         
break;
   }
   
//设置样式
   var graphic = new esri.Graphic(geometry, symbol);
   
//清除上一次的画图内容
   map.graphics.clear();
   
//
   map.graphics.add(graphic);
   
//进行投影转换,完成后调用projectComplete
   geometryService.project([graphic],new esri.SpatialReference({"wkid":32618}));
}

//投影转换完成后调用方法
function projectComplete(graphics)
{
  
//如果为线类型就进行lengths距离测算
  if(graphics[0].geometry.type=="polyline")
  {
     dojo.connect(geometryService, 
"onLengthsComplete", outputDistance);
     geometryService.lengths([graphics[
0]]);
  }
  
//如果为面类型需要先进行simplify操作在进行面积测算
  else if(graphics[0].geometry.type=="polygon")
  {
     dojo.connect(geometryService, 
"onSimplifyComplete", simplifyComplete);
     geometryService.simplify([graphics[
0]]);
  }
}

//显示测量距离
function outputDistance(result)
{
   dojo.byId(
"distance").innerHTML = "距离:"+dojo.number.format(result.lengths[0/ 1000+ "千米";
}

//显示测量面积
function outputAreaAndLength(result)
{
   dojo.byId(
"distance").innerHTML ="面积:"+ dojo.number.format(result.areas[0/ 1000000+ "平方公里"+" 长度:"+dojo.number.format(result.lengths[0]/1000) + "千米";
}

//对面对象simplify完成后调用方法
function simplifyComplete(graphics)
{
  dojo.connect(geometryService, 
"onAreasAndLengthsComplete", outputAreaAndLength);
  
//进行面积测量
  geometryService.areasAndLengths(graphics);
}

dojo.addOnLoad(init);
7.完成编码运行查看效果。
posted @ 2008-12-03 22:26 水的右边 阅读(1249) | 评论 (0)编辑
目的:
1.ArcGIS.Server.9.3和ArcGIS API for JavaScript实现语句查询能,通过QueryTask实现,根据输入的查询语句对指定图层进行查询然后把查询到的地理元素进行高亮显示,并且给查询到的元素添加鼠标移上去显示信息的功能。
准备工作:
1. 在ArcGis Server9.3中发布名为usa的MapServer。
2.在使用在线的http://server.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer地图数据和jsapi。
完成后的效果图:


开始
1.启动vs新建名为QueryTask1的ASP.NET Web应用程序。其实jsapi是纯客户端的开发了不需要vs也不需要.net了,纯html页面就可以了用记事本都可以开发了。我这里为了方便了就用vs2008了,毕竟可以调试js脚本了。
2.接着在工程中添加名为javascript的文件夹并且在这个文件夹里新建wabapp.js的文件,这里用来编写我们自己的js代码了,在Default.aspx页面里添加对这个js文件的引用,同时在Default.aspx页面里添加一个id为map的div标签作为地图控件的载体、关键字输入的input、查找input按钮,添加完成后的html代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="QueryTask1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>Untitled Page</title>
    
<link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.2/js/dojo/dijit/themes/tundra/tundra.css">
    
<script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.2"></script>
    
<script type="text/javascript" src="javascript/wabapp.js"></script>
</head>
<body class="tundra">
    
<form id="form1" runat="server">
    
<table border="1px">
    
<tr>
    
<td>
        
<input id="keystr" type="text" value="POP2000&gt;5000000" /><input id="Button1" type="button" value="搜 索" onclick="search(dojo.byId('keystr').value)" /></td>
    
</tr>
    
<tr>
    
<td><div id="map" style="width:600px; height:450px; border:1px solid #000;"></div></td>
    
</tr>
    
</table>
    
</form>
</body>
</html>
3.页面的html代码非常简单了不做解释了,切换到wabapp.js文件开始编写js代码,本代码包括3部分功能,第一是载入地图进行显示;第二是根据查询语句进行查询;第三是查询到的元素的鼠标移动上去显示信息的功能。具体的说明看代码注释:
dojo.require("esri.map");
dojo.require(
"esri.tasks.query");
var map,queryTask, query,infoTemplate,symbol,highlightSymbol;

function init()
{
   map 
= new esri.Map("map");
   
//底图Tile图
   var imageryPrime = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer");
   map.addLayer(imageryPrime);
}

//搜索方法
function search(txt)
{
   
if(txt!="")
   {
      
//实例化QueryTask,查询图层2,也就是States图层
      queryTask = new esri.tasks.QueryTask("http://jh-53a435fbc0e8/ArcGIS/rest/services/USA/MapServer/2");
      
//查询参数
      query = new esri.tasks.Query();
      
//需要返回Geometry
      query.returnGeometry = true;
      
//需要返回的字段
      query.outFields = ["OBJECTID","Shape","AREA","STATE_NAME","SUB_REGION","STATE_ABBR","POP2000","POP00_SQMI","Shape_Length","Shape_Area"];
      
//查询条件
      query.where = txt;
      
//信息模板
      infoTemplate = new esri.InfoTemplate();
      
//设置Title
      infoTemplate.setTitle("${STATE_NAME}");
      
//设置Content
      infoTemplate.setContent("<b>OBJECTID: </b>${OBJECTID}<br/>"
                             
+ "<b>AREA: </b>${AREA}<br/>"
                             
+ "<b>STATE_NAME: </b>${STATE_NAME}<br/>"
                             
+ "<b>POP2000: </b>${POP2000}");

      
//设置infoWindow的尺寸
      map.infoWindow.resize(245,125);
      
//进行查询,完成后调用showResults方法
      queryTask.execute(query,showResults);
   }
   
else
   {
      alert(
"请输入查询语句");
   }
   
}

//高亮显示查询结果
function showResults(results)
{
   
//清除上一次的高亮显示
   map.graphics.clear();
   
//高亮样式
   highlightSymbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 2), new dojo.Color([125,125,125,0.35]));
    
//查询结果样式
   symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0,0,255,0.35]), 1),new dojo.Color([125,125,125,0.35]));
   
   
var rExtent = new esri.geometry.Extent();
   
//遍历查询结果
   for (var i=0;i<results.features.length; i++)
   {
      
var graphic=results.features[i];
      
//设置查询到的graphic的显示样式
      graphic.setSymbol(symbol);
      
//设置graphic的信息模板
      graphic.setInfoTemplate(infoTemplate);
      
//把查询到的结果添加map.graphics中进行显示
      map.graphics.add(graphic);
      
//获取查询到的所有geometry的Extent用来设置查询后的地图显示
      if(i==0)
      {
         rExtent
=graphic.geometry.getExtent();
      }
      
else
      {
         rExtent
=rExtent.union(graphic.geometry.getExtent());
      }
      
   }
   
//设置地图视图范围
   map.setExtent(rExtent);
   
//启用map.graphics的鼠标事件
   map.graphics.enableMouseEvents();
   
//map.graphics的鼠标移上去事件
   dojo.connect(map.graphics, "onMouseOver",showTip);
   
//map.graphics的鼠标移开事件
   dojo.connect(map.graphics, "onMouseOut",hideTip);
}

//鼠标移上去事件
function showTip(evt)
{
   
//获取当前graphic的信息内容
   var hgraphic=evt.graphic;
   
var content =hgraphic.getContent();
   map.infoWindow.setContent(content);
   
var title = evt.graphic.getTitle();
   map.infoWindow.setTitle(title);
   evt.graphic.setSymbol(highlightSymbol);
   map.infoWindow.show(evt.screenPoint,map.getInfoWindowAnchor(evt.screenPoint));

}

//鼠标移开事件
function hideTip(evt)
{
   
//隐藏infoWindow
   map.infoWindow.hide();
   
//查询结果取消红色高亮显示
   evt.graphic.setSymbol(symbol);
}

dojo.addOnLoad(init);
4.完成进行运行查看效果。
posted @ 2008-12-02 22:15 水的右边 阅读(1244) | 评论 (2)编辑
     摘要: 目的:1.ArcGIS.Server.9.3和ArcGIS API for JavaScript实现查询定位中心的功能,主要是通过FindTask功能实现的,输入关键字后对指定的图层以及字段进行关键字查询并且把查询到的结果显示在右边的Grid中,点击Grid中的某一行时进行定位中心进行显示。准备工作:1. 在ArcGis Server9.3中发布名为usa的MapServer。2.在使用在线的ht...  阅读全文
posted @ 2008-11-29 21:34 水的右边 阅读(1183) | 评论 (7)编辑
     摘要: 目的:1.ArcGIS.Server.9.3和ArcGIS API for JavaScript实现Identify功能,鼠标点击后获取被点击对象的然后以infoWindow的方式显示点击对象的属性信息。准备工作:1. 在ArcGis Server9.3中发布名为usa的MapServer。2.在使用在线的http://server.arcgisonline.com/ArcGIS/rest/ser...  阅读全文
posted @ 2008-11-25 22:27 水的右边 阅读(1159) | 评论 (5)编辑
     摘要: 目的:1.ArcGIS.Server.9.3和ArcGIS API for JavaScript中GraphicsLayer应用,根据查询结果把元素添加到GraphicsLayer中并且提供选择GraphicsLayer中的元素选择功能,对选择的元素进行高亮显示并且在地图的右边显示选择的元素详细列表。准备工作:1. 在ArcGis Server9.3中发布名为usa的MapServer。2.在使用...  阅读全文
posted @ 2008-11-23 13:44 水的右边 阅读(1009) | 评论 (0)编辑
     摘要: 目的:1.ArcGIS API for JavaScript实现Toorbar功能,包括zoomin、zoomout、zoomfullext、zoomToPrevExtent、zoomToNextExtent、pan等。准备工作:1.在使用在线的http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/M...  阅读全文
posted @ 2008-11-22 19:25 水的右边 阅读(917) | 评论 (0)编辑
     摘要: 目的:1.地图map控件基本参数设置,总结了一些比较有用的参数,包括esriConfig.defaults.map下的参数设置和map控件的参数设置。准备工作:1.在使用在线的http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer地图数据和jsapi。完成后的效果图:开始一、esri.M...  阅读全文
posted @ 2008-11-18 22:11 水的右边 阅读(1064) | 评论 (0)编辑
     摘要: 目的:1.ArcGIS API for JavaScript实现Toc功能,图层列表的显示以及图层可见性的控制。准备工作:1.在ArcGIS.Server.9.3发布一个叫usa的Map Service,并且把这个Service启动起来。完成后的效果图:开始0.本例子开始采用Esri提供的在线的jsapi了没有用本地的服务服务端jsapi原因是我只有1.0的jsapi了,在线的已经更新到1.1了。...  阅读全文
posted @ 2008-11-17 18:38 水的右边 阅读(1059) | 评论 (2)编辑
     摘要: 目的:1.ArcGIS API for JavaScript实现基本的地图功能,包括2个地图服务的叠加显示、图层过滤定义、地图视图范围设置、地图鼠标移动事件等。准备工作:1.在ArcGIS.Server.9.3发布一个叫usa的Map Service,并且把这个Service启动起来。2.瓦片数据地图我这里没有现成的就采用Esri提供的rest世界地图数据服务,地址如下:http://server...  阅读全文
posted @ 2008-11-14 22:15 水的右边 阅读(2471) | 评论 (66)编辑
     摘要: 目的:1.ArcGIS API for Flex用GeoprocessingServices实现网络分析中的最短路径分析,本例子根据在地图上指定Stops点和Barriers点然后进行最短路径的分析并且把路径分析结果显示在地图中同时在右边的DataGrid中现在最短路径的行车方法。准备工作:1.本来例子采用的数据是SanFrancisco数据(ArcTutor\GP Service Example...  阅读全文
posted @ 2008-11-09 17:02 水的右边 阅读(1852) | 评论 (12)编辑
     摘要: 目的:1.ArcGIS API for Flex用GeoprocessingServices实现网络分析中的服务区分析,本例子根据driveTimes值分析出在指定时间内的区域范围情况,效果图中有内到外分别是1分钟、2分钟、3分钟的行车区域范围情况。准备工作:1.本来例子采用的数据是SanFrancisco数据(ArcTutor\GP Service Examples\DriveTimePolyg...  阅读全文
posted @ 2008-11-07 20:45 水的右边 阅读(1481) | 评论 (1)编辑
     摘要: 目的:1.ArcGis的SanFrancisco网络数据集制作,网络数据集是网络分析的数据基础这里用SanFrancisco数据为基础制作网络数据集,虽然SanFrancisco已经提供了现成的做好的网络数据集但是用现成的数据总是不太能很好的理解网络分析,作为一个程序员对制图做数据方面实在是差了,这里通过亲手制作一下网络数据集练习一下。准备工作:1.SanFrancisco数据:ArcTutor\...  阅读全文
posted @ 2008-11-02 21:47 水的右边 阅读(1100) | 评论 (6)编辑