p{
text-align:center;
}
blockquote > p > span{
text-align:center;
font-size: 18px; color: #ff0000;
}

-->

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];


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


Arcgis for js开发之直线、圆、箭头、多边形、集结地等绘制方法的更多相关文章

  1. arcgis for js开发之路径分析

    arcgis for js开发之路径分析 //方法封装 function routeplan(x1, x2, y1, y2, barrierPathArray, isDraw, callback) { ...

  2. 3、ObjectARX开发创建直线、圆、圆弧和修改对象属性

    一.本节课程 Arx二次开发创建直线.圆.圆弧和修改对象属性 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建直线. 2.如何应用C++ ARX二次开发创建圆. 3.如何应用C++ AR ...

  3. arcgis for js学习之Draw类

    arcgis for js学习之Draw类 <!DOCTYPE html> <html> <head> <meta http-equiv="Cont ...

  4. Arcgis Javascript API 开发笔记

    JS API3.4的要求 à(1)  IE9或以上版本 否则dijit1.8.3不匹配 1.如何发布ArcgisJavascript API应用 0.准备工作: (1).有web应用: (2).有js ...

  5. JS开发HTML5游戏《神奇的六边形》(四)

    近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...

  6. Arcgis for Js之加载wms服务

    概述:本节讲述Arcgis for Js加载ArcgisServer和GeoServer发布的wms服务. 1.定义resourceInfo var resourceInfo = { extent: ...

  7. 手把手教你学node之搭建node.js开发环境

    搭建node.js开发环境 本文只针对在Linux或者Mac下面.至于使用 Windows 并坚持玩新技术的同学,我坚信他们一定有着过人的.甚至是不可告人的兼容性 bug 处理能力,所以这部分同学麻烦 ...

  8. 一个关于原生 js 开发一款插件的前端教程

    教程链接: http://www.codeasily.net/course/plugin_course/ 写的不是很好,前面比较松后面比较急,请大家见谅,本人也没多少年前端经验,拿以前写过的教程网站, ...

  9. WebAppBuilder独立于Portal之arcgis for js应用框架研究

    1.前言 最近在做项目过程中,用到了WAB,先做一下总结和归类.Webappbuilder(简称WAB)是运行在portal或者online的一款webGIS开发应用程序,其代码开源并且具有优秀的设计 ...

随机推荐

  1. NeuChar 平台使用及开发教程(五):使用 NeuChar 的关键字回复服务

    在上一篇<NeuChar 平台使用及开发教程(四):使用 NeuChar 的素材服务>中,我们已经完成了素材的添加,下面,让我们来设置一个关键字回复,并同步到应设置好Neural Endi ...

  2. [Swift]LeetCode322. 零钱兑换 | Coin Change

    You are given coins of different denominations and a total amount of money amount. Write a function ...

  3. [Swift]LeetCode390. 消除游戏 | Elimination Game

    There is a list of sorted integers from 1 to n. Starting from left to right, remove the first number ...

  4. [Swift]LeetCode902. 最大为 N 的数字组合 | Numbers At Most N Given Digit Set

    We have a sorted set of digits D, a non-empty subset of {'1','2','3','4','5','6','7','8','9'}.  (Not ...

  5. eclipse neon 发布

    2016年6月28日,Eclipse基金会宣布发布Eclipse Neon,这个版本的IDE支持Java.JavaScript.C/C++.PHP和Fortran等多种编程语言.这一次的发布集成了77 ...

  6. C# 多线程学习笔记 - 3

    本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段. 遵循原作者的 CC 3.0 协议. 如果想要了解更加详细的文章信息内容,请访问下列地址进行学习. 原文章地 ...

  7. SpringBoot+MyBatis+MySQL读写分离

    1.  引言 读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做.因此,一般来讲,读写分离有两种实现方式.第一种是依 ...

  8. 【Discuz】关于出现“对不起,您安装的不是正版应用..”的解决方法

    使用Discuz!建站的站长都会遇到这样的问题:有些插件和风格在安装时出现不能安装的现象,出现以下提示: 不起,您安装的不是正版应用,安装程序无法继续执行 点击这里安装正版应用 针对这一情况,本人从网 ...

  9. CentOS 7 安装 Jenkins

    准备工作 首选需要安装JAVA环境 https://www.cnblogs.com/stulzq/p/9286878.html 如果你的系统没有自带git,那么也需要安装一个 yum install ...

  10. HttpClientFactory与Steeltoe结合来完成服务发现

    前言 上一篇说了一下用HttpClientFactory实现了简单的熔断降级. 这篇就来简单说说用HttpClientFactory来实现服务发现.由于标题已经好明显的说了Steeltoe 因此这里会 ...