openlayers学习——13、openlayers比例尺

openlayers比例尺

前言:基于Vue,学习openlayers,根据官网demo,记录常用功能写法。
     本人不是专业GIS开发,只是记录,方便后续查找。

参考资料:
openlayers官网:https://openlayers.org/
geojson下载网站:https://datav.aliyun.com/portal/school/atlas/area_selector
地图坐标拾取网站:https://api.map.baidu.com/lbsapi/getpoint/index.html

openlayers核心:Map对象、View视图、Layer图层、Source来源、Feature特征等

需要引入和包

// 这里就不一点点删了,按需引入即可
import GeoJSON from 'ol/format/GeoJSON'
import Feature from 'ol/Feature'
import { Point, Circle as CircleGeo, LineString, Polygon } from 'ol/geom'
import VectorSource from 'ol/source/Vector'
import Cluster from 'ol/source/Cluster'
import TileArcGISRest from 'ol/source/TileArcGISRest'
import { Fill, Stroke, Style, Icon, Circle, Text } from 'ol/style'
import { Vector as VectorLayer, Tile } from 'ol/layer'
import { Draw } from 'ol/interaction'
import { boundingExtent, getCenter } from 'ol/extent'
import Overlay from 'ol/Overlay'
import { getArea, getLength } from 'ol/sphere'
import { unByKey } from 'ol/Observable'
import { MousePosition, ScaleLine } from 'ol/control'
import { createStringXY } from 'ol/coordinate'

两种方式
1、使用地图控件方式ScaleLine,但不精确(也可能我没有找到精确地方式)
2、监听地图分辨率,配合公式动态计算

比例尺DOM

<span id="scaleWrapper" style="display: none">
  比例尺(km)&nbsp;1:&nbsp;
  <span id="scale" style="display: inline-block" />
</span>

1、ScaleLine方式

// 添加比例尺
// 官网关于比例尺demo:https://openlayers.org/en/latest/examples/scale-line.html
addScale () {
  document.getElementById('scaleWrapper').style.display = 'inline-block'
  this.scaleControl = new ScaleLine({
    Units: 'metric', // 单位有5种:degrees imperial us nautical metric
    target: document.getElementById('scale') // 显示比例尺的Dom
  })
  // 添加控件到地图
  this.map.addControl(this.scaleControl)
},
// 取消比例尺
removeScale () {
  document.getElementById('scaleWrapper').style.display = 'none'
  if (this.scaleControl) {
    // 移除控件
    this.map.removeControl(this.scaleControl)
    this.scaleControl = null
  }
}

效果如下
在这里插入图片描述
2、监听分辨率方式

// 添加比例尺
// 计算的公式详解请参考大佬博文:https://segmentfault.com/a/1190000019169455?utm_source=tag-newest
addScale () {
  document.getElementById('scaleWrapper').style.display = 'inline-block'
  // 监听分辨率变化,通过dpi和像素关系(比例尺=dpi/0.0254*分辨率)输出比例尺
  document.getElementById('scale').innerHTML = (this.map.getView().getResolution() * 3779.5275590551).toFixed(4)
  // 重点监听View的resolution改变
  this.map.getView().on('change:resolution', this.viewChange)
},
// 取消比例尺
removeScale () {
  document.getElementById('scaleWrapper').style.display = 'none'
  this.map.getView().un('change:resolution', this.viewChange)
},
// 视图监听
viewChange () {
  document.getElementById('scale').innerHTML = (this.map.getView().getResolution() * 3779.5275590551).toFixed(4)// 这里使用了View中的getResolution方法获得当前View的分辨率。
}

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenLayers中,比例尺是通过计算视图中心点的分辨率来得到的。在构造ol.control.ScaleLine对象时,会动态创建一个包含比例尺信息的div元素。比例尺的具体显示内容和样式可以通过设置相应的CSS来控制。在OpenLayers地图中添加比例尺控件时,需要在HTML页面中创建一个用于作为比例尺容器的div标签,并将其与地图容器一同放置在body中。通过合理设置比例尺容器的样式,可以使比例尺在地图上显示为期望的位置和样式。根据地图视图的设置和当前地图缩放级别,OpenLayers会自动计算并更新比例尺的显示值和样式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [openlayers比例尺的计算原理](https://blog.csdn.net/u013240519/article/details/84136793)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Openlayers学习之地图比例尺控件](https://download.csdn.net/download/weixin_38660051/14663633)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值