博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Arcgis for js开发之直线、圆、箭头、多边形、集结地等绘制方法
阅读量:5893 次
发布时间:2019-06-19

本文共 8601 字,大约阅读时间需要 28 分钟。

Arcgis for js开发之直线、圆、箭头、多边形、集结地等绘制方法

 


将ARCGIS for Js API中绘制各种图形的方法进行封装,方便调用。用时只需要传入参数既可。(在js文件中进行封装定义);

1、新建js文件,新建空对象用于函数的定义

if (!this["gisTool"]) { gisTool= {}; }if (!this["gisTool.Map"]) { gisTool.Map = {}; }

定义一个空对象,用于存储各类方法:

//地图交互事件gisTool.Map.MapTool = {

在mapTool对中进行新建函数,方便不同功能中的调用。

一、获取当前点击的地图坐标

//地图拾取点坐标    getMapPoint: function (callBack) {       map.setMapCursor("crosshair");        var mapHandler = dojo.connect(map, "onClick", function (event) {            clearLayer(map, "PointLayer");            try {                map.setMapCursor("default");                callBack(event.mapPoint);                dojo.disconnect(mapHandler);//事件值执行一次            } catch (err) { }        });    },

二、绘制圆形(传入对应的参数既可)

drawCircle: function (x, y, R, symbol, graphicLayer, isFly, callBack) {        var ptStart = Geometry.drawPoint(parseFloat(x), parseFloat(y), { wkid: 4832});        var circleGeometry = new esri.geometry.Circle(ptStart, {            "radius": R,        });        if (isFly) {           CenterAt(map, circleGeometry);        }        var graphic = new esri.Graphic(circleGeometry, symbol);        if (callBack != null) {            callBack(circleGeometry);        }                graphicLayer.add(graphic);    },

三、图形定位(单击进行坐标或者geometry定位)

