//创建一个WGS84球体对象
var wgs84Sphere = new ol.Sphere(6378137);
//创建一个当前要绘制的对象
var sketch = new ol.Feature();
//创建一个帮助提示框对象
var helpTooltipElement;
//创建一个帮助提示信息对象
var helpTooltip;
//创建一个测量提示框对象
var measureTooltipElement;
//创建一个测量提示信息对象
var measureTooltip;
//继续绘制多边形的提示信息
var continuePolygonMsg = '单击可继续绘制多边形,双击完成绘制';
//继续绘制线段的提示信息
var continueLineMsg = '单击可继续绘制多边形,双击完成绘制';
//格式化测量长度
function (line) {
var coordinates = line.getCoordinates();//获取坐标串
var length = 0;//定义长度变量
var sourceProj = map.getView().getProjection(); //获取源数据的坐标系
for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
var c1 = ol.proj.transform(coordinates[i], sourceProj, 'EPSG:4326');//第一个点
var c2 = ol.proj.transform(coordinates[i + 1], sourceProj, 'EPSG:4326');//第二个点
length += wgs84Sphere.haversineDistance(c1, c2);//获取转换后的球面距离
}
var output;
if (length > 100) {
output = (Math.round(length / 1000 * 100) / 100) +
' ' + 'km';
} else {
output = (Math.round(length * 100) / 100) +
' ' + 'm';
}
return output;
};
//格式化测量长度
function (polygon) {
var sourceProj = map.getView().getProjection(); //获取初始坐标系
var geom = /** @type {ol.geom.Polygon} */(polygon.clone().transform(
sourceProj, 'EPSG:4326'));
var coordinates = geom.getLinearRing(0).getCoordinates();
coords = coordinates;
var area = Math.abs(wgs84Sphere.geodesicArea(coordinates));
var output;
if (area > 10000) {
output = (Math.round(area / 1000000 * 100) / 100) +
' ' + 'km2';
} else {
output = (Math.round(area * 100) / 100) +
' ' + 'm2';
}
return output;
};
//添加交互式绘图对象的函数
function addInteraction(type) {
//创建一个交互式绘图对象
draw = new ol.interaction.Draw({
//绘制的数据源
source: source,
//绘制类型
type: (type),
//样式
style: new ol.style.Style({
fill: new ol.style.Fill({
color: 'yellow'
}),
stroke: new ol.style.Stroke({
color: 'rgb(0,0,255)',
lineDash: [10, 10],
width: 2
}),
image: new ol.style.Circle({
radius: 5,
stroke: new ol.style.Stroke({
color: 'red '
}),
fill: new ol.style.Fill({
color: 'rgba(255, 255, 255, 1)'
})
})
})
});
};
//创建帮助提示框
function createHelpTooltip() {
//如果已经存在帮助提示框则移除
if (helpTooltipElement) {
helpTooltipElement.parentNode.removeChild(helpTooltipElement);
}
//创建帮助提示要素的div
helpTooltipElement = document.createElement('div');
//设置帮助提示要素的样式
helpTooltipElement.className = 'tooltip hidden';
helpTooltipElement.style.color = 'black';
//创建一个帮助提示的覆盖标注
helpTooltip = new ol.Overlay({
element: helpTooltipElement,
offset: [5, 0],
positioning: 'top-left'
});
map.addOverlay(helpTooltip);
}
//创建测量提示框
function createMeasureTooltip() {
if (measureTooltipElement) {
measureTooltipElement.parentNode.removeChild(measureTooltipElement);
}
measureTooltipElement = document.createElement('div');
measureTooltipElement.className = 'tooltip tooltip-measure';
measureTooltipElement.style.color = 'black';
measureTooltip = new ol.Overlay({
element: measureTooltipElement,
offset: [0, 10],
positioning: 'top-left'
});
map.addOverlay(measureTooltip);
}