OpenLayers - Vector绘制地图省市区(十)

简介

本文讲解经常在开发中出现的功能,绘制地图省市区。主要使用Vector图层通过绘制多边行的方法,绘制出省市区的多边行,把该图层添加到地图图层上,就实现了绘制省市区图形。

Vector

  • 矢量图层: 在客户端呈现的矢量数据。构成一个矢量图层需要一个数据源(source)和一个样式(style),数据源构成矢量图层的要素,样式规定要素显示的方式和外观。一个矢量图层包含一个到多个要素(feature),每个要素由地理属(geometry)和其他属性组成。
  • 常用于从数据库中请求数据,接受数据,并将接收的数据解析成图层上的信息。如将鼠标移动到中国,相应的区域会以红色高亮显示出来,高亮便是矢量图层的行为。

绘制省市区

初始化地图

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <style type="text/css">
    .map {
      height: 500px;
      width: 100%;
    }
  </style>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.6.1/css/ol.css" />
  <script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.6.1/build/ol.js"></script>
  <body>
    <div id="map" class="map"></div>
  </body>
  <script>
    var map = new ol.Map({
      target: 'map'
    })

    // 图层
    var layerTile = new ol.layer.Tile({
      source: new ol.source.XYZ({
        url: 'https://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}'
      })
    })
    // 视图
    var view = new ol.View({
      center: ol.proj.fromLonLat([130.41, 28.82]),
      zoom: 4
    })

    map.setView(view)
    map.addLayer(layerTile)
  </script>
</html>

组装数据源

image.png

  • 得到数据后第一步组装数据。直接下载下来的数据是对象格式的。由于我们需要同时绘制多个省市区,这里创建一个数组把每个数据加入进去。
var geo = [{...上海市.json},{...重庆市.json}]

绘制图层

    // 设置图层
    var areaLayer = new ol.layer.Vector({
      source: new ol.source.Vector({
        features: []
      })
    })
    // 添加图层
    map.addLayer(areaLayer)

    let areaFeature = []
    geo.forEach((g) => {
      var areaFeatureTem = null
      let lineData = g.features[0]
      if (lineData.geometry.type == 'MultiPolygon') {
        areaFeatureTem = new ol.Feature({
          geometry: new ol.geom.MultiPolygon(lineData.geometry.coordinates).transform('EPSG:4326', 'EPSG:3857')
        })
      } else if (lineData.geometry.type == 'Polygon') {
        areaFeatureTem = new ol.Feature({
          geometry: new ol.geom.Polygon(lineData.geometry.coordinates).transform('EPSG:4326', 'EPSG:3857')
        })
      }
      areaFeatureTem.setStyle(
        new ol.style.Style({
          fill: new ol.style.Fill({ color: '#4e98f444' }),
          stroke: new ol.style.Stroke({
            width: 3,
            color: [71, 137, 227, 1]
          })
        })
      )
      areaFeature.push(areaFeatureTem)
    })

    // 加入组装好的数据
    areaLayer.getSource().addFeatures([...areaFeature])
  • 先创建图层,然后创建要素。多边行在要素中主要分为两种,MultiPolygonPolygon,都是表示多边行的。不同的是MultiPolygon数据格式是4维数组,Polygon是3维数组。最后把创建好的要素放入图层中。

image.png

总结

矢量图层就是通过很多坐标点来绘制图形,除了绘制省市区也可以通过他来绘制扇形、圆形等。与交互事件联合使用可以实现,自定义绘图、省市区高亮显示等。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenLayers 是一个开源的 JavaScript 库,用于在 Web 地图上进行地理数据的展示和交互。它提供了丰富的功能和工具,可以帮助用户在地图上进行各种地理信息的绘制和编辑。其中,绘制圆是 OpenLayers 中常用的功能之一。 要在 OpenLayers 中绘制一个圆,首先需要创建一个用于绘图的矢量图层,并将其添加到地图上。然后,需要实例化一个绘制器对象,并指定绘制的几何类型为圆形。 接着,需要设置一些绘制的样式,比如圆的填充颜色、边框颜色和宽度等。可以根据需求来定制圆的样式,以便区分不同的图形。 当准备好了绘制环境后,用户可以在地图上点击并拖动鼠标来绘制一个圆。在绘制的过程中,可以通过监听事件来实时更新圆的位置和大小,以及实现一些交互效果,比如显示圆的半径和面积等信息。 最后,当用户完成绘制后,可以将绘制的圆保存到数据库或者进行其他操作。同时,可以实现对已经绘制的圆进行编辑和删除等功能,以便用户进行地理信息的管理和维护。 总之,OpenLayers 提供了丰富的绘制工具和功能,用户可以通过简单的几行代码就可以实现在地图上绘制和编辑各种地理信息,包括圆形。这些功能为地理信息系统和地图应用的开发者提供了非常便利和强大的工具,可以帮助他们快速开发出功能丰富的 Web 地图应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值