flayCirle: function (map, geometry) {        var extent = geometry.getExtent();        if (geometry.type == "point") {            extent = new esri.geometry.Extent(geometry.x - 0.0000001, geometry.y - 0.0000001, geometry.x - 0 + 0.0000001, geometry.y - 0 + 0.0000001, map.spatialReference);            extent = extent.expand(1.5);        }        if (extent != null) {            var point = new esri.geometry.Point(extent.xmin + (extent.xmax - extent.xmin) / 2, extent.ymin + (extent.ymax - extent.ymin) / 2, map.spatialReference);            var newExtent = new esri.geometry.Extent(point.x, point.y, point.x, point.y, point.spatialReference);            //如果当前视图包含要缩放视图            if (Extent(map.extent, extent)) {                // extent = extent.expand(2);                map.setExtent(extent);            } else {                var firstEx = UnionExtent(newExtent, map.extent);                map.setExtent(firstEx, true);                setTimeout(function () {                    map.centerAt(point)                }, 700);                setTimeout(function () {                    extent = extent.expand(1.5);                    map.setExtent(extent);                }, 1400);            }        }    },

四、绘制多线段PloygonLine

drawPolyLine: function (callback) {        var toolbar = new esri.toolbars.Draw(map, { showTooltips: true });        toolbar.activate(esri.toolbars.Draw.POLYLINE);        dojo.connect(toolbar, "onDrawEnd", function (geometry) {            callback(geometry);            toolbar.deactivate();        });    },

五、将绘制的多线段添加到地图上

addPolyLine: function (points,symbol,graphicLayerName) {        var map = map;        require(["esri/geometry/Polygon", "esri/SpatialReference"], function (Polygon, SpatialReference) {            var polygonLine = new Polygon(new esri.SpatialReference({ wkid: wkid }));            polygonLine.addRing(points);            var graphicsLayer = GrapchicLayer(map, graphicLayerName);            var graphic = new esri.Graphic(polygonLine, symbol);            graphicsLayer.add(graphic);        });    },

六、绘制多边形

drawPolygon:function(callback){        var toolbar = new esri.toolbars.Draw(map, {            showTooltips: true        });        toolbar.activate(esri.toolbars.Draw.POLYGON);        dojo.connect(toolbar, "onDrawEnd", function (geometry) {            callback(geometry);            toolbar.deactivate();        });    },

七、绘制箭头的方法

drawArrow: function (callback) {        var toolbar = new esri.toolbars.Draw(map, { showTooltips: true });        toolbar.activate(esri.toolbars.Draw.ARROW);        dojo.connect(toolbar, "onDrawEnd", function (geometry) {            callback(geometry);            toolbar.deactivate();        });    },

八、将多边形添加到地图上

addPolygon: function (points, symbol, graphicLayerName) {        var map = map;        require(["esri/geometry/Polygon", "esri/SpatialReference"], function (Polygon, SpatialReference) {            var polygon = new Polygon(new esri.SpatialReference({ wkid: 4832}));            polygon.addRing(points);            var graphic = new esri.Graphic(polygon, symbol);            var graphicsLayer = GraphicLayer(map, graphicLayerName);            graphicsLayer.add(graphic);        });    },

九、画线的方法

drawLine: function (callback) {        var toolbar = new esri.toolbars.Draw(map, { showTooltips: true });        toolbar.activate(esri.toolbars.Draw.LINE);        dojo.connect(toolbar, "onDrawEnd", function (geometry) {            callback(geometry);            toolbar.deactivate();        });    },

十、绘制集结地(需要英语第三方的API)

drawGathering_Place: function (pnts,symbol,graphicLayerName) {        this.t = 0.4;        var mid = P.PlotUtils.mid(pnts[0], pnts[1]);        var d = P.PlotUtils.distance(pnts[0], mid) / 0.9;        var pnt = P.PlotUtils.getThirdPoint(pnts[0], mid, P.Constants.HALF_PI, d, true);        pnts = [pnts[0], pnt, pnts[1]];        var mid = P.PlotUtils.mid(pnts[0], pnts[2]);        pnts.push(mid, pnts[0], pnts[1]);        var normals = [];        for (var i = 0; i < pnts.length - 2; i++) {            var pnt1 = pnts[i];            var pnt2 = pnts[i + 1];            var pnt3 = pnts[i + 2];            var normalPoints = P.PlotUtils.getBisectorNormals(this.t, pnt1, pnt2, pnt3);            normals = normals.concat(normalPoints);        }        var count = normals.length;        normals = [normals[count - 1]].concat(normals.slice(0, count - 1));        var pList = [];        for (i = 0; i < pnts.length - 2; i++) {            pnt1 = pnts[i];            pnt2 = pnts[i + 1];            pList.push(pnt1);            for (var t = 0; t <= P.Constants.FITTING_COUNT; t++) {                var pnt = P.PlotUtils.getCubicValue(t / P.Constants.FITTING_COUNT, pnt1, normals[i * 2], normals[i * 2 + 1], pnt2);                pList.push(pnt);            }            pList.push(pnt2);        }        gisTool.MapTool.addPolygon(pList, symbol,graphicLayerName);    },

十一、绘制自由线

drawFreehandLine: function (callback) {        var toolbars = new esri.toolbars.Draw(map, { showTooltips: true });        toolbars.activate(esri.toolbars.Draw.FREEHAND_POLYLINE);        dojo.connect(toolbars, "onDrawEnd", function (geometry) {            callback(geometry);            toolbars.deactivate();        });    },

十二、手绘多边形

drawFreePolygon: function (callback) {        var toolbars = new esri.toolbars.Draw(map, { showTooltips: true });        toolbars.activate(esri.toolbars.Draw.FREEHAND_POLYGON);        dojo.connect(toolbars, "onDrawEnd", function (geometry) {            callback(geometry);            toolbars.deactivate();        });    },

十三、绘制文字

drawText: function (symbol,graphicLayerName) {        var toolbar = new esri.toolbars.Draw(map, { showTooltips: true });        toolbar.activate(esri.toolbars.Draw.POINT);        map.setMapCursor("crosshair");        toolbar.on("draw-complete", function (evt) {            var point = evt.geometry;                       var graphicLayer = GraphicLayer(map, graphicLayerName);            var graphic = esri.Graphic(point, symbol);            graphicLayer.add(graphic);            map.setMapCursor("default");            toolbar.deactivate();        });    },

十四、删除图层上的单一要素的方法

deleteOneGraphic: function (graphicLayerName) {        var map = map, oneEvent;       map.setMapCursor("crosshair");        var graphicLayer = new GraphicLayer(map, graphicLayerName);        if (graphicLayer) {            oneEvent = dojo.connect(graphicLayer, "onClick", function (evt) {                map.setMapCursor("default");                graphicLayer.remove(evt.graphic);                dojo.disconnect(oneEvent);            });        }    },

十五、缩放到指定范围

zoomToGeometry: function (xMin, xMax, yMin, yMax) {        var wkid = Robin.Setting.GlobalSetting.wkid;        //起点、终点        var extent = new esri.geometry.Extent(xMin, yMin, xMax, yMax, new esri.SpatialReference({ wkid: wkid }));        Extent(map, extent.expand(3));    }

 

关于传入的参数进行说明:

graphicLayerName:为指定的需要操作的图层名称,根据具体的图层名称方便后期的管理。

symbol:线或者面的填充样式,一般的定义样式如下:

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.6]), 4),                new dojo.Color([0, 255,0 , 0.6]));

传入的point的值是callback中返回的geometry中解析出的: var point = geometry.rings[0];


 

说明:总结仅供参考,有意见保留。


 

转载地址:http://umnsx.baihongyu.com/

你可能感兴趣的文章
Ansible Tower安装配置全过程(上)
查看>>
地址与引用
查看>>
十大开源ERP点评 献给深水区的中小企业和CIO们
查看>>
【PHP】创蓝253云通信平台国际短信接口调用demo案例
查看>>
Confluence 6 重要缓存和监控
查看>>
Day 30 shell 编程
查看>>
静态路由和默认路由
查看>>
谈一谈Spring-Mybatis在多数据源配置上的坑
查看>>
2.1 shell语句
查看>>
【精益生产】车间现场管理的八大浪费
查看>>
springMVC国际化
查看>>
变频电源内部的元器件是有着什么样的发挥和作用
查看>>
关于阿里开发者招聘节 |这5道笔试真题 你会吗!???
查看>>
C#的异常处理机制
查看>>
写给MongoDB开发者的50条建议Tip13
查看>>
vsftp:500 OOPS: could not bind listening IPv4 sock
查看>>
Linux安装BTCPayServer并设置比特币BTC和Lightning支付网关
查看>>
Python 的 with 语句
查看>>
elasticsearch学习——环境搭建2
查看>>
mysql安装,远程连接,以及修改密码
查看>>