Hello earth(四)——让我们来画Polyline和Polygon吧!
写在前面:越来越水系列o(* ̄︶ ̄*)o,本来应该好好介绍一下KML的DOM,好好梳理一下Google Earth API Utility libraries扩展的API,哎没那个精力,还是就写点儿Demo过了吧!我打算开启下一个系列了(#^.^#),每每回顾一年前的东西都感到头疼,现在手头主要在搞Qt的地图方案了。
还是老规矩,在GepWebBrowser控件中可以通过调用Google Earth API Utility libraries的API,来实现几何类型为Polyline和Polygon的PlaceMarker的绘制,示例代码如下:
bool bounce = false;
bool clockwise = true;Action<int> drawCallback = i => { /* 当你绘制完第i个点时希望后端做点儿什么... */ }
Action finishCallback = () => { /* 当你完成所有点的绘制时希望后端做点儿什么... */ }// 调用前端JS脚本中的GepBeginDrawPolyline方法
var uid = (string)Document.InvokeScript("GepBeginDrawPolyline", new object[] { bounce, clockwise, drawCallback, finishCallback });// 调用前端JS脚本中的GepBeginDrawPolygon方法
var uid = (string)Document.InvokeScript("GepBeginDrawPolygon", new object[] { bounce, clockwise, drawCallback, finishCallback });
再来看看前端JS怎么实现GepBeginDrawPolyline和GepBeginDrawPolygon:
// Polyline Placemark的列表
var polylinePlacemarks = {};
/*** 通过鼠标事件开始绘制多义线* @function* @param {Boolean} bounce 是否开启绘制点的弹跳效果* @param {Boolean} ensureCounterClockwise 是否对点进行逆时针存储* @param {Function} drawCallback 每当绘制一个节点就触发的回调函数,回调参数是节点的数组索引* @param {Function} finishCallback 完成绘制时触发事件(鼠标左键双击或单击起始点形成闭环时)* @return {String} 返回唯一ID*/
function GepBeginDrawPolyline(bounce, ensureCounterClockwise, drawCallback, finishCallback){var id = getUniqueId();polylinePlacemarks[id] = gex.dom.addLineStringPlacemark([], {id: id,style: {line: { width: 2, color: 'red' }}});var lineString = polylinePlacemarks[id].getGeometry();gex.edit.drawLineString(lineString, {bounce: bounce,drawCallback: drawCallback,finishCallback: finishCallback,ensureCounterClockwise: ensureCounterClockwise});return id;
}// Polygon Placemark的列表
var polygonPlacemarks = {};
/*** 通过鼠标事件开始绘制多义面* @function* @param {Boolean} bounce 是否开启绘制点的弹跳效果* @param {Boolean} ensureCounterClockwise 是否对点进行逆时针存储* @param {Function} drawCallback 每当绘制一个节点就触发的回调函数,回调参数是节点的数组索引* @param {Function} finishCallback 完成绘制时触发事件(鼠标左键双击或单击起始点形成闭环时)* @return {String} 返回唯一ID*/
function GepBeginDrawPolygon(bounce, ensureCounterClockwise, drawCallback, finishCallback){var id = getUniqueId();polygonPlacemarks[id] = gex.dom.addPolygonPlacemark([], {id: id,style: {poly: '8000ff00',line: { width: 1, color: 'blue' }}});var lineString = polygonPlacemarks[id].getGeometry().getOuterBoundary();gex.edit.drawLineString(lineString, {bounce: bounce,drawCallback: drawCallback,finishCallback: finishCallback,ensureCounterClockwise: ensureCounterClockwise});return id;
}
和绘制点图标时一样,上面两个函数中的style也可用放到参数列表中去,从后端通过JSon传参的方式传递过来解析。
来看看在谷歌地球上绘制的实际样子:
与此同时,Google Earth API Utility libraries还提供了编辑已有Polyline和Polygon的API。在GepWebBrowser控件中,可以通过如下示例代码实现:
string uid = [PlaceMarker Unique ID] // 前面绘制时返回的唯一ID
Action editCallback = () => { /* 当编辑发生时你想让后端做点儿什么... */ }// 开始编辑Polyline
Document.InvokeScript("GepBeginEditPolyline", new object[] { uid, editCallback });
// 停止编辑Polyline
Document.InvokeScript("GepEndEditPolyline", new object[] { uid });// 开始编辑Polygon
Document.InvokeScript("GepBeginEditPolygon", new object[] { uid, editCallback });
// 停止编辑Polygon
Document.InvokeScript("GepEndEditPolygon", new object[] { uid });
前端JS脚本实现GepBeginEditPolyline、GepEndEditPolyline、GepBeginEditPolygon和GepEndEditPolygon:
/*** 通过鼠标事件编辑指定的多义线* @function* @param {String} id 指定的多义线的ID* @param {Function} editCallback 编辑时触发的回调函数*/
function GepBeginEditPolyline(id, editCallback){if (!polylinePlacemarks[id]) {alert('无法编辑:该要素不存在!');return;}var lineString = polylinePlacemarks[id].getGeometry();gex.edit.editLineString(lineString, {editCallback: editCallback});
}/*** 停止通过鼠标事件编辑指定的多义线* @function* @param {String} id 指定的多义线的ID*/
function GepEndEditPolyline(id){if (polylinePlacemarks.length <= 0)return; var lineString = polylinePlacemarks[id].getGeometry();gex.edit.endEditLineString(lineString);
}/*** 通过鼠标事件编辑指定的多义面* @function* @param {String} id 指定的多义面的ID* @param {Function} editCallback 编辑时触发的回调函数*/
function GepBeginEditPolygon(id, editCallback){if (!polygonPlacemarks[id]) {alert('无法编辑:该要素不存在!');return;}var lineString = polygonPlacemarks[id].getGeometry().getOuterBoundary();gex.edit.editLineString(lineString, {editCallback: editCallback});
}
/*** 停止通过鼠标事件编辑指定的多义面* @function* @param {String} id 指定的多义面的ID*/
function GepEndEditPolygon(id){if (polygonPlacemarks.length <= 0)return; var lineString = polygonPlacemarks[id].getGeometry().getOuterBoundary();gex.edit.endEditLineString(lineString);
}
bingo!
转载于:https://my.oschina.net/HangXiaoZhuOSZone/blog/2966426
Hello earth(四)——让我们来画Polyline和Polygon吧!相关推荐
- polyline与polygon
这几天一直在和数据格式打交道,主要是shp的格式.由于格式限制,整个shp文件不可能有圆弧或者bezier曲线之类的.如果原文件有,可以先构成ellipticalarc或者cicurarc,然后转换到 ...
- 【已解决】leaflet-geoman启用编辑模式时,map上所有(marker、polyline、Polygon等)元素处于编辑状态
文章目录 leaflet-geoman启用编辑模式时,map上所有(marker.polyline.Polygon等)元素处于编辑状态特别影响体验,尤其是使用了L.motion后,由于切割较碎导致数据 ...
- 【CAD二次开发】最完美EntityJig画polyline arc实例
下面是效果图 2021/10/11更新添加可以捕捉拐点的功能 public static class JigCommand{public static void RunBulgePolyJig(str ...
- Silverlight开发历程—(绘制矢量图之Polyline 和 Polygon)
Polyline(多线段) 和 Polygon(多边形) Polyline(多线段) 和 Polygon(多边形)是Silverlight中简单但功能强大的绘图对象.它允许你声明N个Points属性值 ...
- 问题三十二:怎么用ray tracing画多边形(polygon, triangle)
画多边形主要分为两步: 1,光线和多边形所在的平面相交,求得交点: 2,判断交点是否在多边形内: 32.1 光线和多边形所在的平面相交 分别定义光线.多边形和多边形所在平面.光线和平面的方程如下:(注 ...
- Android 高德地图计算 Circle 计算上下左右四个点经纬度,Circle和Polygon是否全部包含,计算地图中点到线的最短距离
/*** 假设地球为一半径为R的表面光滑圆球体,* 表面上同一经线圈上相差1"两点间的距离为 2πR/360/3600* 表面上同一纬线圈上相差1"两点间的距离为 2πR×cos( ...
- python3画直方图出现“Polygon‘ object has no property ‘normed”
直方图原程序 import numpy as np import matplotlib.pyplot as pltnp.random.seed(0) mu,sigma = 100, 20 #均值和标准 ...
- Arcgis for Android在地图上画多边形并进行边长、周长和面积的测量
Arcgis for Android的地图操作里,放大缩小地图.图层切换.定位.测距测面等都是它的一些基本操作,封装后一般调用就是了,很简单.不过最近有了个需求,在地图上画一个多边形时候同时进行多边形 ...
- 荷花用计算机怎么画,怎样画荷花荷叶简笔画
怎样画荷花荷叶简笔画 简笔画是通过目识.心记.手写等活动,提取客观形象最典型.最突出的主要特点,以平面化.程式化的形式和简洁洗练的笔法,表现出既有概括性又有可识性和示意性的绘画.下面是小编搜集的画荷花 ...
最新文章
- 大盘点 | 2020年5篇图像分割算法最佳综述
- jQuery autoComplete 样式
- object references an unsaved transient instance【异常】
- html5表单讲解,HTML5 表单新增元素与属性讲解
- JZOJ 5701. 【gdoi2018 day2】第一题 谈笑风生(magic)
- python读取视频分辨率_Python实现以不同分辨率分类视频
- python中的loop啥意思_python怎么进行loop
- Rabbitmq~对Vhost的配置
- 【实用代码片段】将json数据绑定到html元素 (转)
- 21. 包含min函数的栈(C++版本)
- Drool规则引擎详解(一)
- 平面几何基本知识——学习笔记(2)
- 景观设计常用的SU插件(Sketchup)
- 矩阵的乘法(python、matlab、excel的不同实现方法)
- 制作颜色选择器(全)
- mame 游戏铁钩船长/拳皇97 支持多手柄,电视遥控器~~
- C语言printf函数格式化打印之长整型
- web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开
- 在天翼网关2.0上如何使用自己的路由器
- c++第二次作业-定期存款利息计算器