美文网首页写一个简易的GIS系统
4.在map中绘制一条通道

4.在map中绘制一条通道

作者: Yinawake | 来源:发表于2019-07-25 13:03 被阅读1次
tx4.gif

主要内容是在map中绘制一条线路通道

  1. 添加Draw的style="LineString"
  2. 保存绘制后的数据,重新加载时显示出来。
  3. 为LineString添加显示样式。

注意

本章代码是在之前的代码基础上修改,参照之前的文章。

修改Draw

offlineDrawEqument

    var _type = "LineString";       //Point
    draw = new ol.interaction.Draw({
        source: _vectorSource,
        type: _type 
    });

drawend事件没有改变。

完善样式

/**
 * 添加绘制层的样式
 * @param {Object} p_feature
 */
function drawLayerStyle(p_feature){
    var _feature = p_feature;
    var geometry = _feature.getGeometry();
    var type = geometry.getType();
    var styles = null;
    
    if("LineString" == type) {
        var view = map.getView();
        var projection = view.getProjection();
        var meterPerUnit = projection.getMetersPerUnit();
        var resolution = view.getResolution();
        var _rotation = null;
        
        //线路旋转角度
        geometry.forEachSegment(function(start, end){
            var dx = end[0] - start[0];
            var dy = end[1] - start[1];
            _rotation = (  ( Math.atan2(dy, dx) - Math.PI) * 180) / Math.PI;
        });
        var extent = geometry.getExtent();
        var pointCoord = toCenter(extent);      
        var distance = ol.sphere.getDistance([Math.min(extent[0], extent[2]),Math.min( extent[1], extent[3])],[ Math.max(extent[2],extent[0]), Math.max(extent[1], extent[3])]);
        var scale =  distance / (resolution * meterPerUnit * 32);
        var pixels = distance / (resolution * meterPerUnit);
        
        var num = Math.round(scale) + 1;
        var sep = (1 / num).toFixed(10);
        styles = [];
        
        if(num < 2) {       
            styles.push(new ol.style.Style({        // 与线串的各个子线段对应的样式
                geometry: new ol.geom.Point(geometry.getCoordinateAt(0.5)),
                image: new ol.style.Icon({
                    src: "../meta/07010010.svg",// + img,
                    size: [32, 32],
                    rotateWithView: true,       // 与地图视图一起旋转  设置子线段箭头图标样式的角度
                    rotation: (Math.PI) -  (Math.PI  * _rotation) /  180.0         // 因为角度以顺时针旋转为正值,所以前面添加负号
                }),
            }));        
        } else {
            for(var i = 0; i < num; i++ ){
                var _sep = sep * i; 
                styles.push(new ol.style.Style({        // 与线串的各个子线段对应的样式
                geometry: new ol.geom.Point(geometry.getCoordinateAt( _sep )),
                image: new ol.style.Icon({
                    src: "../meta/07010010.svg",// + img,
                    anchor: [0,0.5],
                    size: [32, 32], 
                    rotateWithView: true,       // 与地图视图一起旋转  设置子线段箭头图标样式的角度
                    rotation: (Math.PI) -  (Math.PI  * _rotation) /  180.0         // 因为角度以顺时针旋转为正值,所以前面添加负号
                }),
            })); 
            }
        }
    } else if("Point" == type) {
        styles = new ol.style.Style({    
            image: new ol.style.Icon({
                src: '../meta/gt/02020071.svg',
                size: [32,32],
            }),
            text: new ol.style.Text({
                text: "11"
            })
        }); 
    }
    
        
    return styles;
}

部分代码已经在之前写过了,就没有重复粘贴。请参见:

  1. 3.保存绘制后的数据,重新进入显示在地图上
  2. 2.绘制点图,并增加样式

相关文章

  • 4.在map中绘制一条通道

    主要内容是在map中绘制一条线路通道 添加Draw的style="LineString" 保存绘制后的数据,重新加...

  • 人类图丨26-44通道

    26-44通道是一条投降的通道,也叫进取的通道。这条通道是属于家族回路群中的意志力回路中的一条通道,也就是说,这条...

  • 人类图|12-22通道

    12-22通道是一条连接情绪中心与喉咙中心的通道,属于觉知回路中的社交人通道,也是个体人回路群中的一条通道。 我们...

  • 颜色转换,利用HSV颜色空间检测

    绘制颜色通道 绘制出这些通道的灰度版本 以便观察各通道的强度,像素越亮 代表的红色、绿色或蓝色值就越高。我们可以看...

  • 2.绘制点图,并增加样式

    主要完成内容 添加绘制层,并添加样式 添加Point draw(交互),完成绘制。 在map初始化之后,调用add...

  • Go基础 - 4 数组,切片,集合,通道

    数组 array 切片 slice 集合 map Map的迭代顺序是随机的 通道 channel 相关阅读 学习笔记

  • 通道抠图

    ctrl+l 色阶 ctrl+i 反相 通道抠像:在通道图层里面绘制出一个蒙版,把该蒙版信息复制到图层中的人像的蒙...

  • 5.在map中绘制一个面

    绘制面 修改Draw方法,设置type为Circle,同时修改geometryFunction为 ol.inte...

  • SDL2游戏开发-tilemap瓦片图渲染

    1.初始化SDL 2.加载map地图 3.添加回调函数 4.声明渲染函数 5.绘制所有层 6.画出渲染图片 7.声...

  • 在Leaflet如何画热图-R

    背景 在绘制地图时候,我们经常会用到热图,Density map,在ggplot2中可根据坐标产生相应的密度图,2...

网友评论

    本文标题:4.在map中绘制一条通道

    本文链接:https://www.haomeiwen.com/subject/srthrctx.html