9、find查询结果可点击定位

find查询与grid

1、  目的:完成查询,输出查询结果并在地图上高亮显示符合条件的图元,单击输出信息后定位到该Graphics,单击可显示详细信息。

2、  准备:

数据:本机服务数据http://localhost/ArcGIS/rest/services/China/MapServer

其中“0”层是中国的政区图

3、  开发步骤:

(1)       设计页面以及代码:

     页面中心为地图<div>,地图的上面为查询按钮和条件文本框以及查询结果显示层!具体页面设计代码为:

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="find_grid.aspx.cs" Inherits="find" %>

<!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">

    <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="find.js"></script>

    <title>查询并与ESRIGrid绑定</title>

    <style type="text/css">

        #Text1

        {

            width: 234px;

        }

        .style1

        {

            width: 100%;

        }

    </style>

</head>

<body class="tundra">

    <form id="form1" runat="server">

    <div id="map" style="border: thick dotted #FF0000; height:570px; width:990px; top: 0px; right: 0px;position:absolute;"></div>

    <div style="height:300px; width:222px; top:240px; right: 10px; z-index:200; position:absolute;">

        <table class="style1">

            <tr>

                <td>

                <input id="searth_text" type="text" />

                <input id="Button1" type="button" value="查询" onclick="startquery();"/>

                </td>

            </tr>

            <tr>

                <td>

                 <div id="result_query" style="border: thin double #0000FF; height:300px;overflow:auto; visibility: hidden;">

                 <table id="mygrid" border="1" style="width: 90%"></table>

                 </div>

                </td>

            </tr>

        </table>   

    </div>

    </form>

</body>

</html>

 

(2)       Find.js编写:

     程序为查询数据中固定字段“PROV”,查询条件为PROV的值,即查询条件为PROV=“输入的数值”,因程序中注释很明确,故再次不再冗术,完整代码为:

 

 

      dojo.require("esri.map");//注册引用map控件

      dojo.require("esri.tasks.find");

      var findTask, findParams;

      var map,symbol;

      var grid, store;

     function init()

     {

        map = new esri.Map("map",{slider:true});//实例化map控件

        var dynamicMapServiceLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://localhost/ArcGIS/rest/services/China/MapServer");

        map.addLayer(dynamicMapServiceLayer);//加载图层

        //定义查询

        findTask = new esri.tasks.FindTask("http://localhost/ArcGIS/rest/services/China/MapServer");

        //定义查询参数

        findParams = new esri.tasks.FindParameters();

        findParams.returnGeometry = true;

        findParams.layerIds = [0];

        findParams.searchFields = ["PROV"];

      }

       dojo.addOnLoad(init);//加载是调用init初始化地图

      

      

      

      按钮单击开始查询

      function startquery() {

        findParams.searchText = document.getElementById("searth_text").value;//获取查询条件

        findTask.execute(findParams,showResults);

        document.getElementById("result_query").style.visibility='visible';//显示结果层<div>

      }

     

      /早地图上高亮显示查询结果

      function showResults(results)

      {

        map.graphics.clear();

        symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NULL, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,255,0]), 2), new dojo.Color([0,0,0,0]));

        var items = []; //存储查询结果属性值的变量

        for (var i=0, il=results.length; i<il; i++) {

          items.push(results[i].feature.attributes);  //items中压入数据

          var graphic = results[i].feature;//以下为高亮显示查询结果

          graphic.setSymbol(symbol);

          var infoTemplate = new esri.InfoTemplate();

          infoTemplate.setTitle(graphic.attributes.FID);

          graphic.setInfoTemplate(infoTemplate);

          map.graphics.add(graphic);

       }

          var mygrid=document.getElementById("mygrid");

          //以下为给向表格mygrid中添加查询结果

          for(i=0;i<items.length;i++)

          {

          var myrow=mygrid.insertRow();//添加行

          myrow.οnmοuseοver=function(){onRowOverHandler(this);};///动态定义行事件

          myrow.οnmοuseοut=function(){onRowOutHandler(this);}; 

          myrow.οnclick=function(){onRowClickHandler(this);}; 

          var mycell=myrow.insertCell();//添加单元格

          mycell.innerHTML=items[i].PROV;//写入值

          var mycell=myrow.insertCell();

          mycell.innerHTML=items[i].AREA;

          var mycell=myrow.insertCell();

          mycell.innerHTML=items[i].FID;

          }

      }

 

      //自定义grid的单击行的事件(完成定位)

       var selectedTaxLot;//要定位的Graphic

      function onRowClickHandler(myrow)

      {

         var myid=myrow.cells[2].lastChild.nodeValue;//获取表格行的第三列的数据

         if(selectedTaxLot!=null)//判断是否有要定位Graphic

          {selectedTaxLot.setSymbol(symbol);}//如果有将其symbol设为统一风格

         for (var i=0, il=map.graphics.graphics.length; i<il; i++) {//获取定位的Graphic

           var currentGraphic = map.graphics.graphics[i];

           if ((currentGraphic.attributes) && currentGraphic.attributes.FID == myid){

            selectedTaxLot = currentGraphic;

            break;

          }

        }

        var 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]), 3), new dojo.Color([125,125,125,0.35]));

        selectedTaxLot.setSymbol(highlightSymbol);//设置定位图元的symbol

        var taxLotExtent = selectedTaxLot.geometry.getExtent();

        map.setExtent(taxLotExtent);//定位到选定Graphic

      }

      //自定义grid鼠标移动到行上的事件

      function onRowOverHandler(myrow)

      {

       myrow.style.backgroundColor="#ff0000";

       myrow.style.cursor="pointer";

      }

      function onRowOutHandler(myrow)

     {

      myrow.style.backgroundColor="#ffffff";

      myrow.style.cursor="defoult";

     }

4、  总结:

程序完成了查询的一般方法,并且提供自动定位!

5、  效果图为:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值