瓦片常见问题

9/18/2024

瓦片加载不支持非标准切片。

如果使用官网的瓦片链接加载失败,可以打开 netWork 查看是否 key 的问题,是的话则需要进行替换,参考常见问题 - 第 3 方 token 有问题

# 如何更换加载的底图

map.basemap = 瓦片id || 瓦片name;
1

image

image

# 怎么加载其他坐标的瓦片?

  1. 首先需要了解下坐标系,可查看开发教程 - 基础知识点 - 坐标系及坐标变换

  2. 确定下自身服务时什么坐标系,比如是大地 2000,可添加crs参数

crs: "EPSG:4490";
1

# 加载时瓦片没有铺满全球

image

如果遇到这个提示,则表示有范围限制,可以询问下提供服务的人员,让其修改下

image

# 如何设置偏移量

// 该方法演示地图内部需要设置偏移量时如何加载
tileLayer = new mars3d.layer.XyzLayer({
  url: "'url'&z={z_2}&y={y}&x={x}",
  customTags: {
    z_2: function (imageryProvider, x, y, level) {
      return level - 2;
    },
  },
});
map.addLayer(tileLayer);
1
2
3
4
5
6
7
8
9
10

# 瓦片贴模型有问题,且注记有点模糊

目前已知的问题:

  1. 多个图层调整时会全部重新渲染;

  2. 目前不支持 EPSG:3857 Web 墨卡托投影坐标系的瓦片进行贴模型。

模糊问题 :注记层如果是自己的服务,可以发布到 21 级来避免拉伸 18 层的数据,就模糊了、

# 有的瓦片加载变的模糊,如高德

因为三维地图 webgl 的渲染机制不一样,是将图片重新 canves 绘制到 webgl 中。而高德、openlayer、leaflet 等二维地图是直接显示图片的,所以清晰些。

# 瓦片在南北极缺一个圆是怎么回事

image

web 墨卡托投影都会缺这个,加个 4326 的底图或图片放在下面;

顶部的那个圆圈的坐标系范围大概 85-90

# 有些瓦片发送的参数在 newWork 中显示有问题

如 ArcGisLayer 瓦片的花括号没有被转义、WmtsLayer 瓦片的 queryParameters 参数被编码

可参考下面代码类似修改下

Cesium.Resource.ReplaceUrl = function (url) {
  if (
    url.startsWith(
      "http://server.mars3d.cn/arcgis/rest/services/mars/guihua/MapServer"
    )
  ) {
    return url.replace(/\{/gm, "%200").replace(/\}/gm, "%20");
  } else {
    return url;
  }
};
1
2
3
4
5
6
7
8
9
10
11

# xyzLayer xyz 瓦片不支持单击事件嘛?但 api 中显示有

基类的代表所有的,但并不是所有的子类都有,目前仅 wmts、wms、arcgis 图层具备单击事件。

xyz 图层需要 enablePickFeatures、pickFeaturesUrl、getFeatureInfoFormats 等参数配置后才支持单击

# imageLayer 图片过大比如说 60M,加载不出来,显示黑屏

webgl 的图片分辨率不得超过 4096 像素,目前没法处理。

# 加载 wms 等服务需要注意的有哪些

  1. wms 只支持 4326、3857、4490 的标准切片,其他坐标系不支持

  2. 对应级别 tilematrix 找到的瓦片 tilerow&tilecol 这两个参数使用常见报错无效参考: https://blog.csdn.net/m0_69803146/article/details/135129924?spm=1001.2014.3001.5502

  3. 通用标准的服务,一般都是服务的支持或参数问题,具体细调服务的话,根据服务的 xml 服务描述信息进行调试测试,例如: http://mars3d.cn/editor-vue.html?key=ex_3_2_3&id=layer-tile/type/wms

  4. 如果服务请求的时候还涉及该大小写的话,参考//改 wms 请求的大小写

Cesium.Resource.ReplaceUrl = function (url) {
if (this.\_url.startsWith("//server.mars3d.cn/geoserver/mars/wms")) {
    return url.replaceAll("bbox", "BBOX")
} else {
    return url
}
}
1
2
3
4
5
6
7

# ArcGisLayer ArcGis 瓦片

# 如何修改服务本身的样式?

ArcGisLayer 不支持,是服务端渲染后的图片,加载到客户端显示的。

可以用 ArcGisWfsSingleLayer 或 ArcGisWfsLayer 来加载方式 symbol 配置颜色。

# WMTSLayer WMTS 瓦片

# format 是 application/json;type=geojson 类型的无法加载

这个属于 wfs,这种需要定制开发矢量瓦片(渲染为图片) 或按矢量数据显示 解析规则

# 无法配置 tilematrix 参数

加参数 tileMatrixSetID:"EPSG:4326_plyx:"

具体来源为gitee 提问 (opens new window)

# 如何自定义校验,比如时间校验

使用 customTags 参数

  url: "'url'&z={z_2}&y={y}&Created={time}",
  customTags: {
    time: function (imageryProvider, x, y, level) {
      return new Date().getTime();
    },
  },
1
2
3
4
5
6

# 如何配置 tilerow、tilecol 两个参数

是自动计算的,可以设置 rectangle 边界参数

# 如何加载自定义 popup

  1. 如果有对应的 wms 服务,可以参考示例加代码支持 popup

image

  1. 如果没有,需要加 click 事件做相关查询处理,查询数据返回后自行构造 Popup 对象弹窗显示即可。

# WMSLayer WMS 瓦片

# 可以添加移动事件嘛

理论上是可以加的,但是效率太差,移动时一直在查询服务,单击是单击一次查询一次更合理。

最后更新: 9/20/2024, 5:37:18 PM