ARCGIS API 加载WKT(terraformers工具的使用)

需求场景:从接口获得WKT格式数据,在前端通过ARCGIS JS API呈现到页面。
ARCGIS JS API 无法直接使用WKT格式数据,但通过terraformers工具的转换后可以使用。terraformers是Esri的一个开源项目,参考:https://github.com/Esri/Terraformer,主要作用是可以将wkt转换为geometry。
在这里插入图片描述
直接上代码,为了测试方便,接口数据用测试数据替代,其他引用的模块和地图都来自互联网,复制可直接运行。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <!-- import CSS -->
  <link rel="stylesheet" href="https://js.arcgis.com/3.26/esri/css/esri.css">
  <style>
      html,
      body,
      #map {
        height: 100%;
        width: 100%;
        margin: 0;
        padding: 0;
      }
    </style>
</head>
<body>
  <input type="button" value="" onclick="getMap('point')">
  <input type="button" value="线" onclick="getMap('polyline')">
  <input type="button" value="" onclick="getMap('polygon')">
  <!-- 地图区域 -->
  <div id="map"></div>
</body>
  <script src="https://unpkg.com/terraformer@1.0.8"></script>
  <script src="https://unpkg.com/terraformer-arcgis-parser@1.0.5"></script>
  <script src="https://unpkg.com/terraformer-wkt-parser@1.1.2"></script>
  <script src="https://js.arcgis.com/3.26/"></script>
  <script>
    var map, getMap;
    require([
      "esri/map",
      "esri/layers/ArcGISTiledMapServiceLayer",
      "esri/geometry/Extent",
      "esri/layers/GraphicsLayer",
      "esri/graphic",
      "esri/geometry/Point",
      "esri/geometry/jsonUtils",
      "esri/symbols/SimpleMarkerSymbol",
      "esri/symbols/SimpleLineSymbol",
      "esri/symbols/SimpleFillSymbol",
      "esri/Color",
      "dojo/domReady!"
    ], function(
      Map,
      ArcGISTiledMapServiceLayer,
      Extent,
      GraphicsLayer,
      Graphic,
      Point,
      geometryJsonUtils,
      SimpleMarkerSymbol,
      SimpleLineSymbol,
      SimpleFillSymbol,
      Color
  ) {
    //地图范围
    var mapExtent = new Extent({
      xmax: 113.799760210539,
      xmin: 106.57095767482662,
      ymax: 20.459116202966324,
      ymin: 18.27952992162579,
      spatialReference: {
        wkid: 4326
      }
    })
   
    map = new Map("map", {
      extent: mapExtent,
      sliderStyle: "small",
      logo: false,
    });
 
    map.on('load', function () {
       map.hideZoomSlider()
       map.hidePanArrows()
    })
 
    //arcgis 在线切片底图
    var myTileLayer = new ArcGISTiledMapServiceLayer("http://cache1.arcgisonline.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer", {
      visible: true
    });
    map.addLayer(myTileLayer)

    //绘制图层
    var ghLayer = new GraphicsLayer();
    map.addLayer(ghLayer);

    //WKT格式测试数据
    var wktData = [
      "POINT(110.7692 19.7441)",
      "LINESTRING(110.4025 19.2101,109.9402 18.5681)",
      "POLYGON((110.4235 19.8364,109.7155 19.8026,108.8381 18.9952,109.4193 18.3927))"]

    getMap = function(geoType) {
      var primitive = null
      var symbol = null
      switch (geoType) {
        case "point":
          primitive = Terraformer.WKT.parse(wktData[0]);
          symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 12,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,0,0]), 1),new Color([0,0,255,255]))
          break;
        case "polyline":
          primitive = Terraformer.WKT.parse(wktData[1]);
          symbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,0,0]), 2)
          break;
        case "polygon":
          primitive = Terraformer.WKT.parse(wktData[2]);
          symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,0,0]), 2),new Color([255,255,0,0.25]))
          break;
      }
      var arcgis = Terraformer.ArcGIS.convert(primitive)
      var geometry = geometryJsonUtils.fromJson(arcgis)
      console.log(geometry)
      var gh = new Graphic(geometry,symbol)
      ghLayer.add(gh)
    }    
  })
  </script>
</html>

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值