UNPKG

@mapgis/webclient-leaflet-plugin

Version:

1,907 lines 111 kB

<!DOCTYPE html>
<html lang="en">

<head>
  
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title> common/service/Utils.js</title>
  <!--[if lt IE 9]>
    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  <![endif]-->
  <link type="text/css" rel="stylesheet" href="styles/app.min.css">
  <link type="text/css" rel="stylesheet" href="styles/iframe.css">
  <link type="text/css" rel="stylesheet" href="">

  
</head>



<body class="layout small-header">
    <div id="stickyNavbarOverlay"></div>
    

<div class="top-nav">
    <div class="inner">
        <a id="hamburger" role="button" class="navbar-burger" aria-label="menu" aria-expanded="false">
            <span aria-hidden="true"></span>
            <span aria-hidden="true"></span>
            <span aria-hidden="true"></span>
        </a>
        <div class="logo">
            
                <h1> MapGIS Client for JavaScript API</h1>
            
            
        </div>
        <div class="menu">
            
            <div class="navigation">
                
                    
                        <a
                            class="link user-link "
                            href="/docs/cesium/index.html"
                        >
                            Cesium
                        </a>
                    
                        <a
                            class="link user-link "
                            href="/docs/mapboxgl/index.html"
                        >
                            MapboxGL
                        </a>
                    
                        <a
                            class="link user-link "
                            href="/docs/leaflet/index.html"
                        >
                            Leaflet
                        </a>
                    
                        <a
                            class="link user-link "
                            href="/docs/openlayers/index.html"
                        >
                            OpenLayers
                        </a>
                    
                

            </div>
        </div>
    </div>
</div>

    <div id="main">
        <div
            class="sidebar "
            id="sidebarNav"
        >
            <div>
                <span class="mapgis-api-document-span"><a href="index.html">API文档</a></span>
            </div>
            
                <div class="search-wrapper">
                    <input id="search" type="text" placeholder="搜索文档..." class="input">
                </div>
            
            <nav>
                
                    <div class="category"><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">服务模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="AddressServer.html">AddressServer</a><span style="display: none;"><p>地址服务,基地址:/igs/rest/services/{folder}/{serviceName}/AddressServer</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ArcGISFeatureServer.html">ArcGISFeatureServer</a><span style="display: none;"><p>ArcGIS的FeatureServer服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ArcGISGeometryServer.html">ArcGISGeometryServer</a><span style="display: none;"><p>ArcGIS的GeometryServer服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ArcGISMapServer.html">ArcGISMapServer</a><span style="display: none;"><p>ArcGIS的MapServer服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ArcGISVectorTileServer.html">ArcGISVectorTileServer</a><span style="display: none;"><p>ArcGIS的VectorTileServer服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="BaseServer.html">BaseServer</a><span style="display: none;"><p>服务查询基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Cesium3DTilesServer.html">Cesium3DTilesServer</a><span style="display: none;"><p>3DTiles服务,基地址:/igs/rest/services/{folder}/{serviceName}/3DTilesServer</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Config.html">Config</a><span style="display: none;"><p>全局配置信息<br/>
