<!DOCTYPE html>
<html> <head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" href="lib/OpenLayers/ol.css" type="text/css"> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="lib/OpenLayers/ol.js"></script>
<script src="olStyle/Light.js"></script>
<style>
html,
body {
width: 100%;
height: 100%;
margin: 0;
} .map {
width: 100%;
height: 100%;
background: #f6f6f4;
} .ol-scale-line {
/* 比例尺背景颜色 */
background: rgba(0, 60, 136, .7);
} .ol-scale-line-inner {
/* 比例尺边框样式 */
border: 1px solid #eee;
border-top: none;
/* 比例尺文字大小 */
font-size: 10px;
/* 比例尺文字颜色 */
color: #eee;
/* 比例尺宽高为动态计算,若需要固定宽度,将最大最小宽度设置为相同即可 */
min-width: 100px;
max-width: 100px;
}
</style>
</head> <body>
<div id="map" class="map" data-id="11"></div>
<script type="text/javascript">
var map; $(function () { InitMap(); //加载画图
AddDraw();
addInteraction(); }) var layer; //地图初始化
function InitMap() {
//初始化地图
layer = new ol.layer.Vector({
source: new ol.source.Vector(),
overlaps: false,
wrapX: false
}),
style: function (feature, resolution) {
switch (feature.get('layer')) {
case 'poi':
poiStyle.getText().setText(feature.get('name'));
return poiStyle;
case 'boundary': return boundaryStyle;
case 'lawn': return lawnStyle;
case 'road':
roadStyle.getText().setText(feature.get('name'));
return (resolution < 2) ? roadStyle : null;
case 'building':
return buildingStyle(feature, resolution);
case 'other':
otherStyle.getText().setText(feature.get('name'));
return otherStyle;
default: return null;
}
}
}); map = new ol.Map({
layers: [layer],
target: 'map',
view: new ol.View({
center: ol.proj.fromLonLat([120.277, 36.330]),
minZoom: 1,
zoom: 16
})
});
} /*增加显示区域**********************************************************************************/ //设置图形
var typeSelect = "LineString"//Point 点 LineString 线 Polygon 多边形 Circle 圆 Square 正方形 Rectangle 长方形 //添加绘图交互的函数
//var source = new ol.source.Vector({ wrapX: false });
//实例化矢量数据图层
var drawVector; function AddDraw() {
drawVector = new ol.layer.Vector({
//数据源
source: layer.getSource(),
//样式
style: new ol.style.Style({
//样式填充
fill: new ol.style.Fill({
//填充颜色
color: 'rgba(37,241,239,0.2)'
}),
//笔触
stroke: new ol.style.Stroke({
//笔触颜色
color: '#264df6',
//笔触宽度
width: 2
}),
//图形样式,主要适用于点样式
image: new ol.style.Circle({
//半径大小
radius: 7,
//填充
fill: new ol.style.Fill({
//填充颜色
color: '#e81818'
})
})
})
}); map.addLayer(drawVector);
} function addInteraction() { //设置矢量图层的数据源为空
drawVector.setSource(null); //获取当前选择的绘图类型
var value = typeSelect;
//如果当前选择的绘图类型不为"None"的话,则进行相应绘图操作
//如果当前选择的绘图类型为"None"的话,则清空矢量数据源
if (value !== 'None') {
//如果当前的矢量数据源为空的话,则重新创建和设置数据源
//因为当你选择的绘图类型为"None"时,会清空数据源
if (drawVector.getSource() == null) {
drawVector.setSource(new ol.source.Vector({ wrapX: false }));
}
//geometryFunction变量,用来存储绘制图形时的回调函数
//maxPoints变量,用来存储最大的点数量
var geometryFunction, maxPoints;
//如果当前选择的绘图类型是"Square"的话,则将value设置为Circle
//然后调用createRegularPolygon()方法
if (value === 'Square') {
value = 'Circle';
//根据圆来创建一个四边形
geometryFunction = ol.interaction.Draw.createRegularPolygon(4);
}
else if (value === 'Rectangle') {//长方形
//如果当前选择的绘图类型是"Square"的话,则将value设置为LineString
value = 'LineString'; //设置最大点数为2
maxPoints = 2; geometryFunction = function (coordinates, geometry) {
//source.clear(); //如果geometry对象不存在或者为空,则创建
if (!geometry) {
geometry = new ol.geom.Polygon(null);
}
//开始点的坐标
var start = coordinates[0];
//结束点的坐标
var end = coordinates[1];
//根据开始坐标和结束坐标设置绘图点坐标
geometry.setCoordinates([
[start, [start[0], end[1]], end, [end[0], start[1]], start]
]); return geometry;
};
} //将交互绘图对象赋给draw对象
//初始化交互绘图对象
var draw = new ol.interaction.Draw({
//图层数据源
source: drawVector.getSource(),
//绘制类型
type: value,
//回调函数
//Function that is called when a geometry's coordinates are updated
geometryFunction: geometryFunction,
//最大点数
maxPoints: maxPoints
});
//将draw对象添加到map中,然后就可以进行图形绘制了
map.addInteraction(draw); draw.setActive(true);
} //监听开始事件
draw.on('drawstart', function () {
//alert("111");
drawVector.getSource().clear();
}) //获取坐标
draw.on('drawend', function (evt) {
//alert("111");
var feature = evt.feature;
var geometry = feature.getGeometry(); //获取多边形的坐标
//var coordinate = geometry.getCoordinates();
//获取圆的坐标
//var coordinate = geometry.getCenter(); var lnglat = [];
//for(var i =0;i<)
var points = []; //获取坐标
if (typeSelect == "Circle") {
points = geometry.getCenter();
lnglat = ol.proj.transform(points, 'EPSG:3857', 'EPSG:4326');
//radius = circle.getRadius();
console.log(geometry.getRadius());
console.log(lnglat);
} else {
points = geometry.getCoordinates(); for (var i = 0; i < points.length; i++) {
lnglat.push(ol.proj.transform(points[i], 'EPSG:3857', 'EPSG:4326'));
}
} console.log(lnglat);
// console.log(geometry.getCoordinates());
})
} </script>
</body> </html>

  

