用openlayers实现矢量地图数据的展示

  如果我们有一些矢量数据,如何利用OPENLAYERS将这些数据在网络上进行发布呢?我向大家介绍一下我使用过的两种方法

1.      将数据转换成GEOJSONKML等网络矢量格式,然后用OPENLAYERS在浏览器中进行展示。

2.      GISSERVER发布成OGC服务,然后用OPENLAYERS在浏览器中进行展示。见:

https://blog.csdn.net/qq_35582643/article/details/88661263  https://blog.csdn.net/qq_35582643/article/details/86770349

下面我首先详细讲解第一种方式的具体做法,在后续我们将介绍第二种方式的具体做法。由于国内数据偏移及保密问题,我的测试使用了下载的澳大利亚行政区域的数据,这样可以测试位置叠加是否准确。

1数据格式转换

由于数据处理软件的通用格式一般是MAPINFO(TAB)ARCGIS(SHP),我们拿到的地图数据不会是我们需要的网络矢量格式(GEOJSONKML、GML等),因此我们需要进行格式转换。由于我的获得的数据是SHP格式,因此我需要将其转换为网络的矢量格式,我们这里是GEOJSON。

转换工具见:https://blog.csdn.net/qq_35582643/article/details/85849294

注意:由于原始数据的坐标系是很奇怪的国外的坐标系,我将其统一转换为网络上比较通用的谷歌墨卡托坐标系。

 

数据转换完成后,我们利用OPENLAYERS将转换后的地图数据进行展示,代码如下:

<!DOCTYPE html>
<html>
  <head>
    <title>GeoJSON</title>
    <link rel="stylesheet" href="https://openlayers.org/en/v4.6.4/css/ol.css" type="text/css">
    <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
    <script src="https://openlayers.org/en/v4.6.4/build/ol.js"></script>
  </head>
  <body>
    <div id="map" class="map"></div>
    <script>
      var image = new ol.style.Circle({
        radius: 5,
        fill: null,
        stroke: new ol.style.Stroke({color: 'red', width: 1})
      });

      var styles = {
    	        'MultiPolygon': new ol.style.Style({
    	            stroke: new ol.style.Stroke({
    	              color: 'green',
    	              width: 1
    	            }),
    	            fill: new ol.style.Fill({
    	              color: 'red'
    	            })
    	          })
      };

      var styleFunction = function(feature) {
        return styles[feature.getGeometry().getType()];
      };


      var GeoJsonLayer = new ol.layer.Vector({
          title: 'add Layer',
          source: new ol.source.Vector({
              projection: 'EPSG:3857',
              url: './mapout.geojson',
              format:new ol.format.GeoJSON()
          }),
          style: styleFunction
      });

      var map = new ol.Map({
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
          }),
          GeoJsonLayer
        ],
        target: 'map',
        controls: ol.control.defaults({
          attributionOptions: {
            collapsible: false
          }
        }),
        view: new ol.View({
          center: [0, 0],
          zoom: 2
        })
      });
    </script>
  </body>
</html>

 

 

效果如下:

 

 

  程序中为了体现效果,我叠加了OSM(OPENSTREETMAP)的在线地图。这样如果我们将这个网页在自己建设的网站上进行发布就会非常方便的将我们的矢量数据分享给其它人查看。

   如果您对编程不是很熟悉,您可以使用【WEBGIS前端自动生成工具】:https://blog.csdn.net/qq_35582643/article/details/81868972 来自动生成相应的程序。

如您希望搭建自己的GIS数据服务器来发布共享GIS数据,然后使用OPENLAYERS展示,请参考:

https://blog.csdn.net/qq_35582643/article/details/88661263

https://blog.csdn.net/qq_35582643/article/details/86770349

 

转载自:https://blog.csdn.net/qq_35582643/article/details/79458191

You may also like...