GIS开发零基础入门:地图操作(附代码)

本文介绍了一个基于OpenLayers的GIS开发实例,详细讲解如何实现地图的放大、缩小、跳转和复位功能。通过引用`include-openlayers-local.js`库,设置地图的缩放等级和中心点,实现地图的基本交互操作。
部署运行你感兴趣的模型镜像

 

示例功能

    本示例在加载了天地图矢量图层以及其注记图层的基础上,添加了地图视图的放大、缩小、跳转以及复位功能。

示例实现

    本示例需要使用 【include-openlayers-local.js】 开发库实现,然后通过 setZoom(zoom)方法设置地图的缩放等级,通过 setCenter(center)方法设置地图中心点。

实现步骤

Step 1. 引用开发库:
    本示例通过本地离线 【include-openlayers-local.js】 脚本引入开发库;

Step 2. 创建地图容器:
    创建id="mapCon"的 div 作为地图容器,并设置其样式;

Step 3. 创建地图对象:
    创建地图对象,设置地图的必要参数,如地图 div 容器、缩放层级、中心点等,添加天地图,具体操作参考互联网地图目录下的天地图示例;

Step 4. 地图放大:
    通过设置地图视图的 Zoom 级别实现地图视图放大功能;

Example:

  //获取地图视图
  var view = map.getView()
  //获得当前缩放级数
  var zoom = view.getZoom()
  //地图放大一级
  view.setZoom(zoom + 1)

Example:

  //获取地图视图
  var view = map.getView()
  //获得当前缩放级数
  var zoom = view.getZoom()
  //地图缩小一级
  view.setZoom(zoom - 1 >= 1 ? zoom - 1 : 1)

Step 6. 地图跳转:
    通过设置地图视图的中心点位置和 Zoom 级别实现地图视图跳转;

Example:

  //获取地图视图
  var view = map.getView()
  var wh = ol.proj.fromLonLat([114, 30])
  //平移地图
  view.setCenter(wh)
  view.setZoom(7)

Step 7. 地图复位:
    通过设置地图视图初始的中心点位置、Zoom 级别和旋转角度实现地图视图复位功能。

Example:

  var view = map.getView()
  //初始中心点
  view.setCenter(center)
  //初始旋转角度
  view.setRotation(rotation)
  //初始缩放级数
  view.setZoom(zoom)

 

关键接口

1.【地图视图类】ol.View

【method】setZoom(zoom):设置地图视图的 Zoom 等级

参数名类型说明
zoomnumber地图缩放等级

【method】setCenter(center):设置地图视图的中心点

参数名类型说明
centercoordinate视图中心点坐标

 完整代码

<!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>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <!--当前示例页面样式表引用-->
    <link rel="stylesheet" href="./static/demo/openlayers/example/style.css" />
    <script include="jquery" src="./static/libs/include-lib-local.js"></script>
    <script src="./static/libs/include-openlayers-local.js"></script>

    <style type="text/css">
        #mapCon {
            width: 100%;
            height: 95%;
            position: absolute;
        }
    </style>

    <script type="text/javascript">
        var map = null;
        var TiandiMap_vect = null;
        var TiandiMap_vectcia = null;
        var tdk = "4c27d6e0e8a90715b23a989d42272fd8";   //天地图密钥

         //地图视图的初始参数
        var view =null;
        var zoom =null;
        var center =null;
        var rotation =null;
        function init() {
            //初始化地图容器
            map = new ol.Map({
                target: 'mapCon',     //地图容器div的ID
                controls: ol.control.defaults({
                    attributionOptions: ({
                        collapsible: true
                    })
                }),
                view: new ol.View({
                    center: [12000000, 4000000],  //地图初始中心点
                    maxZoom: 28,         //最大瓦片显示级数
                    minZoom: 1,          //最小瓦片显示级数
                    zoom: 6,             //地图初始显示级数
                    rotation: Math.PI/6  //设置旋转角度
                })
            });
            
            //加载天地图瓦片图层数据
            TiandiMap_vect = 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=" + tdk,
                        wrapX: false
                    })
            });
            
            TiandiMap_vectcia =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=" + tdk
                    })
            });

            map.addLayer(TiandiMap_vect);
            map.addLayer(TiandiMap_vectcia);
             //地图视图的初始参数
            view = map.getView();
            zoom = view.getZoom();
            center = view.getCenter();
            rotation = view.getRotation();
           
        }
        

        function ZoomIn()
        {
            //获取地图视图
            var view = map.getView();
            //获得当前缩放级数
            var zoom = view.getZoom();
            //地图放大一级   
            view.setZoom(zoom + 1);
            
        }
        function ZoomOut()
        {
            //获取地图视图
            var view = map.getView();
            //获得当前缩放级数
            var zoom = view.getZoom();
            //地图缩小一级   
            view.setZoom(zoom - 1>=1?zoom - 1:1);

        }
        function JumpTo()
        {
            //获取地图视图
            var view = map.getView();
            var wh = ol.proj.fromLonLat([114, 30]);
            //平移地图
            view.setCenter(wh);
            view.setZoom(7);
        }
        function Reset()
        {
            var view = map.getView();
             //初始中心点
            view.setCenter(center);
            //初始旋转角度
            view.setRotation(rotation);
            //初始缩放级数
            view.setZoom(zoom); 
        }
       
        
    </script>
