OpenLayers使用

初学ol,实现了高德地图不同图层的切换、交互性地图飞行以及加载本地JSON数据。

说一下不同图层切换的想法:

1.对于标准地图和卫星地图:二者最初便挂载到map上,两个图层是叠加显示的;当点击按钮时,其实是使用 .setVisible 设置了是否显示。

2.对于行政区划(JSON数据):直接使用 .addLayer 添加到map。

代码:

<script>
        var index = 7
        var data = []
        
        // 定义两个图层 style: 6: veter 7: tile 8: road
        const gaodeLayer1 = new ol.layer.Tile({
            title: "矢量地图",
            source: new ol.source.XYZ({
                url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}',
                wrapX: false
            })
        });

        const gaodeLayer2 = new ol.layer.Tile({
            title: "卫星地图",
            source: new ol.source.XYZ({
                url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=6&x={x}&y={y}&z={z}',
                wrapX: false
            })
        });

        // 加载geojson数据
        var jsonLayer = new ol.layer.Vector({
            title: 'add Layer',
            source: new ol.source.Vector({
                projection: 'EPSG:4326',
                url: "China.json",
                format: new ol.format.GeoJSON()
            }),
            style: new ol.style.Style({
                stroke: new ol.style.Stroke({
                    color: 'red',
                    width: 1,
                }),
            })
        });

        const map = new ol.Map({
            layers: [gaodeLayer2,gaodeLayer1],
            view: new ol.View({
                center: ol.proj.transform([116.48,39.9], 'EPSG:4326', 'EPSG:3857'), 
                projection: 'EPSG:3857',
                zoom: 8,
                minZoom: 1
            }),
            target: 'map'
        });
        
        // 加载控件
        const ZoomToExtent = new ol.control.ZoomToExtent({
            extent:[110, 30, 260, 80]
        })
        map.addControl(ZoomToExtent)
        
        const ZoomSlider = new ol.control.ZoomSlider()
        map.addControl(ZoomSlider)

        const FullScreen = new ol.control.FullScreen()
        map.addControl(FullScreen)
        // 定义地图点击事件
        map.on('click',(evt)=>{
            var position = evt.coordinate
            var XY = ol.proj.transform(position, 'EPSG:3857', 'EPSG:4326')
            // console.log(XY)
            alert(XY.map(x => parseFloat(x.toFixed(2))))
        })
        // 定义图层切换
        function ChangeMap(t){            
            if (t){
                gaodeLayer2.setVisible(true)
                gaodeLayer1.setVisible(false)
            }else{
                gaodeLayer1.setVisible(true)
                gaodeLayer2.setVisible(false)
            }
            
        }
        // 定义查询并且执行飞行
        function Search(){
            var point = document.getElementById('input').value;
            data.push(point)
            // console.log(data)
            map.getView().animate({
                center: ol.proj.transform(data[data.length - 1].split(","), 'EPSG:4326', 'EPSG:3857'),
                zoom: 10
            })
            document.getElementById('input').value = ''
        }
        // 定义添加JSON图层
        function addJson(){
            map.addLayer(jsonLayer);
        }
        
        
</script>

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 23:48:04       6 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 23:48:04       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 23:48:04       4 阅读
  4. Python语言-面向对象

    2024-07-10 23:48:04       8 阅读

热门阅读

  1. 【创作纪念日】我的三周年创作纪念日

    2024-07-10 23:48:04       12 阅读
  2. Github 2024-07-07 开源项目日报 Top10

    2024-07-10 23:48:04       12 阅读
  3. 部署LVS-DR群集

    2024-07-10 23:48:04       9 阅读
  4. python的列表推导式

    2024-07-10 23:48:04       12 阅读
  5. pip常用命令详解

    2024-07-10 23:48:04       8 阅读
  6. 相机、镜头基础知识及硬件选型介绍

    2024-07-10 23:48:04       8 阅读
  7. 文心一言指令:快速入门手册

    2024-07-10 23:48:04       11 阅读