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

Arcgis for Js实现graphiclayer的空间查询(续)

转自原文 Arcgis for Js实现graphiclayer的空间查询(续)

 

上文中,实现了简单的针对graphiclayer的空间查询工作,在本节,将更加详细的介绍针对graphiclayer的空间查询。首先,空间查询的方式:提供多种类型的空间查询,包括点周边、线周边、面内等多种方式;其次,图形绘制完成后状态的展示;再次,结果的显示。实现后的结果如下:

\

点周边——输入缓冲区距离<喎�"/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"/uploadfile/Collfiles/20141028/20141028091440197.png" alt="\">

点周边——查询结果


\

线周边——输入缓冲区距离

\

线周边——查询结果


\

面内——矩形

\

面内——圆形

\

面内——多边形

首先,绘制图形。

var drawToolbar = new esri.toolbars.Draw(map);
drawToolbar.on("draw-end",showDrawResults);
on(dom.byId("point"), "click", function(){
    restoreMap();
    drawToolbar.activate(esri.toolbars.Draw.POINT);
});
on(dom.byId("polyline"), "click", function(){
    restoreMap();
    drawToolbar.activate(esri.toolbars.Draw.POLYLINE);
});
on(dom.byId("extent"), "click", function(){
    restoreMap();
    drawToolbar.activate(esri.toolbars.Draw.EXTENT);
});
on(dom.byId("circle"), "click", function(){
    restoreMap();
    drawToolbar.activate(esri.toolbars.Draw.CIRCLE);
});
on(dom.byId("polygon"), "click", function(){
    restoreMap();
    drawToolbar.activate(esri.toolbars.Draw.POLYGON);
});
/**
 * 显示绘制结果
 */
function showDrawResults(evt){
    drawToolbar.deactivate();
    map.setMapCursor("default");
    var geometry = evt.geometry;
    if(geometry.type==="point" || geometry.type==="polyline"){
        $('#map').modalInfowindow({
            width:175,
            height:75,
            title:"请输入缓冲区距离",
            content:"<input id="'distance'" type="'text'">"
        });
        $("#distance").focus();
        $("#distance").keydown(function (e){
            // 回车键事件
            if(e.which == 13) {
                $("#close").click();
            }
        });
        on(dom.byId("close"), "click", function(){
            distance = dom.byId("distance").value;
            $("#modal").remove();
            doBuffer(geometry);
        });
    }
    else{
        queryGraphicByPolygon(geometry);
    }
};

当为点或者线的时候,得首先进行缓冲区分析,获取缓冲区的geometry,缓冲区分析的代码如下:

/**
 * 执行buffer
 * @param geometry
 */
function doBuffer(geometry) {
    var symbol = null;
    switch (geometry.type) {
        case "point":
            symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE,
                    7,
                    new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
                            new Color([0,0,255]),
                            1
                    ),
                    new Color([0,0,255])
            );
            break;
        case "polyline":
            symbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
                    new Color([0,0,255]),
                    2
            );
            break;
        case "polygon":
            symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_NONE,
                    new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
                            new Color([0,0,255]),
                            2
                    ),
                    new Color([0,0,255,0.25]));
            break;
    }
    var graphic = new Graphic(geometry, symbol);
    map.graphics.add(graphic);
 
    //setup the buffer parameters
    var params = new BufferParameters();
    params.distances = [distance];
    params.bufferSpatialReference = map.spatialReference;
    params.outSpatialReference = map.spatialReference;
    params.unit = GeometryService["UNIT_KILOMETER"];
 
    if (geometry.type === "polygon") {
        //if geometry is a polygon then simplify polygon.  This will make the user drawn polygon topologically correct.
        gsvc.simplify([geometry], function(geometries) {
            params.geometries = geometries;
            gsvc.buffer(params, function(bfGeometry){
                queryGraphicByPolygon(bfGeometry[0]);
            });
        });
    }
    else {
        params.geometries = [geometry];
        gsvc.buffer(params, function(bfGeometry){
            queryGraphicByPolygon(bfGeometry[0]);
        });
    }
}
View Code

在执行缓冲区分析的时候,会用到geometryservice。代码如下:

var gsvc = new GeometryService("http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer");

当缓冲区分析完成或者面要素绘制完成以后的geometry都为polygon,此时,执行空间查询:

/**
             * 根据多边形进行查询
             * @param geometry
             */
            function queryGraphicByPolygon(geometry){
                var graphics = chartLayer.graphics;
 
                var sfs = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
                        new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASHDOT,
                                new Color([255,0,0]), 2),
                        new Color([255,255,0,0.25])
                );
                var graphic = new Graphic(geometry,sfs);
                map.graphics.add(graphic);
 
                for(var i= 0, total=graphics.length;i<total;i++)
         {
          if(geometry.contains(graphics[i].geometry))
          {
          selectedgraphics.push(graphics[i]);
          graphics[i].symbol="createSymbol(iconPath,"#0ff");
          chartlayer.redraw();
          }
         }

空间查询的逻辑很简单,就是通过判断自定义的区域内是否包含各点。

 

相关文章:

  • 【树莓派】服务配置相关2:基于RPi Desktop的服务配置
  • (推荐)叮当——中文语音对话机器人
  • 睿仁医疗郑世斌:医疗智能硬件数据精度应放在第一位
  • 软件开发的流程
  • 理解.NET中的异常(二)
  • Spring 和 SpringMVC 常用注解
  • python并开发编程之协程
  • 探索我的项目管理之路之:软件质量的六个考核要素
  • 使用交换机实现数据单向访问控制
  • 为恶意文件“画像” 瀚思科技基于深度学习技术快速锁定未知威胁
  • 真实案例:一位网页开发者几乎毁掉一家小公司
  • 支付宝灾备能力为何引发争议
  • window对象的方法属性
  • Spark Mllib里的本地向量集(密集型数据集和稀疏型数据集概念、构成)(图文详解)...
  • amp;#9733;色盲悖论正解!
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 2017 年终总结 —— 在路上
  • Computed property XXX was assigned to but it has no setter
  • Fastjson的基本使用方法大全
  • FastReport在线报表设计器工作原理
  • javascript 哈希表
  • jQuery(一)
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Linux CTF 逆向入门
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • ------- 计算机网络基础
  • 前端性能优化--懒加载和预加载
  • 试着探索高并发下的系统架构面貌
  • 一道面试题引发的“血案”
  • # 安徽锐锋科技IDMS系统简介
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (06)金属布线——为半导体注入生命的连接
  • (23)Linux的软硬连接
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (二)c52学习之旅-简单了解单片机
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (三)模仿学习-Action数据的模仿
  • (算法)前K大的和
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转) Android中ViewStub组件使用
  • (转)德国人的记事本
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net MVC + EF搭建学生管理系统
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .netcore 获取appsettings
  • .NET大文件上传知识整理
  • .NET单元测试
  • .NET设计模式(11):组合模式(Composite Pattern)
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例