OrkWard / ADGIS-project

Our implementation of Course GIS Application Development Project
MIT License
2 stars 0 forks source link

空间分析的功能实现和页面架构 #18

Closed OrkWard closed 2 years ago

OrkWard commented 2 years ago

这里的架构,用人话说,就是变量怎么存储。

我还没有添加用户管理,总之先把前后端搞通

也就是这种情况下,前端只需要在一个地方存储从服务器拿到的全部数据,我用的是vue的官方解决方案,Vuex,就是那个store文件夹里的东西。dataCollection是最外层变量,四个元素分别存储四种数据。然后这个变量是封装起来的不能直接操作,要在mutation里面添加操作函数,我也写了两个实例,如何调用函数的示例在MainPage部件的init函数里,如何读取变量的示例在AssetContainer部件的computed属性里。

对于具体每一个数据,都有四个属性,分别是存储数据本身的Provider(Cesium的类),数据名(url是手动命名,文件就是文件名),源(用户上传或者内置),还有格式,用Provider进行展示,格式提供信息,其他都是给用户看的。Javascript没有限制参数类型的能力(本来这个单文件应该用TypeScript写的,但我不知道webpack打包的时候是不是还要加点扩展,作罢),因此只能我口头上说说(忘记注释的屑)

实现空间分析的函数,大概是这样一个流程,首先写一个Python函数,传入GeoFrame变量,操作一下,导出为文件,添加到数据库里,前面你们都会,所以实际上你们写的时候返回一个GeoFrame变量,我写一个修饰器修饰一下就行(关于这个没听说过的看一下python decorator功能),然后这一堆函数简单搞搞做成一个服务。这又是个模糊的概念,举个例子,mapever.com/是一个正常网址,mapever.com/api/analysis/overlay/ 是一个正常层级网址,在进行get请求的时候在django里实际上发生了一个函数调用,这个函数除了返回一个页面外还可以返回其他东西,比如一个geojson,嗯然后我们还可以发post请求,比如请求的时候带两个文件名,这样这个函数就能拿到两个文件名,进行类似远程传参的操作(这样解释比较容易懂吧),然后前端把response里的数据拿出来传给Cesium的Provider,所谓服务差不多就是……就是一个能远程调用的函数,这样理解也无妨。总之我会写示例的。周末有作业和srtp,所以完全妹控。服务器的代码传上来其实没什么意义,因为数据库总不能放云端吧(草,我想起来我碰过一下的MongoDB,但是完全不会),所以新建一个文件夹放python的功能函数就行了……

啊对了对了我有两台电脑,寝室里这台开机时间(暂时)和我作息时间是一样的,所以大家可以随时发请求到10.185.22.111:8000

OrkWard commented 2 years ago

资源上传部分怎么设计我还没想清楚,你有什么想法也可以说,没想法就等下周我画个结构图 @blzheny

OrkWard commented 2 years ago

这一坨废话大概解释了一下调用服务的过程是怎么发生的,实际需要你们完成的东西非常简单,一大堆读入GeoDataFrame导出GeoDataFrame的函数,大部分都是简单的几行调用就能解决的问题,这是矢量部分,栅格部分要把Geoserver拉进来,这应该是我下周的折腾重心(希望能顺利解决吧……)

嗯然后前端是axios异步发请求处理,这个很好学的(大概)

现在有一个问题就是纯矢量数据,也就是点线面这类,不带属性表的,所有的处理原理上已经完全解决了(虽然是非常原始的解决方案),就差写出来,但带属性表的我还不知道怎么办,Cesium这个框架也没有展示数据表的部分,不如说地理数据可视化和其他数据可视化完全是两个东西……

可能我会再引入一个框架解决这个问题,比如D3,嗯这个问题也先放一边……或者干脆就不解决(笑)毕竟我们是面向Cesium和geopandas开发,多余的功能没有也无所谓

啊好烦,好想摆烂