示例如下:<br/>
<a href='#config1'>[1、设置全局token]</a><br/>
<a href='#config2'>[2、设置全局headers]</a><br/>
<a href='#config3'>[3、设置拦截器 - 在所有链接上设置拦截器]</a><br/>
<a href='#config4'>[4、设置拦截器 - 指定拦截器应用的url]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="FeatureServer.html">FeatureServer</a><span style="display: none;"><p>要素服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="GeometryServer.html">GeometryServer</a><span style="display: none;"><p>地理几何服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ImageServer.html">ImageServer</a><span style="display: none;"><p>影像服务,服务地址:/igs/rest/services/{folder}/{serviceName}/ImageServer</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Interceptor.html">Interceptor</a><span style="display: none;"><p>请求拦截和相应拦截器参数</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="M3DServer.html">M3DServer</a><span style="display: none;"><p>M3d服务,服务地址:/igs/rest/services/{folder}/{serviceName}/M3dServer</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="MapServer.html">MapServer</a><span style="display: none;"><p>地图服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="PlotServer.html">PlotServer</a><span style="display: none;"><p>标绘服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="PoiServer.html">PoiServer</a><span style="display: none;"><p>兴趣点服务,服务地址:/igs/rest/services/{folder}/{serviceName}/PoiServer</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="RequestConfig.html">RequestConfig</a><span style="display: none;"><p>请求配置参数</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="RequestInterceptor.html">RequestInterceptor</a><span style="display: none;"><p>请求拦截器对象</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ResourceServer.html">ResourceServer</a><span style="display: none;"><p>资源服务,基地址为http://{ip}:{port}/igs/rest/services/system/ResourceServer</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ResponseInterceptor.html">ResponseInterceptor</a><span style="display: none;"><p>响应拦截器对象</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="RootServer.html">RootServer</a><span style="display: none;"><p>根目录服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SceneServer.html">SceneServer</a><span style="display: none;"><p>场景服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SecurityServer.html">SecurityServer</a><span style="display: none;"><p>安全服务,服务地址:/igs/rest/services/SecurityServer</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="TerrainServer.html">TerrainServer</a><span style="display: none;"><p>地形缓存服务,基地址:/igs/rest/services/{folder}/{serviceName}/TerrainServer</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ThemeServer.html">ThemeServer</a><span style="display: none;"><p>专题图服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="TileServer.html">TileServer</a><span style="display: none;"><p>瓦片服务,基地址:/igs/rest/services/{folder}/{serviceName}/TileServer</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="VectorTileServer.html">VectorTileServer</a><span style="display: none;"><p>矢量瓦片服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="WFSServer.html">WFSServer</a><span style="display: none;"><p>IGS的WFS服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="WMSServer.html">WMSServer</a><span style="display: none;"><p>IGS的WMS服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="WMTSServer.html">WMTSServer</a><span style="display: none;"><p>IGS的WMTS服务</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="WorkFlowServer.html">WorkFlowServer</a><span style="display: none;"><p>工作流服务,基地址http://{ip}:{port}/igs/rest/services/workflow/{serviceName}/WorkflowServer</p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">图层模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ArcGISMapImageLayer.html">ArcGISMapImageLayer</a><span style="display: none;"><p>ArcGIS地图图片图层,<br/>
目前二维上支持4326(包括4490,4214以及4610),3857以及EPSG支持的自定义坐标系,三维上仅支持4326(包括4490,4214以及4610)以及3857坐标系,会自动读取元信息上的坐标系,不需要用户指定
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.ArcGISMapImageLayer() <br/>
[ES6引入方式]:<br/>
import { ArcGISMapImageLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/>
针对图层的操作请在图层加载完毕事件中进行<br/>
Layer.on('layerview-created', function (result) {<br/>
console.log(&quot;加载完毕:&quot;, result.layer)<br/>
});<br/>
如果不想在该事件中放入业务代码,则请确认图层资源已加载完毕后再进行操作<br/>
if(layer.loadStatus === 'loaded') {<br/>
// 你的业务逻辑<br/>
}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ArcGISMapImageSubLayer.html">ArcGISMapImageSubLayer</a><span style="display: none;"><p>ArcGIS地图图片子图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ArcGISTileLayer.html">ArcGISTileLayer</a><span style="display: none;"><p>ArcGIS瓦片图层,<br>
目前二维上支持4326(包括4490,4214以及4610),3857以及EPSG支持的自定义坐标系,三维上仅支持4326(包括4490,4214以及4610)以及3857坐标系,会自动读取元信息上的坐标系,不需要用户指定,
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.ArcGISTileLayer() <br/>
[ES6引入方式]:<br/>
import { ArcGISTileLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/>
针对图层的操作请在图层加载完毕事件中进行<br/>
Layer.on('layerview-created', function (result) {<br/>
console.log(&quot;加载完毕:&quot;, result.layer)<br/>
});<br/>
如果不想在该事件中放入业务代码,则请确认图层资源已加载完毕后再进行操作<br/>
if(layer.loadStatus === 'loaded') {<br/>
// 你的业务逻辑<br/>
}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ArcGISVectorTileLayer.html">ArcGISVectorTileLayer</a><span style="display: none;"><p>ArcGIS矢量瓦片图层
支持通过加载矢量瓦片服务、加载矢量瓦片样式文件和设置矢量瓦片样式的方式创建矢量瓦片图层
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.ArcGISVectorTileLayer() <br/>
[ES6引入方式]:<br/>
import { ArcGISVectorTileLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/>
针对图层的操作请在图层加载完毕事件中进行<br/>
Layer.on('layerview-created', function (result) {<br/>
console.log(&quot;加载完毕:&quot;, result.layer)<br/>
});<br/>
如果不想在该事件中放入业务代码,则请确认图层资源以加载完毕后再进行操作<br/>
if(layer.loadStatus === 'loaded') {<br/>
// 你的业务逻辑<br/>
}
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ArcGISVectorTileSubLayer.html">ArcGISVectorTileSubLayer</a><span style="display: none;"><p>ArcGIS矢量瓦片子图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Cesium3DTilesCacheLayer.html">Cesium3DTilesCacheLayer</a><span style="display: none;"><p>Cesium3DTiles图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="EchartsLayer.html">EchartsLayer</a><span style="display: none;"><p>Echarts图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="FeatureLayer.html">FeatureLayer</a><span style="display: none;"><p>要素图层基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="GeoJSONLayer.html">GeoJSONLayer</a><span style="display: none;"><p>geojson图层,仅支持文件服务<br/>
目前二维和三维上支持4326(包括4490,4214以及4610),3857以及EPSG支持的自定义坐标系,若是想要绘制源数据为非4326坐标系几何数据,需要在初始化时指定具体坐标系<br/>
参考示例:<br/>
<a href='#add-GeoJSONLayer'>[加载GeoJSON图层]</a>
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.GraphicsLayer() <br/>
[ES6引入方式]:<br/>
import { GraphicsLayer } from &quot;@mapgis/webclient-common&quot;</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="GraphicsLayer.html">GraphicsLayer</a><span style="display: none;"><p>几何图形图层,不支持在线数据,仅支持传入多个几何对象并绘制<br/>
目前二维和三维上支持4326(包括4490,4214以及4610),3857以及EPSG支持的自定义坐标系,若是想要绘制非4326坐标系几何,需要在初始化要素对象的几何时,指定具体坐标系
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.GraphicsLayer() <br/>
[ES6引入方式]:<br/>
import { GraphicsLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/>
针对图层的操作请在图层加载完毕事件中进行<br/>
Layer.on('layerview-created', function (result) {<br/>
console.log(&quot;加载完毕:&quot;, result.layer)<br/>
});<br/>
如果不想在该事件中放入业务代码,则请确认图层资源已加载完毕后再进行操作<br/>
if(layer.loadStatus === 'loaded') {<br/>
// 你的业务逻辑<br/>
}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="GroupLayer.html">GroupLayer</a><span style="display: none;"><p>组图层,支持的图层类型有:WMS图层、WMTS图层、地图图层、瓦片图层、cesium3DTiles图层、echarts图层、
M3D图层、场景图层、矢量瓦片图层、mapv图层、地形图层
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.GroupLayer() <br/>
[ES6引入方式]:<br/>
import { GroupLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="IGSFeatureLayer.html">IGSFeatureLayer</a><span style="display: none;"><p>IGS要素图层,<br>
目前二维和三维上支持4326(包括4490,4214以及4610),3857以及EPSG支持的自定义坐标系,要素服务会自动读取元信息上的坐标系,不需要用户指定
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.IGSFeatureLayer() <br/>
[ES6引入方式]:<br/>
import { IGSFeatureLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/>
针对图层的操作请在图层加载完毕事件中进行<br/>
Layer.on('layerview-created', function (result) {<br/>
console.log(&quot;加载完毕:&quot;, result.layer)<br/>
});<br/>
如果不想在该事件中放入业务代码,则请确认图层资源已加载完毕后再进行操作<br/>
if(layer.loadStatus === 'loaded') {<br/>
// 你的业务逻辑<br/>
}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="IGSImageLayer.html">IGSImageLayer</a><span style="display: none;"><p>IGS影像图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="IGSMapImageLayer.html">IGSMapImageLayer</a><span style="display: none;"><p>IGS地图图片图层,<br/>
支持IGS1.0和2.0两个服务版本,支持自定义坐标系,当IGS版本是1.0时,需要手动设置图层坐标系,当IGS版本是2.0时,会自动读取元信息上的坐标系,不需要用户指定<br/>
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.IGSMapImageLayer() <br/>
[ES6引入方式]:<br/>
import { IGSMapImageLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/>
针对图层的操作请在图层加载完毕事件中进行<br/>
Layer.on('layerview-created', function (result) {<br/>
console.log(&quot;加载完毕:&quot;, result.layer)<br/>
});<br/>
如果不想在该事件中放入业务代码,则请确认图层资源已加载完毕后再进行操作<br/>
if(layer.loadStatus === 'loaded') {<br/>
// 你的业务逻辑<br/>
}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="IGSMapImageSubLayer.html">IGSMapImageSubLayer</a><span style="display: none;"><p>IGS地图图片图层的子图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="IGSSceneLayer.html">IGSSceneLayer</a><span style="display: none;"><p>IGS的SceneLayer图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="IGSSceneSubLayer.html">IGSSceneSubLayer</a><span style="display: none;"><p>IGS的SceneLayer子图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="IGSTileLayer.html">IGSTileLayer</a><span style="display: none;"><p>IGS瓦片图层,<br>
支持IGS1.0和2.0两个服务版本,支持自定义坐标系,当IGS版本是1.0时,需要手动设置图层坐标系,当IGS版本是2.0时,会自动读取元信息上的坐标系,不需要用户指定,
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.IGSTileLayer() <br/>
[ES6引入方式]:<br/>
import { IGSTileLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/>
针对图层的操作请在图层加载完毕事件中进行<br/>
Layer.on('layerview-created', function (result) {<br/>
console.log(&quot;加载完毕:&quot;, result.layer)<br/>
});<br/>
如果不想在该事件中放入业务代码,则请确认图层资源已加载完毕后再进行操作<br/>
if(layer.loadStatus === 'loaded') {<br/>
// 你的业务逻辑<br/>
}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="IGSVectorTileLayer.html">IGSVectorTileLayer</a><span style="display: none;"><p>IGS矢量瓦片图层
支持IGS1.0和2.0两个服务版本,目前二维和三维上支持4326(包括4490,4214以及4610),3857,会自动读取元信息上的坐标系,不需要用户指定,
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.IGSVectorTileLayer() <br/>
[ES6引入方式]:<br/>
import { IGSVectorTileLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/>
针对图层的操作请在图层加载完毕事件中进行<br/>
Layer.on('layerview-created', function (result) {<br/>
console.log(&quot;加载完毕:&quot;, result.layer)<br/>
});<br/>
如果不想在该事件中放入业务代码,则请确认图层资源以加载完毕后再进行操作<br/>
if(layer.loadStatus === 'loaded') {<br/>
// 你的业务逻辑<br/>
}
<br/>
<br/>
注意:三维上,不支持简单Marker样式设定;二维上,简单Marker的颜色,外边线样式,旋转角度无法在图层初始化和初始化后修改,须在制作数据时进行指定</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="IGSVectorTileSubLayer.html">IGSVectorTileSubLayer</a><span style="display: none;"><p>IGS矢量瓦片子图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Layer.html">Layer</a><span style="display: none;"><p>图层基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="M3DModelCacheLayer.html">M3DModelCacheLayer</a><span style="display: none;"><p>M3D缓存图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="MapImageLayer.html">MapImageLayer</a><span style="display: none;"><p>影像图层基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="MapVLayer.html">MapVLayer</a><span style="display: none;"><p>MapV图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="OGCLayer.html">OGCLayer</a><span style="display: none;"><p>OGS图层基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="OverlayLayer.html">OverlayLayer</a><span style="display: none;"><p>覆盖物图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Scene.html">Scene</a><span style="display: none;"><p>场景对象</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SceneLayer.html">SceneLayer</a><span style="display: none;"><p>场景图层基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SubLayer.html">SubLayer</a><span style="display: none;"><p>子图层基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="TerrainCacheLayer.html">TerrainCacheLayer</a><span style="display: none;"><p>地形图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="TileLayer.html">TileLayer</a><span style="display: none;"><p>瓦片图层基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="UnknownLayer.html">UnknownLayer</a><span style="display: none;"><p>未定义图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="VectorTileLayer.html">VectorTileLayer</a><span style="display: none;"><p>图层基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="WFSLayer.html">WFSLayer</a><span style="display: none;"><p>WFS图层,<br>
目前二维和三维上支持4326(包括4490,4214以及4610),3857以及EPSG支持的自定义坐标系,WFS服务会自动读取元信息上的坐标系,不需要用户指定
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.WMTSLayer() <br/>
[ES6引入方式]:<br/>
import { WMTSLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/>
针对图层的操作请在图层加载完毕事件中进行<br/>
Layer.on('layerview-created', function (result) {<br/>
console.log(&quot;加载完毕:&quot;, result.layer)<br/>
});<br/>
如果不想在该事件中放入业务代码,则请确认图层资源已加载完毕后再进行操作<br/>
if(layer.loadStatus === 'loaded') {<br/>
// 你的业务逻辑<br/>
}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="WMSLayer.html">WMSLayer</a><span style="display: none;"><p>WMS图层,<br/>
目前二维上支持4326(包括4490,4214以及4610),3857以及EPSG支持的自定义坐标系,三维上仅支持4326(包括4490,4214以及4610)以及3857坐标系,会自动读取元信息上的坐标系,不需要用户指定,同时所有的WMS服务都支持动态投影,用户也可指定任意该服务支持的坐标系<br/>
<br>[ES5引入方式]:<br/>
Zondy.Layer.WMSLayer() <br/>
[ES6引入方式]:<br/>
import { WMSLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/>
针对图层的操作请在图层加载完毕事件中进行<br/>
Layer.on('layerview-created', function (result) {<br/>
console.log(&quot;加载完毕:&quot;, result.layer)<br/>
});<br/>
如果不想在该事件中放入业务代码,则请确认图层资源已加载完毕后再进行操作<br/>
if(layer.loadStatus === 'loaded') {<br/>
// 你的业务逻辑<br/>
}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="WMSSubLayer.html">WMSSubLayer</a><span style="display: none;"><p>WMS子图层</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="WMTSLayer.html">WMTSLayer</a><span style="display: none;"><p>WMTS图层,<br>
目前二维上支持4326(包括4490,4214以及4610),3857以及EPSG支持的自定义坐标系,三维上仅支持4326(包括4490,4214以及4610)以及3857坐标系,WMTS服务会自动读取元信息上的坐标系,不需要用户指定
<br><br>[ES5引入方式]:<br/>
Zondy.Layer.WMTSLayer() <br/>
[ES6引入方式]:<br/>
import { WMTSLayer } from &quot;@mapgis/webclient-common&quot; <br/>
<br/>
针对图层的操作请在图层加载完毕事件中进行<br/>
Layer.on('layerview-created', function (result) {<br/>
console.log(&quot;加载完毕:&quot;, result.layer)<br/>
});<br/>
如果不想在该事件中放入业务代码,则请确认图层资源已加载完毕后再进行操作<br/>
if(layer.loadStatus === 'loaded') {<br/>
// 你的业务逻辑<br/>
}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="WMTSSubLayer.html">WMTSSubLayer</a><span style="display: none;"><p>IGS地图服务图层</p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">地图模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Basemap.html">Basemap</a><span style="display: none;"><p>基础地图对象
<br>[ES5引入方式]:<br/>
Zondy.Basemap() <br/>
[ES6引入方式]:<br/>
import { Map } from &quot;@mapgis/webclient-common&quot; <br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Map.html">Map</a><span style="display: none;"><p>图层管理容器,和地图引擎无关,通过此对象而不是地图引擎来对图层进行管理
<br>[ES5引入方式]:<br/>
Zondy.Map() <br/>
[ES6引入方式]:<br/>
import { Map } from &quot;@mapgis/webclient-common&quot; <br/></p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">渲染器模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="BaseRenderer.html">BaseRenderer</a><span style="display: none;"><p>专题图渲染基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ClassBreakInfo.html">ClassBreakInfo</a><span style="display: none;"><p>三维专题图-分段信息</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ClassBreakRenderer.html">ClassBreakRenderer</a><span style="display: none;"><p>分段专题图渲染样式,支持的图层如下:<br/>
[IGS地图图片图层]{@link IGSMapImageLayer}、[几何图形图层]{@link GraphicsLayer}、[IGS要素图层]{@link IGSFeatureLayer}、
[geojson图层]{@link GeoJSONLayer}、[OGC-WFS图层]{@link WFSLayer}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ClusterInfo.html">ClusterInfo</a><span style="display: none;"><p>聚合点数量区间内的符号信息</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ClusterRenderer.html">ClusterRenderer</a><span style="display: none;"><p>聚类渲染器,多个点聚集在一起,会形成一个点符号</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ColorStop.html">ColorStop</a><span style="display: none;"><p>颜色分段</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ColorVariable.html">ColorVariable</a><span style="display: none;"><p>color视觉变量</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="HeatmapColorStop.html">HeatmapColorStop</a><span style="display: none;"><p>热力图分段颜色和比率</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="HeatmapRenderer.html">HeatmapRenderer</a><span style="display: none;"><p>热力图渲染器</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="OpacityStop.html">OpacityStop</a><span style="display: none;"><p>透明度分段</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="OpacityVariable.html">OpacityVariable</a><span style="display: none;"><p>opacity视觉变量</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="RandomRenderer.html">RandomRenderer</a><span style="display: none;"><p>随机渲染器,将随机颜色赋予要素,根据zoom等级颜色也将发生变化</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="RankRenderer.html">RankRenderer</a><span style="display: none;"><p>等级符号专题图,符号尺寸随指定字段的值的变化而变化</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SimpleRenderer.html">SimpleRenderer</a><span style="display: none;"><p>统一专题图渲染样式,支持的图层如下:<br/>
[几何图形图层]{@link GraphicsLayer}、[IGS要素图层]{@link IGSFeatureLayer}、
[geojson图层]{@link GeoJSONLayer}、[OGC-WFS图层]{@link WFSLayer}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SizeStop.html">SizeStop</a><span style="display: none;"><p>size视觉变量</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SizeVariable.html">SizeVariable</a><span style="display: none;"><p>size视觉变量</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="UniqueValueInfo.html">UniqueValueInfo</a><span style="display: none;"><p>三维专题图-单值信息</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="UniqueValueRenderer.html">UniqueValueRenderer</a><span style="display: none;"><p>单值专题图渲染样式,支持的图层如下:<br/>
[IGS地图图片图层]{@link IGSMapImageLayer}、[几何图形图层]{@link GraphicsLayer}、[IGS要素图层]{@link IGSFeatureLayer}、
[geojson图层]{@link GeoJSONLayer}、[OGC-WFS图层]{@link WFSLayer}</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="VisualVariable.html">VisualVariable</a><span style="display: none;"><p>视觉变量基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Zondy.ThemeLayer.GraphThemeLayer.html">GraphThemeLayer</a><span style="display: none;"><p>统计专题图通过为每个要素绘制统计图表来反映其对应的专题值的大小。它可同时表示多个字段属性信息,在区域本身与各区域之间形成横向和纵向的对比。<br>统计专题图多用于具有相关数量特征的地图上,比如表示不同地区多年的粮食产量、GDP、人口等,不同时段客运量、地铁流量等。目前提供的统计图类型有:柱状图(Bar),折线图(Line),饼图(Pie),三维柱状图(Bar3D),点状图(Point),环状图(Ring)。</p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">视图模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="BaseView.html">BaseView</a><span style="display: none;"><p>视图类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="MapView.html">MapView</a><span style="display: none;"><p>二维场景视图(leaflet引擎),对地图引擎进行管理,如果要对地图图层进行管理请参考[Map]{@link Map},<br/>
参考示例:
<a href='#MapView'>[初始化二维场景视图]</a>
<br>[ES5引入方式]:<br/>
Zondy.MapView() <br/>
[ES6引入方式]:<br/>
import { MapView } from '@mapgis/webclient-leaflet-plugin' <br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="VideoMapView.html">VideoMapView</a><span style="display: none;">undefined</span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">符号模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Callout3D.html">Callout3D</a><span style="display: none;"><p>三维索引样式基类,当一个符号相对于原始位置有偏移时,该符号能显示其真实位置</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ColorMaterial.html">ColorMaterial</a><span style="display: none;"><p>颜色材质,适用于所有三维符号</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Edges3D.html">Edges3D</a><span style="display: none;"><p>轮廓线样式</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ExtrudeSymbol3DLayer.html">ExtrudeSymbol3DLayer</a><span style="display: none;"><p>三维拉伸区符号图层,用来在三维场景中绘制拉伸的区几何,不支持二维地图视图<br/>
示例如下:<br/>
<a href='#ExtrudeSymbol3DLayer'>[1、创建三维拉伸区符号图层]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="FillSymbol.html">FillSymbol</a><span style="display: none;"><p>填充符号基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="FillSymbol3DLayer.html">FillSymbol3DLayer</a><span style="display: none;"><p>三维区符号图层,用于在三维场景中绘制平面区对象,不支持二维视图<br/>
示例如下:<br/>
<a href='#FillSymbol3DLayer'>[1、创建三维区符号图层]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="FillSymbol3DOutline.html">FillSymbol3DOutline</a><span style="display: none;"><p>三维区符号图层的外边线样式</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="IconResource.html">IconResource</a><span style="display: none;"><p>图标资源,如果没有设置href,则使用系统自带的图标</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="IconSymbol3DLayer.html">IconSymbol3DLayer</a><span style="display: none;"><p>三维图标符号图层,用来在三维场景中绘制图标,不支持二维地图视图<br/>
支持使用网络图片资源或者使用系统自带的图标资源<br/>
是一个始终朝向屏幕,并且立起来的图标<br/>
示例如下:<br/>
<a href='#IconSymbol3DLayer-href'>[1、使用网络资源创建一个三维图标图层对象]</a><br/>
<a href='#IconSymbol3DLayer-primitive'>[2、使用系统自带资源创建一个三维图标图层对象]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="LabelSymbol3D.html">LabelSymbol3D</a><span style="display: none;"><p>三维注记符号,用于在三维场景中渲染线几何要素,不支持在二维视图中使用;<br/>
三维注记符号必须包含如下符号图层中的一个或多个,才能在三维场景中显示要素:<br/>
[三维文字符号图层]{@link TextSymbol3DLayer}<br/>
示例如下:<br/>
<a href='#LabelSymbol3D'>[1、创建一个三维注记符号对象]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="LineCallout3D.html">LineCallout3D</a><span style="display: none;"><p>注记索引线样式,该线会链接注记和所属要素,当一个符号相对于原始位置有偏移时,该符号能显示其真实位置</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="LineStyleMarker3D.html">LineStyleMarker3D</a><span style="display: none;"><p>设置线的端点的Marker的样式</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="LineStylePattern3D.html">LineStylePattern3D</a><span style="display: none;"><p>三维虚线样式设置</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="LineSymbol.html">LineSymbol</a><span style="display: none;"><p>线符号基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="LineSymbol3D.html">LineSymbol3D</a><span style="display: none;"><p>三维线符号,用于在三维场景中渲染线几何要素,不支持在二维视图中使用;<br/>
三维线符号必须包含如下符号图层中的一个或多个,才能在三维场景中显示要素:<br/>
[三维线符号图层]{@link LineSymbol3DLayer}、[三维管道符号图层]{@link PathSymbol3DLayer}<br/>
示例如下:<br/>
<a href='#LineSymbol3D'>[1、创建线三维符号]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="LineSymbol3DLayer.html">LineSymbol3DLayer</a><span style="display: none;"><p>三维线符号图层,用来在三维场景中绘制二维线,不支持二维地图视图<br/>
示例如下:<br/>
<a href='#LineSymbol3DLayer'>[1、创建三维线符号图层]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="LineSymbolMarker.html">LineSymbolMarker</a><span style="display: none;"><p>标记符号</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="MapGISTextSymbol.html">MapGISTextSymbol</a><span style="display: none;"><p>文本符号,支持点几何对象,参考示例:<a href='#new-MapGISTextSymbol'>[创建文本样式]</a>
<br><br>[ES5引入方式]:<br/>
Zondy.Symbol.MapGISTextSymbol() <br/>
[ES6引入方式]:<br/>
import { MapGISTextSymbol } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="MarkerSymbol.html">MarkerSymbol</a><span style="display: none;"><p>Marker符号基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="ObjectSymbol3DLayer.html">ObjectSymbol3DLayer</a><span style="display: none;"><p>三维体对象符号图层,使用三维体符号来绘制一个点几何要素<br/>
通过设置resource的primitive属性来设置符号形状,支持如下形状:<br/>
sphere、cylinder、cube、cone、inverted-cone、diamond、tetrahedron<br/>
也可通过设置resource中的href属性,来加载gltf数据<br/>
同时通过设置material属性来设置符号的外观<br/>
示例如下:<br/>
<a href='#ObjectSymbol3DLayer-href'>[1、使用网络资源创建一个三维体对象符号图层对象]</a><br/>
<a href='#ObjectSymbol3DLayer-primitive'>[2、使用系统自带资源创建一个三维体对象符号图层对象]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="PathSymbol3DLayer.html">PathSymbol3DLayer</a><span style="display: none;"><p>三维管道符号图层,定义如何在三维场景视图中绘制一个管道线<br/>
示例如下:<br/>
<a href='#PathSymbol3DLayer'>[1、创建三维管道符号图层]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="PictureFillSymbol.html">PictureFillSymbol</a><span style="display: none;"><p>图片填充符号</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="PictureMarkerSymbol.html">PictureMarkerSymbol</a><span style="display: none;"><p>图片Marker符号,支持点几何对象,参考示例:<a href='#new-PictureMarkerSymbol'>[图片Marker样式]</a>
<br><br>[ES5引入方式]:<br/>
Zondy.Symbol.PictureMarkerSymbol() <br/>
[ES6引入方式]:<br/>
import { PictureMarkerSymbol } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="PointSymbol3D.html">PointSymbol3D</a><span style="display: none;"><p>三维点符号,在三维场景中渲染点几何要素,不支持二维视图;<br/>
三维点符号必须包含如下符号图层中的一个或多个,才能在三维场景中显示要素:<br/>
[三维图标符号图层]{@link IconSymbol3DLayer}、[三维对象符号图层]{@link ObjectSymbol3DLayer}、[三维文字符号图层]{@link TextSymbol3DLayer}<br/>
示例如下:<br/>
<a href='#PointSymbol3D'>[1、创建一个三维点符号对象]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="PointSymbol3DOutline.html">PointSymbol3DOutline</a><span style="display: none;"><p>三维点符号图层的外边线样式</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="PolygonSymbol3D.html">PolygonSymbol3D</a><span style="display: none;"><p>三维体符号,用于在三维场景视图中渲染几何要素,不支持二维视图<br/>
三维体符号必须包含如下符号图层中的一个或多个,才能在三维场景中显示要素:<br/>
[三维区符号图层]{@link FillSymbol3DLayer}、[三维拉伸区符号图层]{@link ExtrudeSymbol3DLayer}、[三维线符号图层]{@link LineSymbol3DLayer}、[三维图标符号图层]{@link IconSymbol3DLayer}、[三维体对象符号图层]{@link ObjectSymbol3DLayer}、[三维注记符号图层]{@link TextSymbol3DLayer}<br/>
示例如下:<br/>
<a href='#PolygonSymbol3D'>[1、创建一个三维体符号对象]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SimpleFillSymbol.html">SimpleFillSymbol</a><span style="display: none;"><p>简单填充符号,参考示例:<a href='#new-SimpleFillSymbol'>[填充符号样式]</a>
<br><br>[ES5引入方式]:<br/>
Zondy.Symbol.SimpleFillSymbol() <br/>
[ES6引入方式]:<br/>
import { SimpleFillSymbol } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SimpleLineSymbol.html">SimpleLineSymbol</a><span style="display: none;"><p>简单线符号,支持线几何对象,参考示例:<a href='#new-SimpleLineSymbol'>[线符号样式]</a>
<br><br>[ES5引入方式]:<br/>
Zondy.Symbol.SimpleLineSymbol() <br/>
[ES6引入方式]:<br/>
import { SimpleLineSymbol } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SimpleMarkerSymbol.html">SimpleMarkerSymbol</a><span style="display: none;"><p>简单Marker符号,支持点几何对象,参考示例:<a href='#new-SimpleMarkerSymbol'>[简单Marker样式]</a>
<br><br>[ES5引入方式]:<br/>
Zondy.Symbol.SimpleMarkerSymbol() <br/>
[ES6引入方式]:<br/>
import { SimpleMarkerSymbol } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="StylePattern3D.html">StylePattern3D</a><span style="display: none;"><p>三维区间隔填充样式设置</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Symbol.html">Symbol</a><span style="display: none;"><p>符号基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Symbol3DLayer.html">Symbol3DLayer</a><span style="display: none;"><p>三维符号图层基类,用来定义在三维中展示的点、线、区几何以及gltf的样式<br/>
所有的三维符号都有一个symbolLayers属性,是一个Symbol3DLayer的集合对象,所有的符号必须至少拥有一个或多个三维符号图层,才能进行正常显示<br/>
现有如下类型的三维符号图层:<br/>
IconSymbol3DLayer、ObjectSymbol3DLayer、LineSymbol3DLayer、PathSymbol3DLayer、FillSymbol3DLayer、WaterSymbol3DLayer、ExtrudeSymbol3DLayer、TextSymbol3DLayer<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Symbol3DVerticalOffset.html">Symbol3DVerticalOffset</a><span style="display: none;"><p>符号垂直偏移量,将一个符号在竖直世界轴的方向上进行平移</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="TextHalo.html">TextHalo</a><span style="display: none;"><p>文字光晕样式</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="TextSymbol.html">TextSymbol</a><span style="display: none;"><p>文本符号,支持点几何对象,参考示例:<a href='#new-TextSymbol'>[创建文本样式]</a>
<br><br>[ES5引入方式]:<br/>
Zondy.Symbol.TextSymbol() <br/>
[ES6引入方式]:<br/>
import { TextSymbol } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="TextSymbol3DLayer.html">TextSymbol3DLayer</a><span style="display: none;"><p>三维注记符号图层,定义如何在三维场景中显示文字,不支持二维视图<br/>
示例如下:<br/>
<a href='#TextSymbol3DLayer'>[1、创建一个三维注记符号图层对象]</a><br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="WaterSymbol3DLayer.html">WaterSymbol3DLayer</a><span style="display: none;"><p>水面符号图层,定义如何在三维场景中沟构造水面几何,不支持二维视图</p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">几何模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Circle.html">Circle</a><span style="display: none;"><p>几何圆,参考示例:<a href='#Circle'>[几何圆对象]</a>
<br><br>[ES5引入方式]:<br/>
Zondy.Geometry.Circle() <br/>
[ES6引入方式]:<br/>
import { Circle } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Extent.html">Extent</a><span style="display: none;"><p>几何范围对象,即左下角和右上角组成的矩形范围几何对象,参考示例:<a href='#Extent'>[几何范围对象]</a>
<br><br>[ES5引入方式]:<br/>
Zondy.Geometry.Extent() <br/>
[ES6引入方式]:<br/>
import { Extent } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Geometry.html">Geometry</a><span style="display: none;"><p>几何图形对象基类
<br><br>[ES5引入方式]:<br/>
Zondy.Geometry.Geometry() <br/>
[ES6引入方式]:<br/>
import { Geometry } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="GeometryEngine.html">GeometryEngine</a><span style="display: none;"><p>几何分析工具</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="LineString.html">LineString</a><span style="display: none;"><p>线几何对象
<br><br>[ES5引入方式]:<br/>
Zondy.Geometry.LineString() <br/>
[ES6引入方式]:<br/>
import { LineString } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="MultiLineString.html">MultiLineString</a><span style="display: none;"><p>多线段几何
<br><br>[ES5引入方式]:<br/>
Zondy.Geometry.MultiLineString() <br/>
[ES6引入方式]:<br/>
import { MultiLineString } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="MultiPoint.html">MultiPoint</a><span style="display: none;"><p>多点几何对象
<br><br>[ES5引入方式]:<br/>
Zondy.Geometry.MultiPoint() <br/>
[ES6引入方式]:<br/>
import { MultiPoint } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="MultiPolygon.html">MultiPolygon</a><span style="display: none;"><p>多区几何
<br><br>[ES5引入方式]:<br/>
Zondy.Geometry.MultiPolygon() <br/>
[ES6引入方式]:<br/>
import { MultiPolygon } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Point.html">Point</a><span style="display: none;"><p>点几何对象
<br><br>[ES5引入方式]:<br/>
Zondy.Geometry.Point() <br/>
[ES6引入方式]:<br/>
import { Point } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Polygon.html">Polygon</a><span style="display: none;"><p>区几何,由多个环(ring)构成的几何对象,仅支持带洞区和非带洞区,不支持带岛区,即三个圈重叠<br/>
多边形的第一个环(ring)即外圈,从第二个环开始为内圈,内圈可以重合、相交、自相交,但是不能超过外圈
<br><br>[ES5引入方式]:<br/>
Zondy.Geometry.Polygon() <br/>
[ES6引入方式]:<br/>
import { Polygon } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Projection.html">Projection</a><span style="display: none;"><p>投影转换工具</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SpatialReference.html">SpatialReference</a><span style="display: none;"><p>空间参考系
<br><br>[ES5引入方式]:<br/>
Zondy.SpatialReference() <br/>
[ES6引入方式]:<br/>
import { SpatialReference } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">undefined</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="DrawControl.html">DrawControl</a><span style="display: none;"><p>绘制工具</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Screenshot.html">Screenshot</a><span style="display: none;"><p>打印工具</p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">基础对象模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Evented.html">Evented</a><span style="display: none;"><p>事件基类,所有可接收或者发送的对象继承于此</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="UpdateContent.html">UpdateContent</a><span style="display: none;"><p>更新内容对象</p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">要素模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Feature.html">Feature</a><span style="display: none;"><p>要素对象,示例如下:<a id='add-Feature'>[初始化要素对象]</a>
<br><br>[ES5引入方式]:<br/>
Zondy.Feature() <br/>
[ES6引入方式]:<br/>
import { Feature } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="FeatureSet.html">FeatureSet</a><span style="display: none;"><p>要素集合类,示例如下:<a id='add-FeatureSet'>[初始化要素集合对象]</a>
<br><br>[ES5引入方式]:<br/>
Zondy.FeatureSet() <br/>
[ES6引入方式]:<br/>
import { FeatureSet } from &quot;@mapgis/webclient-common&quot; <br/>
<br/></p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">undefined</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Popup.html">Popup</a><span style="display: none;"><p>二维场景信息弹窗(leaflet引擎)
参考示例:
<a href='#MapView'>[初始化二维场景视图]</a>
[ES6引入方式]:<br/>
import { Popup } from '@mapgis/webclient-leaflet-plugin' <br/>
自定义样式说明:<br/>
zondy-popup__content 弹窗容器样式<br/>
zondy-popup__tip 弹窗对话框箭头样式<br/>
zondy-popup__header 弹窗头部样式<br/>
zondy-popup__content 弹窗主体样式<br/>
zondy-popup__footer 弹窗底部样式<br/></p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">草图编辑模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchBaseDrawTool.html">SketchBaseDrawTool</a><span style="display: none;"><p>草图基础绘图工具类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchCircleDrawTool.html">SketchCircleDrawTool</a><span style="display: none;"><p>面绘图工具类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchEditor.html">SketchEditor</a><span style="display: none;"><p>草图编辑基类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchEditorLeaflet.html">SketchEditorLeaflet</a><span style="display: none;"><p>二维场景草图编辑类<br/>
<br>[ES5引入方式]:<br/>
const { SketchEditorLeaflet } = Zondy <br/>
[ES6引入方式]:<br/>
import { SketchEditorLeaflet } from &quot;@mapgis/webclient-leaflet-plugin&quot; <br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchEditorVideo.html">SketchEditorVideo</a><span style="display: none;">undefined</span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchEditorVideoBase.html">SketchEditorVideoBase</a><span style="display: none;">undefined</span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchExtentDrawTool.html">SketchExtentDrawTool</a><span style="display: none;"><p>面绘图工具类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchPointDrawTool.html">SketchPointDrawTool</a><span style="display: none;"><p>点绘图工具类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchPolygonDrawTool.html">SketchPolygonDrawTool</a><span style="display: none;"><p>面绘图工具类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchPolylineDrawTool.html">SketchPolylineDrawTool</a><span style="display: none;"><p>面绘图工具类</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchStage.html">SketchStage</a><span style="display: none;"><p>草图图形集合</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchStyle.html">SketchStyle</a><span style="display: none;"><p>草图样式管理类</p></span></li></ul></div>
                
            </nav>
        </div>
        <div class="core" id="main-content-wrapper">
            <div class="content">
                <header id="page-title" class="page-title">
                    <span class="page-title-main">类名</span>
                    <span class="page-title-sub">common/service/Utils.js</span>
                </header>
                



    
    <section>
        <article>
            <pre class="prettyprint source linenums"><code>import {
  Extent,
  Geometry,
  Polygon,
  SpatialReference,
  LineString,
  MultiLineString,
  Point,
  Circle,
  MultiPolygon,
  MultiPoint
} from '../base/geometry'
import Log from '../util/Log'
import { defaultValue, isBoolean, isNull, isNumber, isString } from '../util'
import { Color, Feature, FeatureSet } from '../base'

/**
 * @private
 * @description 获取查询参数字符串
 * @param fields 字段名数组
 * @param options 查询参数
 * @param checkOptions 检测规则
 * @return String GUID
 */
function getParameters(fields, options, checkOptions) {
  let url = ''
  for (let i = 0; i &lt; fields.length; i++) {
    // 获取查询条件
    const _filter = defaultValue(
      options[fields[i]],
      checkOptions[fields[i]].default
    )
    // 必须不为空
    if (_filter !== undefined) {
      let str = ''
      // 没有process参数,走类型判断
      if (isNull(checkOptions[fields[i]].process)) {
        // 根据类型进行数据处理
        switch (checkOptions[fields[i]].type) {
          case 'String':
          case 'Number':
          case 'Boolean':
            url += `&amp;${
              checkOptions[fields[i]].alias || fields[i]
            }=${encodeURIComponent(_filter)}`
            break
          case 'Geometry':
          case 'Point':
          case 'MultiPoint':
          case 'Extent':
          case 'Circle':
          case 'LineString':
          case 'MultiLineString':
          case 'Polygon':
          case 'MultiPolygon':
            url += `&amp;${fields[i]}=${encodeURIComponent(
              _filter.toString()
            )}&amp;geometryType=${encodeURIComponent(_filter.getIGSType())}`
            break
          case 'layerDefs':
            str = '['
            for (let i = 0; i &lt; _filter.length; i++) {
              if (
                _filter[i] instanceof Object &amp;&amp;
                !(_filter[i] instanceof Array)
              ) {
                str += '{'
                Object.keys(_filter[i]).forEach((key) => {
                  if (_filter[i].hasOwnProperty(key)) {
                    str += `"${key}":"${_filter[i][key]}",`
                  }
                })
                str = str.substring(0, str.length - 1)
                str += '},'
              }
            }
            if (_filter.length > 0) {
              str = str.substring(0, str.length - 1)
            }
            str += ']'

            if (str !== '[]') {
              url += `&amp;${fields[i]}=${encodeURIComponent(str)}`
            }
            break
          case 'OutStatistics':
            str += '['
            for (let i = 0; i &lt; _filter.length; i++) {
              if (
                _filter[i] instanceof Object &amp;&amp;
                !(_filter[i] instanceof Array)
              ) {
                str += '{'
                Object.keys(_filter[i]).forEach((key) => {
                  if (_filter[i].hasOwnProperty(key)) {
                    if (
                      key === 'statisticType' ||
                      key === 'onStatisticField' ||
                      key === 'outStatisticFieldName'
                    ) {
                      str += `"${key}":"${_filter[i][key]}",`
                    }
                  }
                })
                str = str.substring(0, str.length - 1)
                str += '},'
              }
            }
            if (_filter.length > 0) {
              str = str.substring(0, str.length - 1)
            }
            str += ']'

            if (str !== '[]') {
              url += `&amp;${fields[i]}=${encodeURIComponent(str)}`
            }
            break
          case 'FeatureSet':
            str = `&amp;${fields[i]}=${encodeURIComponent(
              JSON.stringify(options[fields[i]].toGeoJSON())
            )}`
            url += str
            break
          case 'FeatureCollection':
            url += `&amp;${fields[i]}=${encodeURIComponent(
              JSON.stringify(options[fields[i]])
            )}`
            break
          default:
            url += `&amp;${fields[i]}=${encodeURIComponent(_filter)}`
        }
      } else if (typeof checkOptions[fields[i]].process === 'string') {
        // 有定义好的处理类型
        switch (checkOptions[fields[i]].process) {
          case 'igsGeometryServer':
            url += `&amp;${fields[i]}=${encodeURIComponent(
              JSON.stringify(_filter.toGeoJSON())
            )}&amp;srs=`
            // 确保spatialReference存在
            if (_filter.spatialReference) {
              // 是SpatialReference对象
              if (_filter.spatialReference instanceof SpatialReference) {
                url += encodeURIComponent(_filter.spatialReference.toString())
              } else if (
                _filter.spatialReference instanceof Object &amp;&amp;
                !(_filter.spatialReference instanceof Array)
              ) {
                // 外部传入一个对象
                url += encodeURIComponent(
                  _filter.spatialReference.wkt
                    ? _filter.spatialReference.wkt
                    : 'EPSG:4326'
                )
              } else if (typeof _filter.spatialReference === 'string') {
                // 传入字符串
                url += encodeURIComponent(_filter.spatialReference)
              }
            } else {
              // spatialReference不存在,默认EPSG:4326
              url += encodeURIComponent('EPSG:4326')
            }
            break
          case 'igsGeometryServerNoSRS':
            url += `&amp;${fields[i]}=${encodeURIComponent(
              JSON.stringify(_filter.toGeoJSON())
            )}`
            break
          case 'igsRange$':
            url += `&amp;${
              checkOptions[fields[i]].alias || fields[i]
            }=${encodeURIComponent(_filter.toIGSOldString())}`
            break
          case 'igsGeometryOld':
            if (_filter.type === 'Point' || _filter.type === 'LineString') {
              if (_filter.type === 'Point' &amp;&amp; _filter.hasZ === true) {
                url += `&amp;${fields[i]}=${encodeURIComponent(
                  `${_filter.toString()},${
                    options['distance'] || checkOptions['distance'].default
                  }`
                )}&amp;geometryType=${encodeURIComponent(_filter.getIGSType())}`
              } else {
                url += `&amp;${fields[i]}=${encodeURIComponent(
                  `${_filter.toString()};${
                    options['distance'] || checkOptions['distance'].default
                  }`
                )}&amp;geometryType=${encodeURIComponent(_filter.getIGSType())}`
              }
            } else {
              url += `&amp;${fields[i]}=${encodeURIComponent(
                _filter.toString()
              )}&amp;geometryType=${encodeURIComponent(_filter.getIGSType())}`
            }
            break
          default:
            url += `&amp;${fields[i]}=${encodeURIComponent(
              _filter.toString()
            )}&amp;geometryType=${encodeURIComponent(_filter.getIGSType())}`
        }
      } else if (checkOptions[fields[i]].process instanceof Function) {
        // 方法类型
        url += checkOptions[fields[i]].process(
          options[fields[i]],
          checkOptions[fields[i]].default
        )
      }
    }
  }

  return url
}

function getParametersObject(fields, options, checkOptions) {
  const data = {}
  for (let i = 0; i &lt; fields.length; i++) {
    // 获取查询条件
    const _filter = defaultValue(
      options[fields[i]],
      checkOptions[fields[i]].default
    )
    // 必须不为空
    if (_filter !== undefined) {
      // 没有process参数,走类型判断
      if (isNull(checkOptions[fields[i]].process)) {
        // 根据类型进行数据处理
        switch (checkOptions[fields[i]].type) {
          case 'String':
          case 'Number':
          case 'Boolean':
          default:
            data[checkOptions[fields[i]].alias || fields[i]] = _filter
            break
          case 'Geometry':
          case 'Point':
          case 'MultiPoint':
          case 'Extent':
          case 'Circle':
          case 'LineString':
          case 'MultiLineString':
          case 'Polygon':
          case 'MultiPolygon':
            data[
              checkOptions[fields[i]].alias || fields[i]
            ] = `${_filter.toString()}&amp;geometryType=${_filter.getIGSType()}`
            break
        }
      } else if (typeof checkOptions[fields[i]].process === 'string') {
        // 有定义好的处理类型
        switch (checkOptions[fields[i]].process) {
          case 'igsDots':
            data[checkOptions[fields[i]].alias || 'Dots'] = _filter.toDots()
            break
          case 'toOldIGSGeometry':
            switch (_filter.type) {
              case 'Point':
                data[checkOptions[fields[i]].alias || 'Pnt'] =
                  _filter.toOldIGSGeometry().PntGeom[0]
                break
              case 'LineString':
                data[checkOptions[fields[i]].alias || 'Line'] =
                  _filter.toOldIGSGeometry().LinGeom[0]
                break
              case 'Polygon':
                data[checkOptions[fields[i]].alias || 'Reg'] =
                  _filter.toOldIGSGeometry().RegGeom[0]
                break
              default:
            }
            break
          default:
            data[checkOptions[fields[i]].alias || fields[i]] = _filter
        }
      } else if (checkOptions[fields[i]].process instanceof Function) {
        // 方法类型
        data[fields[i]] = checkOptions[fields[i]].process(
          options[fields[i]],
          checkOptions[fields[i]].default
        )
      }
    }
  }

  return encodeURIComponent(JSON.stringify(data))
}

/**
 * 检测输入参数类型是否是OutStatistics
 * @private
 * @param {OutStatistics} param 输入参数
 * @return {Boolean} 是否是正确的类型
 * */
function isOutStatistics(param) {
  // 首先必须是数组
  if (!(param instanceof Array)) {
    return false
  }

  // 循环所有子元素
  for (let i = 0; i &lt; param.length; i++) {
    // 子元素一定是对象
    if (!(param[i] instanceof Object)) {
      return false
    }

    // 子元素不可以是数组
    if (param[i] instanceof Object &amp;&amp; param[i] instanceof Array) {
      return false
    }

    // 子元素必须包含statisticType、onStatisticField以及outStatisticFieldName
    if (
      !param[i].hasOwnProperty('statisticType') ||
      !param[i].hasOwnProperty('onStatisticField') ||
      !param[i].hasOwnProperty('outStatisticFieldName')
    ) {
      return false
    }

    // 子元素的statisticType、onStatisticField以及outStatisticFieldName必须不为空
    if (
      isNull(param[i]['statisticType']) ||
      isNull(param[i]['onStatisticField']) ||
      isNull(param[i]['outStatisticFieldName'])
    ) {
      return false
    }

    // 子元素的statisticType、onStatisticField以及outStatisticFieldName必须为String类型
    if (
      !isString(param[i]['statisticType']) ||
      !isString(param[i]['onStatisticField']) ||
      !isString(param[i]['outStatisticFieldName'])
    ) {
      return false
    }
  }

  return true
}

/**
 * 检测输入参数类型是否正确
 * @private
 * @param {String} type 输入参数类型
 * @param {Any} param 输入参数
 * @return {Boolean} 是否是正确的类型
 * */
function checkType(type, param) {
  if (typeof type === 'function') {
    return type(param)
  }
  let flag
  switch (type) {
    case 'String':
      flag = isString(param)
      break
    case 'Number':
      flag = isNumber(param)
      break
    case 'Boolean':
      flag = isBoolean(param)
      break
    case 'Extent':
      flag = param instanceof Extent
      break
    case 'Geometry':
      flag = param instanceof Geometry
      break
    case 'Point':
      flag = param instanceof Point
      break
    case 'Polygon':
      flag = param instanceof Polygon
      break
    case 'MultiPolygon':
      flag = param instanceof MultiPolygon
      break
    case 'Circle':
      flag = param instanceof Circle
      break
    case 'LineString':
      flag = param instanceof LineString
      break
    case 'MultiLineString':
      flag = param instanceof MultiLineString
      break
    case 'LineString | MultiLineString':
      flag = param instanceof LineString || param instanceof MultiLineString
      break
    case 'Polygon | Extent':
      flag = param instanceof Polygon || param instanceof Extent
      break
    case 'Array':
      flag = param instanceof Array
      break
    case 'Object':
      flag = param instanceof Object
      break
    case 'OutStatistics':
      flag = isOutStatistics(param)
      break
    case 'FeatureSet':
      flag = param instanceof FeatureSet
      break
    case 'FeatureCollection':
      flag =
        param instanceof Object &amp;&amp;
        !(param instanceof Array) &amp;&amp;
        param.hasOwnProperty('features') &amp;&amp;
        param.type === 'FeatureCollection'
      break
    case 'Color':
      flag = param instanceof Color
      break
    default:
      flag = isString(param)
  }

  return flag
}

/**
 * 检测输入参数正确性
 * @private
 * @param {Object} options 输入参数
 * @param {Object} checkOptions 检测规则
 * */
function checkParam(options, checkOptions) {
  // 是否检测通过
  let isChecked = true
  // 错误信息
  let errorMessage = ''
  // 错误类型
  let errorType = ''
  // 错误变量名
  let wrongKey
  // 请求参数
  let queryString = ''

  // 不通过检测不走下面的逻辑
  try {
    // 检测类型
    let flag = true
    Object.keys(checkOptions).forEach(function (key) {
      if (
        (options.hasOwnProperty(key) &amp;&amp; checkOptions.hasOwnProperty(key)) ||
        (checkOptions.hasOwnProperty(key) &amp;&amp; checkOptions[key].required)
      ) {
        // 检测空输入
        if (checkOptions[key].required) {
          // 不是多选一
          if (isNull(checkOptions[key].oneOf)) {
            if (isNull(options[key])) {
              wrongKey = key
              throw new Error('isNull')
            }
          } // 是多选一,如果都为空,才报错
          else {
            // 是否都为空
            let allIsNull = false

            // 确定本身是否为空
            if (isNull(options[key])) {
              allIsNull = true
            }

            // 确定其他的可选参数是否为空
            for (let i = 0; i &lt; checkOptions[key].oneOf.length; i++) {
              if (!isNull(options[checkOptions[key].oneOf[i]])) {
                allIsNull = false
                break
              }
            }

            // 如果都为空,报错
            if (allIsNull) {
              wrongKey = `${key},${checkOptions[key].oneOf.toString()}`
              throw new Error('isNull')
            }
          }
        }

        // 由于上面做了多选一的判断,这里进行下非空判断
        if (!isNull(options[key])) {
          flag = checkType(checkOptions[key].type, options[key])
        }

        if (!flag) {
          wrongKey = key
          throw new Error('wrongType')
        }
      }
    })

    if (flag) {
      const fields = []
      Object.keys(checkOptions).forEach((key) => {
        if (checkOptions.hasOwnProperty(key)) {
          fields.push(key)
        }
      })
      if (options.useObject) {
        queryString = getParametersObject(fields, options, checkOptions)
      } else {
        queryString = getParameters(fields, options, checkOptions)
      }
    }
  } catch (e) {
    isChecked = false
    switch (e.message) {
      case 'isNull':
        errorMessage = `${wrongKey}值不能为空!`
        errorType = 'isNull'
        Log.error(errorMessage)
        break
      case 'wrongType':
        errorMessage = `${wrongKey}类型错误!`
        errorType = 'isWrongType'
        Log.error(errorMessage)
        break
      default:
        errorMessage = `${wrongKey}值不能为空!`
        errorType = 'isNull'
        Log.error(errorMessage)
    }
  }

  return {
    isChecked,
    errorMessage,
    errorType,
    queryString
  }
}

/**
 * 验证所有PathParameter参数的正确性,PathParameter里的参数都是必填参数,必须验证正确性
 * @private
 * @param {Object} checkOptions 验证对象
 * @param {Object} options 请求参数对象
 * @return {Object} 是否验证通过对象
 * */
function checkPathParameters(checkOptions, options) {
  let errorType = ''
  let errorMessage = ''
  let isChecked = true

  // try&amp;catch是为了跳出forEach的循环
  try {
    Object.keys(checkOptions).forEach((key) => {
      // 要检测某个参数
      if (checkOptions.hasOwnProperty(key)) {
        // 有这个参数的值
        if (options.hasOwnProperty(key)) {
          const param = options[key]

          // 非空判断
          if (isNull(param)) {
            errorType = 'isNull'
            isChecked = false
            throw new Error(`${key}不能为空!`)
          }

          // 类型判断
          if (!checkType(checkOptions[key].type, options[key])) {
            errorType = 'isWrongType'
            isChecked = false
            throw new Error(`${key}类型错误!`)
          }
        } else {
          // 没有这个参数的值
          errorType = 'isNull'
          isChecked = false
          throw new Error(`${key}不能为空!`)
        }
      }
    })
  } catch (e) {
    Log.error(e)
    errorMessage = e
    return {
      isChecked,
      errorMessage,
      errorType
    }
  }

  return {
    isChecked,
    errorMessage,
    errorType
  }
}

/**
 * 获取XML的DOM对象
 * @param xml xml字符串对象
 * @return string
 */
function getDoc(xml) {
  let xmlDoc = null
  if (window.DOMParser) {
    const parser = new DOMParser()
    xmlDoc = parser.parseFromString(xml, 'text/xml')
  } else {
    // IE
    // eslint-disable-next-line no-undef
    xmlDoc = new ActiveXObject('Microsoft.XMLDOM')
    xmlDoc.async = 'false'
    xmlDoc.loadXML(xml)
  }

  return xmlDoc
}

/**
 * 从DOM元素中获取信息
 * @param dom dom元素
 * @param WMSInfo WMS信息对象
 */
function getWMSInfoFromDOM(dom, WMSInfo) {
  // 取得整个图层的Title信息
  if (dom.nodeName === 'Name') {
    WMSInfo.name = dom.innerHTML
  } else if (dom.nodeName === 'Abstract') {
    // WMS的1.1.1版本信息
    WMSInfo.abstract = dom.innerHTML
  } else if (dom.nodeName === 'Title') {
    let title = dom.innerHTML
    // 注意排除文件夹名
    if (title.indexOf(':') > -1) {
      title = title.split(':')[1]
    }
    WMSInfo.title = title
  } else if (dom.nodeName === 'SRS') {
    // 取得整个图层的SRS信息
    WMSInfo.srs.push(dom.innerHTML)
  } else if (dom.nodeName === 'CRS') {
    // 取得整个图层的CRS信息
    WMSInfo.crs.push(dom.innerHTML)
  } else if (dom.nodeName === 'BoundingBox') {
    // 取得整个图层的BoundingBox信息
    let boundingBox = {}
    // WMS 1.1.1版本是SRS
    if (dom.attributes.SRS) {
      boundingBox = {
        minx: dom.attributes.minx.value,
        miny: dom.attributes.miny.value,
        maxx: dom.attributes.maxx.value,
        maxy: dom.attributes.maxy.value
      }
      boundingBox.srs = dom.attributes.SRS.value
    } else if (dom.attributes.CRS) {
      const EPSG = dom.attributes.CRS.value
      const epsgNo = Number(EPSG.split(':')[1])
      // 高斯坐标系,xy反转
      if (
        (epsgNo >= 2327 &amp;&amp; epsgNo &lt;= 2442) ||
        (epsgNo >= 4491 &amp;&amp; epsgNo &lt;= 4554) ||
        (epsgNo >= 21413 &amp;&amp; epsgNo &lt;= 21423) ||
        (epsgNo >= 21473 &amp;&amp; epsgNo &lt;= 21483)
      ) {
        boundingBox = {
          minx: dom.attributes.miny.value,
          miny: dom.attributes.minx.value,
          maxx: dom.attributes.maxy.value,
          maxy: dom.attributes.maxx.value
        }
      }
      // 经纬度,xy反转
      else if (
        epsgNo === 4326 ||
        epsgNo === 4214 ||
        epsgNo === 4490 ||
        epsgNo === 4610
      ) {
        boundingBox = {
          minx: dom.attributes.miny.value,
          miny: dom.attributes.minx.value,
          maxx: dom.attributes.maxy.value,
          maxy: dom.attributes.maxx.value
        }
      }
      // 其他xy正常
      else {
        boundingBox = {
          minx: dom.attributes.minx.value,
          miny: dom.attributes.miny.value,
          maxx: dom.attributes.maxx.value,
          maxy: dom.attributes.maxy.value
        }
      }
      // WMS 1.3.0版本是CRS
      boundingBox.crs = dom.attributes.CRS.value
    }
    WMSInfo.boundingBox.push(boundingBox)
  } else if (dom.nodeName === 'LatLonBoundingBox') {
    // WMS的1.1.1版本信息
    WMSInfo.latLonBoundingBox = {
      minx: dom.attributes.miny.value,
      miny: dom.attributes.minx.value,
      maxx: dom.attributes.maxy.value,
      maxy: dom.attributes.maxx.value
    }
  } else if (dom.nodeName === 'EX_GeographicBoundingBox') {
    // WMS的1.3.0版本信息
    WMSInfo.geographicBoundingBox = {
      westBoundLongitude: dom.childNodes[0].innerHTML,
      eastBoundLongitude: dom.childNodes[1].innerHTML,
      southBoundLatitude: dom.childNodes[2].innerHTML,
      northBoundLatitude: dom.childNodes[3].innerHTML
    }
  }
}

/**
 * 将XML的Document对象转换为JSON字符串
 * @param xmlDoc xml的Document对象
 * @param version WMS版本
 * @return {Object} WMS的元数据信息
 */
function getWMSInfoFromXML(xmlDoc, version) {
  const WMSInfo = {
    boundingBox: [],
    layer: []
  }

  if (version === '1.3.0') {
    WMSInfo.crs = []
  } else {
    WMSInfo.srs = []
  }

  // 获取xml文档的所有子节点
  const nodeList = xmlDoc.childNodes

  for (let i = 0; i &lt; nodeList.length; i++) {
    // 取得localName为WMT_MS_Capabilities的子元素,注意一定是localName
    if (
      nodeList[i].nodeName === 'WMT_MS_Capabilities' ||
      nodeList[i].nodeName === 'WMS_Capabilities'
    ) {
      const childNodes = nodeList[i].childNodes
      for (let j = 0; j &lt; childNodes.length; j++) {
        // 只取nodeName为Capability的子元素
        if (childNodes[j].nodeName === 'Capability') {
          const cbChildren = childNodes[j].childNodes
          for (let k = 0; k &lt; cbChildren.length; k++) {
            // 取Capability里面名字为Layer的子元素
            if (cbChildren[k].nodeName === 'Layer') {
              const layerChildren = cbChildren[k].childNodes
              // 取得整个图层的WMS信息
              for (let m = 0; m &lt; layerChildren.length; m++) {
                // 取得所有Layer信息
                if (layerChildren[m].nodeName === 'Layer') {
                  const layerInfos = layerChildren[m].childNodes
                  const layerInfo = {
                    boundingBox: []
                  }
                  if (version === '1.3.0') {
                    layerInfo.crs = []
                  } else {
                    layerInfo.srs = []
                  }
                  for (let n = 0; n &lt; layerInfos.length; n++) {
                    // 取得单个图层的WMS信息
                    getWMSInfoFromDOM(layerInfos[n], layerInfo)
                  }
                  WMSInfo.layer.push(layerInfo)
                } else {
                  // 取得其他信息
                  getWMSInfoFromDOM(layerChildren[m], WMSInfo)
                }
              }
              break
            }
          }
          break
        }
      }
      break
    }
  }

  return WMSInfo
}

/**
 * 将XML的Document对象转换为JSON字符串
 * @param xmlDoc xml的Document对象
 * @return {Object} WMTS的元数据信息
 */
function getWMTSInfoFromXML(xmlDoc) {
  const rootChildren = xmlDoc.childNodes
  const WMTSInfo = {
    layer: {
      infoFormat: [],
      tileMatrixSetLink: []
    },
    tileMatrixSet: []
  }

  for (let i = 0; i &lt; rootChildren.length; i++) {
    // 仅取Capabilities上的信息
    if (rootChildren[i].nodeName === 'Capabilities') {
      const cbChildren = rootChildren[i].childNodes
      for (let j = 0; j &lt; cbChildren.length; j++) {
        // 仅取Contents上的信息
        if (cbChildren[j].nodeName === 'Contents') {
          const ctChildren = cbChildren[j].childNodes
          for (let k = 0; k &lt; ctChildren.length; k++) {
            // 获取Layer上的信息
            if (ctChildren[k].nodeName === 'Layer') {
              const layerInfos = ctChildren[k].childNodes
              for (let x = 0; x &lt; layerInfos.length; x++) {
                if (layerInfos[x].nodeName === 'ows:Title') {
                  WMTSInfo.layer.title = layerInfos[x].innerHTML
                } else if (layerInfos[x].nodeName === 'ows:Identifier') {
                  WMTSInfo.layer.identifier = layerInfos[x].innerHTML
                } else if (layerInfos[x].nodeName === 'ows:BoundingBox') {
                  const boundingBox = {}
                  for (let l = 0; l &lt; layerInfos[x].childNodes.length; l++) {
                    if (
                      layerInfos[x].childNodes[l].nodeName === 'ows:LowerCorner'
                    ) {
                      boundingBox.lowerCorner =
                        layerInfos[x].childNodes[l].innerHTML
                    }
                    if (
                      layerInfos[x].childNodes[l].nodeName === 'ows:UpperCorner'
                    ) {
                      boundingBox.upperCorner =
                        layerInfos[x].childNodes[l].innerHTML
                    }
                  }
                  WMTSInfo.layer.boundingBox = boundingBox
                } else if (layerInfos[x].nodeName === 'ows:WGS84BoundingBox') {
                  WMTSInfo.layer.WGS84BoundingBox = {
                    lowerCorner: layerInfos[x].childNodes[0].innerHTML,
                    upperCorner: layerInfos[x].childNodes[1].innerHTML
                  }
                } else if (layerInfos[x].nodeName === 'Style') {
                  const Style = {}
                  for (let l = 0; l &lt; layerInfos[x].childNodes.length; l++) {
                    if (
                      layerInfos[x].childNodes[l].nodeName === 'ows:Identifier'
                    ) {
                      Style.identifier = layerInfos[x].childNodes[l].innerHTML
                    }
                    if (layerInfos[x].childNodes[l].nodeName === 'ows:Title') {
                      Style.title = layerInfos[x].childNodes[l].innerHTML
                    }
                  }
                  WMTSInfo.layer.Style = Style
                } else if (layerInfos[x].nodeName === 'Format') {
                  WMTSInfo.layer.format = layerInfos[x].innerHTML
                } else if (layerInfos[x].nodeName === 'InfoFormat') {
                  WMTSInfo.layer.infoFormat.push(layerInfos[x].innerHTML)
                } else if (layerInfos[x].nodeName === 'TileMatrixSetLink') {
                  const links = layerInfos[x].childNodes
                  const TileMatrixSetLink = {
                    tileMatrixSetLimits: []
                  }

                  for (let w = 0; w &lt; links.length; w++) {
                    if (links[w].nodeName === 'TileMatrixSet') {
                      TileMatrixSetLink.tileMatrixSet = links[w].innerHTML
                    } else if (links[w].nodeName === 'TileMatrixSetLimits') {
                      const limits = links[w].childNodes

                      for (let y = 0; y &lt; limits.length; y++) {
                        const tls = limits[y].childNodes
                        const TileMatrixLimits = {}

                        for (let z = 0; z &lt; tls.length; z++) {
                          if (tls[z].nodeName === 'TileMatrix') {
                            TileMatrixLimits.tileMatrix = tls[z].innerHTML
                          } else if (tls[z].nodeName === 'MinTileRow') {
                            TileMatrixLimits.minTileRow = tls[z].innerHTML
                          } else if (tls[z].nodeName === 'MaxTileRow') {
                            TileMatrixLimits.maxTileRow = tls[z].innerHTML
                          } else if (tls[z].nodeName === 'MinTileCol') {
                            TileMatrixLimits.minTileCol = tls[z].innerHTML
                          } else if (tls[z].nodeName === 'MaxTileCol') {
                            TileMatrixLimits.maxTileCol = tls[z].innerHTML
                          }
                        }

                        TileMatrixSetLink.tileMatrixSetLimits.push(
                          TileMatrixLimits
                        )
                      }
                    }
                  }

                  WMTSInfo.layer.tileMatrixSetLink.push(TileMatrixSetLink)
                }
              }
            } else if (ctChildren[k].nodeName === 'TileMatrixSet') {
              // 获取TileMatrixSet上的信息
              const TileMatrixSet = ctChildren[k].childNodes
              const tileMatrixSet = {
                tileMatrix: []
              }

              for (let m = 0; m &lt; TileMatrixSet.length; m++) {
                if (TileMatrixSet[m].nodeName === 'ows:Title') {
                  tileMatrixSet.title = TileMatrixSet[m].innerHTML
                } else if (TileMatrixSet[m].nodeName === 'ows:Abstract') {
                  tileMatrixSet.abstract = TileMatrixSet[m].innerHTML
                } else if (TileMatrixSet[m].nodeName === 'ows:Identifier') {
                  tileMatrixSet.identifier = TileMatrixSet[m].innerHTML
                } else if (TileMatrixSet[m].nodeName === 'ows:SupportedCRS') {
                  tileMatrixSet.supportedCRS = TileMatrixSet[m].innerHTML
                } else if (TileMatrixSet[m].nodeName === 'TileMatrix') {
                  const TileMatrix = TileMatrixSet[m].childNodes
                  const tileMatrix = {}

                  for (let n = 0; n &lt; TileMatrix.length; n++) {
                    if (TileMatrix[n].nodeName === 'ows:Identifier') {
                      tileMatrix.identifier = TileMatrix[n].innerHTML
                    } else if (TileMatrix[n].nodeName === 'ScaleDenominator') {
                      tileMatrix.scaleDenominator = TileMatrix[n].innerHTML
                    } else if (TileMatrix[n].nodeName === 'TopLeftCorner') {
                      tileMatrix.topLeftCorner = TileMatrix[n].innerHTML
                    } else if (TileMatrix[n].nodeName === 'TileWidth') {
                      tileMatrix.tileWidth = TileMatrix[n].innerHTML
                    } else if (TileMatrix[n].nodeName === 'TileHeight') {
                      tileMatrix.tileHeight = TileMatrix[n].innerHTML
                    } else if (TileMatrix[n].nodeName === 'MatrixWidth') {
                      tileMatrix.matrixWidth = TileMatrix[n].innerHTML
                    } else if (TileMatrix[n].nodeName === 'MatrixHeight') {
                      tileMatrix.matrixHeight = TileMatrix[n].innerHTML
                    }
                  }

                  tileMatrixSet.tileMatrix.push(tileMatrix)
                }
              }

              WMTSInfo.tileMatrixSet.push(tileMatrixSet)
            }
          }
          break
        }
      }
      break
    }
  }

  return WMTSInfo
}

/**
 * 将XML的Document对象转换为JSON字符串
 * @param xmlDoc xml的Document对象
 * @return {Object} WFS的元数据信息
 */
function getWFSInfoFromXML(xmlDoc) {
  const rootChildren = xmlDoc.childNodes
  const WFSInfo = {
    featureTypeList: []
  }

  // 循环子元素
  for (let i = 0; i &lt; rootChildren.length; i++) {
    if (rootChildren[i].nodeName === 'wfs:WFS_Capabilities') {
      const cpChildren = rootChildren[i].childNodes
      for (let m = 0; m &lt; cpChildren.length; m++) {
        // 只拿FeatureTypeList里的数据
        if (cpChildren[m].nodeName === 'FeatureTypeList') {
          const ftList = cpChildren[m].childNodes
          for (let j = 0; j &lt; ftList.length; j++) {
            // 只拿FeatureType里的数据
            if (ftList[j].nodeName === 'FeatureType') {
              const featureType = {}
              const ftChildren = ftList[j].childNodes
              for (let k = 0; k &lt; ftChildren.length; k++) {
                if (ftChildren[k].nodeName.toLowerCase() === 'name') {
                  featureType.name = ftChildren[k].innerHTML
                } else if (ftChildren[k].nodeName.toLowerCase() === 'title') {
                  featureType.title = ftChildren[k].innerHTML
                } else if (
                  ftChildren[k].nodeName.toLowerCase() === 'abstract'
                ) {
                  featureType.abstract = ftChildren[k].innerHTML
                } else if (
                  ftChildren[k].nodeName.toLowerCase() === 'defaultsrs'
                ) {
                  featureType.defaultSRS = ftChildren[k].innerHTML
                } else if (
                  ftChildren[k].nodeName.toLowerCase() ===
                  'ows:wgs84boundingbox'
                ) {
                  featureType.WGS84BoundingBox = {
                    lowerCorner: ftChildren[k].childNodes[0].innerHTML,
                    UpperCorner: ftChildren[k].childNodes[1].innerHTML
                  }
                }
              }
              WFSInfo.featureTypeList.push(featureType)
            }
          }
          break
        }
      }
    }
  }

  return WFSInfo
}

function parseWFSElementForSpatialReference(element) {
  let srsName = 'EPSG:4326'
  if (!element) {
    return srsName
  }
  const _srsName = element.getAttribute('srsName')
  if (!_srsName) return srsName
  const res = _srsName.match(/EPSG::\d+/)
  if (res[0]) {
    srsName = `EPSG:${res[0].replace('EPSG::', '')}`
  }
  return srsName
}

function getWFSFeature(xmlDoc) {
  const rootChildren = xmlDoc.childNodes
  const WFSFeatureDom = rootChildren[0].childNodes
  const WFSFeature = new FeatureSet()

  for (let i = 0; i &lt; WFSFeatureDom.length; i++) {
    const WFSSubLayer = WFSFeatureDom[i].childNodes[0]
    const WFSSubLayerChildren = WFSSubLayer.childNodes
    const attributes = {}
    let geometry = undefined
    for (let j = 0; j &lt; WFSSubLayerChildren.length; j++) {
      // 多边形几何,确保节点名称包含:the_geom
      if (WFSSubLayerChildren[j].nodeName.indexOf(':the_geom') > -1) {
        // 遍历子节点,最后找到节点名包含exterior的节点,里面的就是多边形的点坐标
        const WFSGeometry = WFSSubLayerChildren[j]
        // 解析空间参考系
        const srsName = parseWFSElementForSpatialReference(
          WFSGeometry.childNodes[0]
        )
        WFSFeature.spatialReference = new SpatialReference(srsName)
        if (WFSGeometry.childNodes[0].nodeName.indexOf('MultiSurface') > -1) {
          const WFSMultiSurface = WFSGeometry.childNodes[0]
          const WFSSurfaceMembers = WFSMultiSurface.childNodes
          if (WFSSurfaceMembers.length === 1) {
            const WFSPolygon = WFSSurfaceMembers[0].childNodes[0]
            const WFSPolygonChildNodes = WFSPolygon.childNodes
            for (let k = 0; k &lt; WFSPolygonChildNodes.length; k++) {
              if (WFSPolygonChildNodes[k].nodeName.indexOf('exterior') > -1) {
                const WFSPolygonExterior = WFSPolygonChildNodes[k]
                const WFSPolygonExteriorPoints =
                  WFSPolygonExterior.childNodes[0].childNodes[0].innerHTML.split(
                    ' '
                  )
                const exteriorPoints = []
                for (let l = 0; l &lt; WFSPolygonExteriorPoints.length; l += 2) {
                  exteriorPoints.push([
                    Number(WFSPolygonExteriorPoints[l]),
                    Number(WFSPolygonExteriorPoints[l + 1])
                  ])
                }
                geometry = new Polygon({
                  coordinates: [exteriorPoints]
                })
              }
            }
          } else if (WFSSurfaceMembers.length > 1) {
            // 未测试该情况,要向igs了解
          }
        }
        // 线几何,确保节点名称包含MultiCurve
        else if (
          WFSGeometry.childNodes[0].nodeName.indexOf('MultiCurve') > -1
        ) {
          // 遍历子节点,最后找到节点名包含posList的节点,里面的就是线的点坐标
          const WFSMultiSurface = WFSGeometry.childNodes[0]
          const WFSSurfaceMembers = WFSMultiSurface.childNodes
          if (WFSSurfaceMembers.length === 1) {
            const WFSLine = WFSSurfaceMembers[0].childNodes[0]
            const WFSLineChildNodes = WFSLine.childNodes
            for (let k = 0; k &lt; WFSLineChildNodes.length; k++) {
              if (WFSLineChildNodes[k].nodeName.indexOf('posList') > -1) {
                const WFSLineString = WFSLineChildNodes[k]
                const WFSLineStringPoints = WFSLineString.innerHTML.split(' ')
                const lineStringPoints = []
                for (let l = 0; l &lt; WFSLineStringPoints.length; l += 2) {
                  lineStringPoints.push([
                    Number(WFSLineStringPoints[l]),
                    Number(WFSLineStringPoints[l + 1])
                  ])
                }
                geometry = new LineString({
                  coordinates: lineStringPoints
                })
              }
            }
          } else if (WFSSurfaceMembers.length > 1) {
            // 未测试该情况,要向igs了解
          }
        }
        // 点几何,确保节点名称包含MultiCurve
        else if (
          WFSGeometry.childNodes[0].nodeName.indexOf('MultiPoint') > -1
        ) {
          // 遍历子节点,最后找到节点名包含posList的节点,里面的就是线的点坐标
          const WFSMultiPoint = WFSGeometry.childNodes[0]
          const WFSPointMembers = WFSMultiPoint.childNodes
          if (WFSPointMembers.length === 1) {
            const WFSPoint = WFSPointMembers[0].childNodes[0]
            const WFSPointPos = WFSPoint.childNodes[0].innerHTML.split(' ')
            geometry = new Point({
              coordinates: [Number(WFSPointPos[0]), Number(WFSPointPos[1])]
            })
          } else if (WFSPointMembers.length > 1) {
            // 未测试该情况,要向igs了解
          }
        }
      }
      // 属性信息
      else {
        let key = WFSSubLayerChildren[j].nodeName
        key = key.split(':')[1]
        attributes[key] = WFSSubLayerChildren[j].innerHTML
      }
    }
    const feature = new Feature({
      geometry,
      attributes
    })
    WFSFeature.features.push(feature)
  }

  return WFSFeature
}

function fromQueryResult(result) {
  function _fromQueryResult(result) {
    if (
      !result.hasOwnProperty('SFEleArray') ||
      !result.hasOwnProperty('AttStruct') ||
      (result.hasOwnProperty('SFEleArray') &amp;&amp; !result.SFEleArray) ||
      (result.hasOwnProperty('AttStruct') &amp;&amp; !result.AttStruct)
    ) {
      return []
    }
    const SFEleArray = result.SFEleArray
    const AttStruct = result.AttStruct
    const featureSet = new FeatureSet({
      spatialReference: new SpatialReference('EPSG:0000')
    })
    let feature
    let geometry
    let coordinates
    for (let i = 0; i &lt; SFEleArray.length; i++) {
      const attributes = {}
      for (let j = 0; j &lt; SFEleArray[i].AttValue.length; j++) {
        if (SFEleArray[i].AttValue[j] !== '') {
          attributes[AttStruct.FldName[j]] = SFEleArray[i].AttValue[j]
        }
      }
      if (SFEleArray[i].fGeom) {
        switch (SFEleArray[i].ftype) {
          case 1:
            // 多个点
            const PntGeom = SFEleArray[i].fGeom.PntGeom
            // 获取所有点的点坐标
            coordinates = []
            for (let k = 0; k &lt; PntGeom.length; k++) {
              // 处理数据
              const dot = PntGeom[k].Dot
              coordinates.push([dot.x, dot.y])
            }
            geometry = new MultiPoint({
              coordinates
            })
            break
          case 2:
            // 多个线
            const LinGeom = SFEleArray[i].fGeom.LinGeom
            // 获取所有线的点坐标
            coordinates = []
            for (let k = 0; k &lt; LinGeom.length; k++) {
              // 处理下数据
              const dots = LinGeom[k].Line.Arcs[0].Dots
              const lineCos = []
              for (let i = 0; i &lt; dots.length; i++) {
                lineCos.push([dots[i].x, dots[i].y])
              }
              coordinates.push(lineCos)
            }
            geometry = new MultiLineString({
              coordinates
            })
            break
          case 3:
          default:
            // 多个多边形
            const RegGeom = SFEleArray[i].fGeom.RegGeom
            // 获取所有多边形的点坐标
            coordinates = []
            for (let k = 0; k &lt; RegGeom.length; k++) {
              // 这个是多边形的外圈
              const outerDots = RegGeom[k].Rings[0].Arcs[0].Dots
              // 处理下数据
              const outerCos = []
              for (let i = 0; i &lt; outerDots.length; i++) {
                outerCos.push([outerDots[i].x, outerDots[i].y])
              }
              const singleCoordinates = [outerCos]
              for (let m = 1; m &lt; RegGeom[k].Rings.length; m++) {
                // 这个是多边形的内圈
                // 处理数据
                const innerDots = RegGeom[k].Rings[m].Arcs[0].Dots
                const innerCos = []
                for (let i = 0; i &lt; innerDots.length; i++) {
                  innerCos.push([innerDots[i].x, innerDots[i].y])
                }
                singleCoordinates.push(innerCos)
              }
              coordinates.push(singleCoordinates)
            }
            geometry = new MultiPolygon({
              coordinates
            })
            break
        }
      }
      let symbol
      if (SFEleArray[i].GraphicInfo) {
        const GraphicInfo = SFEleArray[i].GraphicInfo
        switch (GraphicInfo.InfoType) {
          case 1:
            symbol = GraphicInfo.PntInfo
            break
          case 2:
            symbol = GraphicInfo.LinInfo
            break
          case 3:
          default:
            symbol = GraphicInfo.RegInfo
            break
        }
      }

      feature = new Feature({
        id: SFEleArray[i].FID,
        attributes,
        geometry,
        symbol
      })
      featureSet.features.push(feature)
    }
    return featureSet
  }

  if (result instanceof Array) {
    const featureSets = []
    for (let i = 0; i &lt; result.length; i++) {
      featureSets.push(_fromQueryResult(result[i]))
    }
    return featureSets
  } else {
    return [_fromQueryResult(result)]
  }
}

function formatBaseUrl(url) {
  const _index = url.indexOf('?')
  if (_index &lt; 0) {
    return {
      baseUrl: url,
      params: {}
    }
  }
  const _baseUrl = url.substring(0, _index)
  const _paramStr = url.substring(_index + 1, url.length)
  return {
    baseUrl: _baseUrl,
    paramString: _paramStr ? `&amp;${_paramStr}` : ''
  }
}

function ServiceConfigToken(Config) {
  let tokenStr = ''
  if (Config) {
    if (Config.tokenKey &amp;&amp; Config.tokenValue) {
      tokenStr = `${Config.tokenKey}=${Config.tokenValue}`
    }
  }
  return tokenStr
}

function ServiceConfigRequestInterceptors(Config, url) {
  url = defaultValue(url, '')
  const requestInterceptors = Config.request.interceptors
  const _urlOrigin = decodeURI(url)
  if (requestInterceptors &amp;&amp; requestInterceptors instanceof Array) {
    let _beforeUrl = ''
    for (let i = 0; i &lt; requestInterceptors.length; i++) {
      const urls = requestInterceptors[i].urls
      const before = requestInterceptors[i].before
      // 不存在urls,则应用到全部url上
      if (!urls) {
        if (before &amp;&amp; before instanceof Function) {
          const _before = before(url)
          if (_before) {
            _beforeUrl += _before
          }
        }
      }
      // urls是字符串
      else if (typeof urls === 'string') {
        const _url = decodeURI(urls)
        if (_urlOrigin.indexOf(_url) > -1) {
          if (before &amp;&amp; before instanceof Function) {
            const _before = before(url)
            if (_before) {
              _beforeUrl += _before
            }
          }
        }
      }
      // urls是数组
      else if (urls instanceof Array) {
        for (let j = 0; j &lt; urls.length; j++) {
          const _url = decodeURI(urls[j])
          if (_urlOrigin.indexOf(_url) > -1) {
            if (before &amp;&amp; before instanceof Function) {
              const _before = before(url)
              if (_before) {
                _beforeUrl += _before
              }
            }
          }
        }
      }
      if (_beforeUrl) {
        url = _beforeUrl
      }
    }
  }
  return url
}

function ServiceConfigResponseInterceptors(Config, url, response) {
  url = defaultValue(url, '')
  const requestInterceptors = Config.request.interceptors
  const _urlOrigin = decodeURI(url)
  if (requestInterceptors &amp;&amp; requestInterceptors instanceof Array) {
    for (let i = 0; i &lt; requestInterceptors.length; i++) {
      const urls = requestInterceptors[i].urls
      const after = requestInterceptors[i].after
      // 不存在urls,则应用到全部url上
      if (!urls || (urls instanceof Array &amp;&amp; urls.length === 0)) {
        if (after &amp;&amp; after instanceof Function) {
          const _after = after(response)
          if (_after) {
            return _after
          }
        }
      }
      // urls是字符串
      else if (typeof urls === 'string') {
        const _url = decodeURI(urls)
        if (_urlOrigin.indexOf(_url) > -1) {
          if (after &amp;&amp; after instanceof Function) {
            const _after = after(response)
            if (_after) {
              return _after
            }
          }
        }
      }
      // urls是数组
      else if (urls instanceof Array) {
        for (let j = 0; j &lt; urls.length; j++) {
          const _url = decodeURI(urls[j])
          if (_urlOrigin.indexOf(_url) > -1) {
            if (after &amp;&amp; after instanceof Function) {
              const _after = after(response)
              if (_after) {
                return _after
              }
            }
          }
        }
      }
    }
  }
  return response
}

export {
  fromQueryResult,
  checkParam,
  getParameters,
  checkPathParameters,
  getWMSInfoFromXML,
  getDoc,
  getWMTSInfoFromXML,
  getWFSInfoFromXML,
  getParametersObject,
  getWFSFeature,
  formatBaseUrl,
  ServiceConfigToken,
  ServiceConfigRequestInterceptors,
  ServiceConfigResponseInterceptors
}
</code></pre>
        </article>
    </section>




            </div>
            
            <footer class="footer">
                <div class="content has-text-centered">
                    <p>文档生成<a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.11</a></p>
                    <p class="sidebar-created-by">
                        <a href="http://www.smaryun.com" target="_blank">司马云</a> <span>© 2023 云生态圈</span>
                        <a href="http://192.168.82.89:8086/#/index" target="_blank">MapGIS Client for JavaScript</a>
                    </p>
                </div>
            </footer>
            
        </div>
        <div id="side-nav" class="side-nav">
            <div style="margin-bottom: 10px;">
                <img style="vertical-align: middle;margin-right: 10px;width: 30px;" src="./styles/anchor.png"/><a href="#page-title">构造函数</a>
            </div>
            <div style="margin-bottom: 10px;">
                <img style="vertical-align: middle;margin-right: 10px;width: 30px;" src="./styles/anchor.png"/><a href="#member">成员变量</a>
            </div>
            <div style="margin-bottom: 10px;">
                <img style="vertical-align: middle;margin-right: 10px;width: 30px;" src="./styles/anchor.png"/><a href="#function">方法</a>
            </div>
            <div>
                <img style="vertical-align: middle;margin-right: 10px;width: 30px;" src="./styles/anchor.png"/><a href="#event">事件</a>
            </div>
        </div>
    </div>
<script src="scripts/linenumber.js"> </script>

<script src="scripts/search.js"> </script>

</body>
</html>