openlayers画区域的更多相关文章

  1. openlayers画图形返回范围

    //画图形返回圖形的范围 var polygonLayer = new OpenLayers.Layer.Vector("选择范围"); var drawControls = ne ...

  2. openlayers编辑区域

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. openlayers显示区域

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. WPF Canvas 画区域

    有时候需要实现类似于QQ截图那样的选择区域功能,这里的区域可以是一条线,圆,矩形等等 实现原理就是一个Canvas做蒙板,然后canvas的三个事件,MouseLeftButtonDown,Mouse ...

  5. MATLAB之画确定区域内不重合的随机圆

    MATLAB之画确定区域内不重合的随机圆 程序要求:在确定区域内,画互不重合的圆. 知识点: (1)A=p'; 转置运算 (2)ones(a,b)产生a行b列全1数组 (3)rand(a,b)产生a行 ...

  6. 2017年研究生数学建模竞赛-E题 MATLAB 作战区域道路示意图

    MATLAB 画区域作战图 clear load('output_path1.mat') k = 1:130; gplot(edge(k,k),loc(k,:),'c-') title('作战区域道路 ...

  7. 吐槽贴:百度地图 api 封装 的实用功能 [源码下载]

    ZMap 类 功能介绍 ZMap 是学习百度地图 api 接口,开发基本功能后整的一个脚本类,本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐 ...

  8. HTML5 的一些小的整理吧

    主要的就是一些HTML 5 API 的使用 也是借鉴别人的博客 ,和MDN(中文部分的还是能看的懂) 上面的一些东西 具体的代码在 有道云笔记里面也有. 先把总得列出来 1.Canvas绘图 学完这个 ...

  9. [百度地图] ZMap 与 MultiZMap 封装类说明;

    ZMap.js 与 MultiZMap 说明 1. ZMap 与 MultiZMap 都是封装一些地图常用的使用方法,类方法功能大多使用 prototype 原型 实现: ZMap 在一个页面只能使用 ...

随机推荐

  1. ELK:日志收集分析平台

    简介 ELK是一个日志收集分析的平台,它能收集海量的日志,并将其根据字段切割.一来方便供开发查看日志,定位问题:二来可以根据日志进行统计分析,通过其强大的呈现能力,挖掘数据的潜在价值,分析重要指标的趋 ...

  2. oracle面试基础

    . 对于一个存在系统性能的系统,说出你的诊断处理思路 ). 做statspack收集系统相关信息 了解系统大致情况/确定是否存在参数设置不合适的地方/查看top event/查看top sql等 ). ...

  3. 安装python3.7

    首先安装依赖包,centos里面是-devel,如果在ubuntu下安装则要改成-dev,依赖包缺一不可,一步一步复制到终端执行就可以! sudo yum -y groupinstall " ...

  4. HTML,Css,JavaScript之间的关系

    简述HTML,Css,JavaScript 网页设计思路是把网页分成三个层次,即:结构层(HTML).表示层(CSS).行为层(Javascript). 1.HTML(超文本标记语言 Hyper Te ...

  5. redis教程-redis环境搭建安装(qq:1324981084)

    需要整套redis缓存高可用集群教学视频的加qq:1324981084,本套视频从安装到集群的搭建和源码的解析,从零基础讲解. 1.利用命令将redis下载到/usr/local/文件夹下: wget ...

  6. codewars--js--Convert all the cases!

    问题描述: In this kata, you will make a function that converts between camelCase, snake_case, and kebab- ...

  7. HA: Dhanush Vulnhub Walkthrough

    靶机下载链接: https://www.vulnhub.com/entry/ha-dhanush,396/ 主机扫描: 主机端口扫描: HTTP目录爬取 使用dirb dirsearch 爬取均未发现 ...

  8. 【Java】模拟登录教务网并获取数据

    本文章仅做技术交流演示学习,请勿用于违法操作! 前期准备 首先我们需要到要模拟登录的网页,进行抓包操作. 使用Chrome浏览器打开系统的登录页面,按F12打开开发者工具 切换到Network选项卡 ...

  9. Spark应用开发调优要点总结

    调试Spark应用性能的时候,首先应该理解spark是如何工作以及你的spark应用需要何种类型的资源.比如说,机器学习相关的spark应用更依赖cpu计算能力,ETL应用更依赖I/O能力,以此进行有 ...

  10. vue更改数组中的值

    根据下标更改时 vm为新建的vue对象 ind为数组 第一个e为在数组ind中e索引位置 第二个e为更改为值e vm.$set(vm.ind,e,e) 常规更改 arr为数组 //添加 arr.pus ...