美文网首页
四章-44-GeoJSON

四章-44-GeoJSON

作者: 彩云飘过 | 来源:发表于2020-04-07 18:49 被阅读0次

本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers 5.3.x api。

源码 见 1044.html ,对应的 官网示例 https://openlayers.org/en/latest/examples/geojson.html?q=geojson

image.png image.png
<!DOCTYPE html>
<html>

<head>
 <title>geojson</title>
 <link rel="stylesheet" href="../include/ol.css" type="text/css" />
 <script src="../include/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 })
   });

//用颜色来区分各种geometry:点和多点是红色;直线和多线是绿色,多个多边形集合是黄色;单个多边形是蓝色
//geometry集合的颜色是洋红色。
   var styles = {
     'Point': new ol.style.Style({
       image: image
     }),
     'LineString': new ol.style.Style({
       stroke: new ol.style.Stroke({
         color: 'green',
         width: 1
       })
     }),
     'MultiLineString': new ol.style.Style({
       stroke: new ol.style.Stroke({
         color: 'green',
         width: 1
       })
     }),
     'MultiPoint': new ol.style.Style({
       image: image
     }),
     'MultiPolygon': new ol.style.Style({
       stroke: new ol.style.Stroke({
         color: 'yellow',
         width: 1
       }),
       fill: new ol.style.Fill({
         color: 'rgba(255, 255, 0, 0.1)'
       })
     }),
     'Polygon': new ol.style.Style({
       stroke: new ol.style.Stroke({
         color: 'blue',
         lineDash: [4],
         width: 3
       }),
       fill: new ol.style.Fill({
         color: 'rgba(0, 0, 255, 0.1)'
       })
     }),
     'GeometryCollection': new ol.style.Style({
       stroke: new ol.style.Stroke({
         color: 'magenta',
         width: 2
       }),
       fill: new ol.style.Fill({
         color: 'magenta'
       }),
       image: new ol.style.Circle({
         radius: 10,
         fill: null,
         stroke: new ol.style.Stroke({
           color: 'magenta'
         })
       })
     }),
     'Circle': new ol.style.Style({
       stroke: new ol.style.Stroke({
         color: 'red',
         width: 2
       }),
       fill: new ol.style.Fill({
         color: 'rgba(255,0,0,0.2)'
       })
     })
   };

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

   var geojsonObject = {
     'type': 'FeatureCollection',
     'crs': {
       'type': 'name',
       'properties': {
         'name': 'EPSG:3857'
       }
     },
     'features': [{
       'type': 'Feature',
       'geometry': {
         'type': 'Point',
         'coordinates': [0, 0]
       }
     }, {
       'type': 'Feature',
       'geometry': {
         'type': 'LineString',
         'coordinates': [[4e6, -2e6], [8e6, 2e6]]
       }
     }, {
       'type': 'Feature',
       'geometry': {
         'type': 'LineString',
         'coordinates': [[4e6, 2e6], [8e6, -2e6]]
       }
     }, {
       'type': 'Feature',
       'geometry': {
         'type': 'Polygon',
         'coordinates': [[[-5e6, -1e6], [-4e6, 1e6], [-3e6, -1e6]]]
       }
     }, {
       'type': 'Feature',
       'geometry': {
         'type': 'MultiLineString',
         'coordinates': [
           [[-1e6, -7.5e5], [-1e6, 7.5e5]],
           [[1e6, -7.5e5], [1e6, 7.5e5]],
           [[-7.5e5, -1e6], [7.5e5, -1e6]],
           [[-7.5e5, 1e6], [7.5e5, 1e6]]
         ]
       }
     }, {
       'type': 'Feature',
       'geometry': {
         'type': 'MultiPolygon',
         'coordinates': [
           [[[-5e6, 6e6], [-5e6, 8e6], [-3e6, 8e6], [-3e6, 6e6]]],
           [[[-2e6, 6e6], [-2e6, 8e6], [0, 8e6], [0, 6e6]]],
           [[[1e6, 6e6], [1e6, 8e6], [3e6, 8e6], [3e6, 6e6]]]
         ]
       }
     }, {
       'type': 'Feature',
       'geometry': {
         'type': 'GeometryCollection',
         'geometries': [{
           'type': 'LineString',
           'coordinates': [[-5e6, -5e6], [0, -5e6]]
         }, {
           'type': 'Point',
           'coordinates': [4e6, -5e6]
         }, {
           'type': 'Polygon',
           'coordinates': [[[1e6, -6e6], [2e6, -4e6], [3e6, -6e6]]]
         }]
       }
     }]
   };

   var vectorSource = new ol.source.Vector({
     features: (new ol.format.GeoJSON()).readFeatures(geojsonObject)
   });

  //标准的geojson中是没有圆形几何类型的,所以需要用OL的API特殊处理
   vectorSource.addFeature(new ol.Feature(new ol.geom.Circle([5e6, 7e6], 1e6)));

   var vectorLayer = new ol.layer.Vector({
     source: vectorSource,
     style: styleFunction
   });

   var map = new ol.Map({
     layers: [
       new ol.layer.Tile({
         source: new ol.source.OSM()
       }),
       vectorLayer
     ],
     target: 'map',
     view: new ol.View({
       center: [0, 0],
       zoom: 2
     })
   });
   console.log(vectorSource.getFeatures())
 </script>
</body>

</html>

相关文章

网友评论

      本文标题:四章-44-GeoJSON

      本文链接:https://www.haomeiwen.com/subject/yfokuhtx.html