如何用OpenLayers画扇形

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用OpenLayers画扇形相关的知识,希望对你有一定的参考价值。

《WebGIS之OpenLayers全面解析》是第一本全面介绍Openlayers3的中文专业书籍,于2016年7月由电子工业出版社出版,并已登录淘宝、京东、当当等网络商城。
书籍内容简介:
OpenLayers作为业内使用最为广泛的地图引擎之一,已被各大GIS厂商和广大WebGIS二次开发者采用。借助OpenLayers强大的扩展功能,可以实现与各个不同的WebGIS平台产品相结合,开发出各具特色的WebGIS应用系统。 本书主要内容涵盖:WebGIS开发基础、OpenLayers开发基础、OpenLayers快速入门、OpenLayers之多源数据加载、OpenLayers之图形绘制、OpenLayers之OGC、OpenLayers之高级功能,最后给出了OpenLayers之项目实战――水利信息在线分析服务系统。Openlayers功能全且具有强大的可扩展性,使用javascript语言,支持html5新特性,不依赖任何浏览器插件,是目前GIS领域使用最为广泛的开源WebGIS开发库。本书一共由9个章节内容组成,提供近百个程序实例,基本涵盖了WebGIS开发中的全部功能,可使读者迅速入门并掌握WebGIS和Openlayers开发,提高基础知识学习效率和系统开发效率。读者只需要将书中的示例稍加改动,便可快速的将其移植到具体的WebGIS应用中。本书具体内容安排如下:
第一章 概述:介绍了什么是WebGIS,并对目前常见的开源WebGIS软件进行了介绍。
第二章 WebGIS开发基础:对WebGIS开发涉及到的各种基础开发知识进行了讲解,指导读者快速入门WebGIS。
第三章 Openlayers开发基础:对Openlayers Javascript开发库的框架设计、API组成和开发调试方式进行了讲解,指导读者快速了解Openlayers。
第四章 Openlayers快速入门:对Openlayers中提供的常用的10个控件的二次开发进行了讲解,指导读者快速开发出一个简单的网络地图应用。
第五章 Openlayers之多源数据展示篇:通过丰富的示例讲解了Openlayers中如何显示来自各种网络地图服务商提供的地图数据,指导读者实现各种网络地图、KML、GPX、GeoJSON等开放数据源的叠加显示。
第六章 Openlayers之图形绘制篇:本章重点讲解了WebGIS应用中常用的点、线、矩形、多边形、圆等浏览器客户端的图形绘制功能,指导读者开发出各种鼠标交互图形绘制功能。
第七章 Openlayers之OGC篇:对Openlayers中如何加载WMS、WMTS、WFS、WCS图层进行了示例讲解,指导读者快速掌握OGC服务数据的对接。
第八章 Openlayers之高级功能篇:对Openlayers中投影、热区、聚合标注、热点图、统计图、标绘等高级功能进行了示例讲解,指导读者快速高效地开发高级WebGIS功能。
第九章 Openlayers之项目实战:结合一个具体的项目需求进行开发实战,配以详细的程序示例,讲解如何将Openlayers中的常用功能应用到项目实践中,指导读者基于前面章节中的Openlayers开发知识进行WebGIS系统开发。
本书可用于开设GIS专业的各大院校作为网络GIS课程的教材和教辅参考书,本书迎合WebGIS客户端开发技术的趋势和读者需求,适时推出本书,可作为学习WebGIS和Openlayers的入门及高级应用教材,也可供GIS领域科研工作者、高校师生及IT技术人员作为技术参考书。
参考技术A ol3的:
/**
* 创建扇形
* @param [x,y] center 扇形中心点
* @param number randius 扇形半径 与中心点对应的坐标系单位
* @param number sAngle 扇形起始边与X轴正方向夹角°
* @param number angle 圆心角°(逆时针方向为正)
* @returns ol.geom.MultiLineString
* @constructor
*/
ol.geom.Sector = function (center, randius, sAngle, angle)
sAngle = (360 - sAngle + 90) % 360;
var lines = [];
var s = false;
var sp = center;
var ep = null;
for (var i = 0; i <= angle; i += 0.5)
var x = center[0] + randius * Math.cos(degreeToRadian(sAngle + i));
var y = center[1] + randius * Math.sin(degreeToRadian(sAngle + i));
if (s)
sp = [x, y];
s = !s;
else
ep = [x, y];
lines.push([sp, ep]);
sp = ep;


if (sp != null && angle != 360) lines.push([sp, center]);
return new ol.geom.MultiLineString(lines);
;

var degreeToRadian = function (degree)
return Math.PI * degree / 180;
;

openlayers3 画扇形

参考了http://www.cnblogs.com/lingxue3769/archive/2011/11/01/2231409.html同学的博客

百度知道https://zhidao.baidu.com/question/244106942859229564.html同学的回复

我这边修改了下根据点来画

/**
* 创建扇形
* @param [x,y] center 扇形中心点
* @param number randius 扇形半径 与中心点对应的坐标系单位
* @param number sAngle 扇形起始边与X轴正方向夹角°
* @param number angle 圆心角°(逆时针方向为正)
* @returns {ol.geom.Polygon}
* @constructor
*/
ol.geom.Sector = function (center, randius, sAngle, angle) {
    sAngle = (360 - sAngle + 90) % 360;
    var points = [];
    points.push(center);
    var ep = null;
    for (var i = 0; i <= angle; ++i) {
        var x = center[0] + randius * Math.cos(degreeToRadian(sAngle + i));
        var y = center[1] + randius * Math.sin(degreeToRadian(sAngle + i));
        points.push([x, y]);
    }
    points.push(center);
    return new ol.geom.Polygon([points]);
};

var degreeToRadian = function (degree) {
    return Math.PI * degree / 180;
};

 

以上是关于如何用OpenLayers画扇形的主要内容,如果未能解决你的问题,请参考以下文章

openlayer 一条line 切分成若干小段 并且画上方向

如何用css3实现一个扇形?

openscales 怎样把点标出来的同时以点为中心画一个圆或者以这个点为顶点画一个扇形,方向可以调

vue openlayer聚合是啥意思

d3.js,openlayer,Leaflet或其他,哪些适合Web GIS的开发?

openlayer 的用法