hongfaqiu / MVTImageryProvider

Mapbox vector tiles(pbf) visulization on cesium
https://mvt-provider.opendde.com/
MIT License
54 stars 16 forks source link

vue-cli报错 #11

Closed gengyanlei closed 1 year ago

gengyanlei commented 1 year ago

vue3 + cesium1.104 + cesium-mvt-imagery-provider webpack版本较高,npm run serve出问题 image

hongfaqiu commented 1 year ago

可以提供一个最小复线的在线demo吗,webpack需要配置针对cesium配置alias,可以参考这个项目的webpack配置

gengyanlei commented 1 year ago

@hongfaqiu https://blog.csdn.net/LEILEI18A/article/details/125767733 由于cesium1.100版本以上有很多东西,所以参考的这个博客的第4种方法,设置的vue.config.js。正常安装的cesium就没问题。 然后,直接安装你在npm上的库,发现vue-cli run serve时就出现这个问题。

gengyanlei commented 1 year ago

@hongfaqiu 我将你的https://github.com/hongfaqiu/MVTImageryProvider/blob/main/src/utils/MVTImageryProvider/MVTImageryProvider.ts 这个代码手动改成了js,然后放到util.js中,npm run serve就可以了。 这是我的代码: cesium04.zip 但是加载不出矢量切片内容。

hongfaqiu commented 1 year ago

这个博客上的方法有点问题,修改如下: vue.config.js中alias改为如下:

alias: {
  'cesium': path.resolve(__dirname, './node_modules/cesium')
},

cesium模块引用改为如下形式,可启用ts辅助代码编写:

import { Viewer, Ion, CameraEventType } from "cesium";

也可以使用你之前的方式:

import * as Cesium from "cesium";

cesium静态资源引用地址改为:

import "cesium/Build/Cesium/Widgets/widgets.css";

最后,可以直接安装mvt-imagery-provider,正常引用:

import MVTImageryProvider from "mvt-imagery-provider";

需要注意的是cesium@1.104.0版本之后,ImageryProvider的readyPromise方式发生了变动,所以本包只能在cesium@1.103.0及以前的版本上运行

gengyanlei commented 1 year ago

@hongfaqiu 好的,非常感谢,对于webpack的问题,已经懂了。 然后cesium版本的问题也了解了,非常感谢。没有注意过版本的问题。

hongfaqiu commented 1 year ago

哈哈哈,客气了,我这边也没有针对新版本进行适配,不好意思啦,后面有空再修复一下

gengyanlei commented 1 year ago

对于webpack的问题,我加了cesium/Cesium.js就可以了,相当于没用到人家cesium package的import的推荐。

我现在其实想根据你这个库,后端用postgis动态生成矢量切片,前端采用mapbox-gl(非官方的)加载给cesium,然后点击查看属性;对于空间分析(缓冲区、搜索)都通过sql实现。 感觉不如arcgis for js api能实现很多功能。

gengyanlei commented 1 year ago

@hongfaqiu mapbox已经变成球了,但是三维的实力有些不如cesium;开源协议不行了。所以有没有1种思路,通过maplibre渲染,然后cesium加载。 如果有server的话,是不是cesium加载server的wms wmts更方便呢。但那样空间分析又不好实现了。

hongfaqiu commented 1 year ago

对于webpack的问题,我加了cesium/Cesium.js就可以了,相当于没用到人家cesium package的import的推荐。

我现在其实想根据你这个库,后端用postgis动态生成矢量切片,前端采用mapbox-gl(非官方的)加载给cesium,然后点击查看属性;对于空间分析(缓冲区、搜索)都通过sql实现。 感觉不如arcgis for js api能实现很多功能。

你说的这个是很常见的需求,我们早就做了,完全一样的流程,可以做的

hongfaqiu commented 1 year ago

cesium加载符合ogc协议的wms这些服务还是蛮方便的,也可以自定义展示查询效果,这一点terriajs做得蛮好的

gengyanlei commented 1 year ago

https://github.com/hongfaqiu/MVTImageryProvider/issues/11#issuecomment-1573052304 能不能根据maplibre官方库渲染,然后给cesium呢。和这个mvt-basic-render相比,前者实现难度大么?你们实现了么,大佬。

hongfaqiu commented 1 year ago

啊这,大佬不敢当。我最开始尝试过通过maplibre官方库改编pbf-basic-render,不过失败了,改动量巨大。mvt-basic-render的版本有点老了,很多新特性也不支持。 我觉得有可能的方案是通过protomaps.js来实现mapboxStyle在cesium上的渲染。 terrajs的方案是自己定义一些mvt的渲染样式,然后使用mapbox提供的pbf解析工具来渲染,reearth的cesium-mvt-imagery-provider也是这个方案

gengyanlei commented 1 year ago

protomap.js我也看到了,感觉和leaflet差别不大呢。 https://github.com/davenquinn/cesium-vector-provider 我看这个库是根据maplibre来实现的。我还没尝试呢

hongfaqiu commented 1 year ago

我也参考过他的这个库,不过他用的maplibregl版本也有点老了,升级到新版本后bug很多

gengyanlei commented 1 year ago

哎,那你们现在还是基于你的这个库做项目么? 对了,基于sql空间分析,cesium采用entities展示,如果我的缓存分析包含上万个数据,就又崩溃了。是不是还得通过这个库加载geojson,然后再渲染成1个图层。

hongfaqiu commented 1 year ago

我们这边是把数据切分成pbf瓦片,然后前端构造渲染样式之后生成符合mapboxStyle标准的json传给MVTImageryProvider构造图层进行渲染。 空间查询还是通过pg,再把查询结果geojson高亮在球上

gengyanlei commented 1 year ago

1.空间查询还是通过pg,再把查询结果geojson高亮在球上。万一数量比较大呢,比如缓冲区勾选了整个城市的建筑,那数量直接爆炸了。 2.我们这边是把数据切分成pbf瓦片,然后前端构造渲染样式之后生成符合mapboxStyle标准的json传给MVTImageryProvider构造图层进行渲染。还是通过你的库来实现的。你的库不可或缺

hongfaqiu commented 1 year ago

啊是的,所以高亮就只选了前一千条数据(无奈),其它数据的高亮就只能通过翻页自己手动高亮结果来实现了

gengyanlei commented 1 year ago

谢谢你啦。

hongfaqiu commented 1 year ago

哈哈哈哈,客气啦,那我把issue关了