</head>

<body onload="init()">
    <div id="mapCon">
    </div>

    <div id="menuContain" class='menuContain'>
        <div id="tool-container">
         <div id='dataSourceMenuID'  class="optmain"  status="unactive" onclick="switchMenuStatus(this,'menu1')">
             <span></span><i class="menuGroup">视图控制</i><em></em>
         </div>
     </div>
 </div>
 <div id="menu1" class="menuStrip" style='display:none' >
     <ul  class="menuItems">
         <li   onclick="ZoomIn()"><span class="item1"></span><i >放大</i>
         </li>
         <li  onclick="ZoomOut()"><span class="item1"></span><i >缩小</i>
         </li>
         <li  onclick="JumpTo()"><span class="item1"></span><i >跳转</i>
         </li>
         <li class="divider"></li>
         <li onclick="Reset()"><span class="item3"></span><i>复位</i>
         </li>
     </ul>
  </div>
 <script>
    function switchMenuStatus(div, menuitemFrameID) {
        var temDivs = document.getElementsByClassName('optmain');
        if (temDivs.length > 0) {
            for (var i = 0; i < temDivs.length; i++) {
                if (temDivs[i] === div) {
                    var status = div.getAttribute("status");
                    if (status == "unactive") {
                        div.setAttribute("status", "active");
                        var tem_spans = div.getElementsByTagName("span");
                        var tem_ems = div.getElementsByTagName("em");
                        tem_spans[0].className = "active";
                        tem_ems[0].className = "active";

                        //显示菜单项
                        DisplayMenuItem(true, menuitemFrameID);

                    }
                    else {
                        div.setAttribute("status", "unactive");
                        var tem_spans = div.getElementsByTagName("span");
                        var tem_ems = div.getElementsByTagName("em");
                        tem_spans[0].className = "";
                        tem_ems[0].className = "";

                        //隐藏菜单项
                        DisplayMenuItem(false, menuitemFrameID);
                    }
                }
                else {
                    var status = temDivs[i].getAttribute("status");
                    if (status == "active") {
                        temDivs[i].setAttribute("status", "unactive");
                        var tem_spans = temDivs[i].getElementsByTagName("span");
                        var tem_ems = temDivs[i].getElementsByTagName("em");
                        tem_spans[0].className = "";
                        tem_ems[0].className = "";
                    }
                }
            }
        }
    }

    function DisplayMenuItem (isDisplay, iframeID) {
        var menuItemFrame = document.getElementById(iframeID);
        if (menuItemFrame != null) {
            if (isDisplay) {
                var temDivs = document.getElementsByClassName('menuStrip');
                if (temDivs.length > 0) {
                    for (var i = 0; i < temDivs.length; i++) {
                        if (temDivs[i] != menuItemFrame) {
                            temDivs[i].style.display = "none";
                        }
                    }   
                }
                menuItemFrame.style.display = "";
            }
            else {
                menuItemFrame.style.display = "none";
            }
        }
    };
    
 </script>
</body>

</html>

点击领更多学习GIS软件开发内容

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值