zoukankan      html  css  js  c++  java
  • 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>查询并与ESRI的Grid绑定</title> 
    
    <style type="text/css"> 
    
    #Text1 
    
    { 
    
     234px; 
    
    } 
    
    .style1 
    
    { 
    
     100%; 
    
    } 
    
    </style> 
    
    </head> 
    
    <body class="tundra"> 
    
    <form id="form1" runat="server"> 
    
    <div id="map" style="border: thick dotted #FF0000; height:570px; 990px; top: 0px; right: 0px;position:absolute;"></div> 
    
    <div style="height:300px; 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=" 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.onmouseover=function(){onRowOverHandler(this);};///动态定义行事件 
    
    myrow.onmouseout=function(){onRowOutHandler(this);}; 
    
    myrow.onclick=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、 效果图为:

    clip_image002

    clip_image004

  • 相关阅读:
    python 基础第二篇
    python 基础第五篇
    python 基础第四篇
    购物小编程(完整编码)
    计算机 python概论
    str 相关操作
    python 基础第三篇
    Nginx 配置多站点vhost
    h5页面宽度设置7.5rem
    js 倒计时,转义
  • 原文地址:https://www.cnblogs.com/dwf07223/p/3048094.html
Copyright © 2011-2022 走看看