openlayers画区域


<!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>

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM