首页 > 其他分享 >OpenLayers3,地图探查功能实现

OpenLayers3,地图探查功能实现

时间:2024-08-27 14:50:30浏览次数:11  
标签:探查 OpenLayers3 ol map ctx 地图 var new

文章目录


一、前言

图层探查,即对置于地图下方的图层进行一定范围的探查,以便用户查看到不易察觉的地理地况。本文基于OpenLayers3,实现地图探查的功能。

二、代码实现

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>图层探查功能实现</title>
    <link href="../../libs/ol3/ol.css" rel="stylesheet" type="text/css" />
    <script src="../../libs/ol3/ol.js" type="text/javascript"></script>
</head>
<body>
    <div id="map" class="map" style="width: 100%; height: 95%; position: absolute;">
    </div>
    <script type="text/javascript">
    var tdttk = '***' // 天地图认证tk
        var TiandiMap_vec = new ol.layer.Tile({
            title: "天地图矢量图层",
            source: new ol.source.XYZ({
                url: "http://t0.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=" + tdttk,//parent.TiandituKey()为天地图密钥
                wrapX: false
            })
        });
        var Tianditu_cva = new ol.layer.Tile({
            title: "天地图矢量注记图层",
            source: new ol.source.XYZ({
                url: "http://t0.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=" + tdttk,//parent.TiandituKey()为天地图密钥
                wrapX: false
            })
        });
        var TiandiMap_img = new ol.layer.Tile({
            title: "天地图影像图层",
            source: new ol.source.XYZ({
                url: "http://t0.tianditu.com/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=" + tdttk,//parent.TiandituKey()为天地图密钥
                wrapX: false
            })
        });
        //设置地图容器放置位置
        var container = document.getElementById('map');
        //创建地图容器
        var map = new ol.Map({
            layers: [TiandiMap_img, Tianditu_cva, TiandiMap_vec],
            target: container,
            view: new ol.View({
                center: ol.proj.fromLonLat([-109, 46.5]),
                zoom: 6
            })
        });
        //探查半径
        var radius = 75;
        //添加键盘按下事件监听,用来控制探查范围的大小
        document.addEventListener('keydown', function (evt) {
            if (evt.which == 38) {
                radius = Math.min(radius + 5, 150);
                //map.render();
                evt.preventDefault();
            } else if (evt.which == 40) {
                radius = Math.max(radius - 5, 25);
                map.render();
                evt.preventDefault();
            }
        });

        // 实时得到鼠标的像素位置
        var mousePosition = null;

        container.addEventListener('mousemove', function (event) {
            mousePosition = map.getEventPixel(event);
            map.render();
        });

        container.addEventListener('mouseout', function () {
            mousePosition = null;
            map.render();
        });

        // 在渲染层之前,做剪裁
        TiandiMap_vec.on('precompose', function (event) {
            var ctx = event.context;
            var pixelRatio = event.frameState.pixelRatio;
            ctx.save();
            ctx.beginPath();
            if (mousePosition) {
                //只显示一个围绕着鼠标的圆圈
                ctx.arc(mousePosition[0] * pixelRatio, mousePosition[1] * pixelRatio, radius * pixelRatio, 0, 2 * Math.PI);
                ctx.lineWidth = 5 * pixelRatio;
                ctx.strokeStyle = 'rgba(0,0,0,0.5)';
                ctx.stroke();
            }
            ctx.clip();
        });

        // 呈现层后,恢复画布的背景
        TiandiMap_vec.on('postcompose', function (event) {
            var ctx = event.context;
            ctx.restore();
        });
    </script>
</body>
</html>

在这里插入图片描述

三、总结

以上为基于openlayer3 实现地图探查功能的简单案例,希望对您有帮助~

标签:探查,OpenLayers3,ol,map,ctx,地图,var,new
From: https://blog.csdn.net/qq_28419035/article/details/141603146

相关文章

  • React 高德地图 进京证 (二)
    上回书说到,躲开摄像头的基本功能实现了,但有三个核心问题:(1)速度慢(2)距离远易失败(3)地图限制第一个问题:较为简单,把几千个摄像头按行政区划分好带上编号,在路线分段避让时按片儿计算,综合测试速度提升了50%。//找到每段step途径的letwayDistrictsCamera=[];step.cities.map(city......
  • 如何简单地制作论文中的地图,区域图
    地图在很多论文中都有,但很多都是一整个中国或者某一个省份,但是有时候我们可能只需要呈现某个省份或者国家中的一部分,如下图是广东省潮汕地区三个市的地图。如果想做出下面这样的地图,我们应该怎么制作呢?工具:软件:Arcmap资料:区域划分线文件第一步:准备中国各区域地界数据第......
  • vue2调用高德地图api使用详细案例
      我是主要做java开发的,前台需要使用高德地图集成vue2进行页面展示,所以在第三个案例中,开始的经纬度和结束的经纬度都进行了变量定义且进行了格式优化,如需要后台调用参数,则只需要修改变量的值进行赋值,则可以正常进行开始点和结束点的路程规划以及调用,前台具体的行程信......
  • echarts 地图 显示某一个省的地图,点击可进入市 点击空白可返回上级 - 内蒙古demo
    我这里echarts用的4.5.0官网https://echarts.apache.org/v4/examples/zh/index.html#chart-type-map获取地图json数据工具https://datav.aliyun.com/portal/school/atlas/area_selector<!DOCTYPEhtml><!--获取地图地址--><!--https://datav.aliyun.com/portal/school......
  • 腾讯地图SDK Android版开发 8 覆盖物示例2动画
    腾讯地图SDKAndroid版开发8覆盖物示例2动画动画相关的类和接口帧动画Animation动画Marker接口继承关系Animation接口类及其子接口类AnimationableIAnimationSetTencentMapComponent地图组件接口类Marker动画示例界面布局MapMarkAnimate类常量成员变量初始值创建......
  • vue使用Echarts绘制地图
    1.安装echarts和echarts-map插件npminstallecharts--savenpminstallecharts-map--save2.在组件中引入echarts和echarts-mapimportechartsfrom'echarts'import'echarts/map/js/china'//引入中国地图3.在mounted钩子函数中初始化echarts实例mounted(){......
  • 高德地图SDK Android版开发 8 覆盖物示例2动画
    高德地图SDKAndroid版开发8覆盖物示例2动画前言动画相关的类和接口帧动画MarkerOptionsAnimation动画Animation类及其子类AnimationTranslateAnimationRotateAnimationAlphaAnimationScaleAnimationAnimationSetMarker动画示例界面布局MapMarkAnimate类常量成员变......
  • 自动驾驶轻地图 、无地图、高精度地图
    自动驾驶中的轻地图、无地图和高精度地图各有不同的设计原则和应用特点:1.**轻地图**:通常包含基本的道路信息,如车道线和标志。设计原则是平衡地图精度与存储和计算需求。流程包括生成、更新和维护地图数据。原理是用最简化的数据提供足够的导航支持。测试时主要关注地图数据的......
  • 读取本地图片
    读取本地图片代码实现build.cs添加ImageWrapper模块,使用时注意添加相关头文件PublicDependencyModuleNames.AddRange(newstring[]{"Core","CoreUObject","Engine","InputCore","ImageWrapper"});支持图片类型pngjpgbmpicoexricns......
  • mysql - 根据某经纬度 从区域列表内筛选符合条件的区域. 地图经纬度 坐标筛选
    作者原创.转载请注明来源我有一个区域列表.每个区域都有一堆经纬度坐标集合它们组成一个不规则图形.然后我有个经纬度坐标想筛选出这个坐标属于那个区域.mysql适合做这样的筛选吗?//创建区域坐标表CREATETABLEregions( idINTAUTO_INCREMENTPRIMARYKEY,......