当前位置: 首页 > news >正文

ArcGIS.Server.9.3和ArcGIS API for JavaScript实现语句查询QueryTask(八)

目的:
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.完成进行运行查看效果。

相关文章:

  • 数据存储之SharedPreferences
  • 打印服务器
  • 前端Demo常用库文件链接
  • System.IO.FileAttributes
  • 前端学Markdown
  • 电脑的所有外设接口
  • 暗潮:微信小程序第一弹:虐狗结婚证
  • Linux网卡配置(一)网卡配置文件
  • 使用X Manager远程CentOS 7服务器(XDMCP)
  • 怎么中文版也看不懂哦,茜色的剧本真强大
  • 探讨 ADO.NET DataRow
  • 数据库中的索引
  • 亲历北京Top 500
  • 【翻译】使用IIS 7.0 PowerShell 创建web站点,Web应用,虚拟路径和应用程序池
  • @ModelAttribute使用详解
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 2017-09-12 前端日报
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java应用性能调优
  • Linux中的硬链接与软链接
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python连接Oracle
  • 码农张的Bug人生 - 见面之礼
  • 前端工程化(Gulp、Webpack)-webpack
  • 手写一个CommonJS打包工具(一)
  • 算法-图和图算法
  • AI算硅基生命吗,为什么?
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 湖北分布式智能数据采集方法有哪些?
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # include “ “ 和 # include < >两者的区别
  • #《AI中文版》V3 第 1 章 概述
  • (07)Hive——窗口函数详解
  • (3)STL算法之搜索
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (多级缓存)多级缓存
  • (二)斐波那契Fabonacci函数
  • (十一)c52学习之旅-动态数码管
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .Net 路由处理厉害了
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET的数据绑定
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • @Bean, @Component, @Configuration简析
  • @RequestBody与@ModelAttribute
  • @staticmethod和@classmethod的作用与区别
  • [2016.7 day.5] T2
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [Android学习笔记]ScrollView的使用
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子