怎么正确的走GIS开发这条路? 您所在的位置:网站首页 GIS工具 怎么正确的走GIS开发这条路?

怎么正确的走GIS开发这条路?

2022-12-27 21:30| 来源: 网络整理| 查看: 265

简单看了看这个问题下的回答,有卖课的,有卖付费专栏的,有从自己专业角度考虑的,有回答问题夹带了若干无关信息的,也有的确能列出个123的。

我很佩服各位答主的技术积累,但是我也很悲哀国内的 GIS 开发认识竟如此参差不齐、有失偏颇。

虽然我也有,但是我希望的是你觉得受益了主动给我打赏,觉得没必要花钱或者写得什么垃圾,甚至白嫖我也无所谓。我的知识没有那么卑微。

那我就从一个长期写博客,并游走于 GIS 和图形开发,各方面都涉猎一点的视角说说我的看法吧。

WebGIS 咬文嚼字

WebGIS 由两部分构成,Web 和 GIS。有人说你这是废话,但是我在经历这么多丛林湖泊后重新审视这个词的时候,才发觉它的出发点。

早年我还是学生的时候,我听到一个词:“Web框架”,一搜“nodejs Web框架”、“python Web框架”、“Java Web框架”,无外乎各种能支楞起一个服务器程序,向网络(无论局域网或广域网)提供服务能力,也许是接口,也许是 socket,或者静态文件服务,或者服务地址转发,或者就纯粹的网页服务,反正互联网能干的事情你都可以通过 Web框架 的开发实现。

但是幼小的心灵与学习到的现状有极大的不适应性:我以为的 Web框架就是写 Web网页前端的一些封装库、封装框架,譬如现在如日中天的 React 和 Vue 等,而不是 NextJS、NuxtJS、甚至是 Django、Flask、SpringMVC、ASP.NET Core 这种大而全的玩意儿。

扯远了,回到 WebGIS 来。

WebGIS 中的 Web,是 WebGIS 的背景。所有一切 Web 相关的玩意儿,无论是狭义的 Web 前端开发技术、Web 后端开发技术,还是广义上的 Web 知识体系,都是 构成 WebGIS 的基石之一。

另一个基石自然就是 GIS 学科知识基础,以及 GIS 应用知识基础。

有了明确的界限定义,我想我可以回答你的问题了。

GIS 基础

我觉得国内的就业环境,对 GIS 学生的要求已经放得不能再低了:

地图学基本知识熟稔于心常用 GIS 软件熟悉操作,包括但不限于数据生产、格式认知、配图出图等最最最基本的用法(恰好前一条就是这一条的基础,不懂坐标系,数据拖进去,对不齐的问题,抓瞎去?)GIS 理论基础基本过关,包括但不限于能清晰、简单地概括(用自己的话也可以)出 GIS 的概念(这是一切使用 GIS 任何知识和技术的前提)、数据在各种不同使用情况下的分类与质量检查(这是你应对任何空间数据的硬实力,不惧任何带空间特征的新数据格式,知道数据为什么有问题)、最常见的本科空间分析方法(至少你得知道空间分析的大分类吧)熟悉 Windows 操作系统的基本用法,没错,不会用电脑的白纸每年都有,系统快捷键、常用效率工具你总得趁手几个吧?

就这 4 条。我不指望你在学校里的课程都拿90以上,因为各个学校的各个课程有一些可能并没什么实际工作用途,甚至有的老师讲课水平之低,与行业需求脱钩,令人感到惋惜。

如果再加上本题的 开发,那么还要往上加码。

Web 开发能力

你这时候将面临着分支,是做基础能力的底层软件,还是做 API 侠做各种乱七八糟的需求(大多都不合理,哪行都一样)。

这决定了你的开发技术原型。可以都选吗?那我问问你,你觉得本科修十个学位怎么样?

基础能力的底层软件研发需要很长足的技术力积累,有几个能拿得出手的有深度的技术,有行业认识广度,并且十分需要一个伯乐(通俗的说,就是愿意做这块的团队吸纳你)。这样的条件太少了,凤毛麟角。

我觉得有一个 GitHub 仓库总结得很全面,关于 GIS 的技术,算是一个黄页吧:

有很多技术都有它的 Awesome 库,例如 awesome-webgl、awesome-vue 等。

API 侠除了前面提及的 GIS 基础能力外,大多数时候是“体力劳动”,你不会接触到特别需要动手从 0 开始写的理论实现,大多数时候是在跟“能用什么实现啊?”“为什么参数不对?”“怎么启动不了?”这种“为什么没人告诉我怎么做”的问题兜圈子。

又扯远了。

Web 开发能力,且不说它是 CS 等专业的基础知识,那毕竟是 Web 啊,是你 WebGIS 的基石。GIS 本身就诞生于计算机,GIS 本身不说可有可无,但是占比可高可低,最低下限只需要知道空间数据基本知识就可以,但是少了计算机相关的知识(无论理论或应用技术)几乎寸步难行。

开发语言,取决于你想做什么,只是调库的话,那就看你的环境中需要用什么,使用 GEOS/GDAL 等 C/C++ 系列的有可能是在做服务器、数据库、高性能后台,也有可能是数据生产模块;做前端应用,JavaScript 和火热的 TypeScript 跑不了的;普通的 Web 后台接入空间数据库,那么 Java/C#/Python/JavaScript(NodeJS)乃至 php 都是可选的工具链使用,有人说 C/C++ 的开发者必须熟悉编译过程,必须掌握构建编译工具、调试工具,我觉得合理,毕竟哪怕是 VC++ 跑在 Windows 上,VS 也是有很多地方是要调整、熟悉的;倘若是大前端,那么你还得清楚那一大串历史包袱、现代打包器、转译器、流程构建工具的使用和适用场景数据库技术,课本上的和应用上的可能有些区别,不过如果是数据库方面的开发、应用,SQL 多多少少了,安装和查手册那是基本功WebGIS 开发能力

上面说了一堆虚头八脑的东西,看似高深莫测,实际啥也没说 —— 好多人也许这么想。行,那我就举一些实例。

前端 2DGIS 开发:js/ts + 前端生态工具(占比4成),前端 WebGIS 2D 库占 2 成,GIS 理论基础 + WebGIS 技术基础 3 成,与后端和产品交流准确获取需求的能力 1 成前端 3DGIS 开发:js/ts + 前端生态工具(占比4成),图形学与 RTR 相关库例如 ThreeJS、CesiumJS 等的掌握(4成),GIS 理论基础 + WebGIS 技术基础 1 成,与后端和产品交流准确获取需求的能力 1 成数据生产工具的开发:任意的开发语言中级熟练程度(会自己找文档、找论坛、找官方求助、调试无压力)4成,数据结构与计算机图形学、图论基础 3 成(尤其是空间相关的数据结构),界面开发能力可有可无,数据库使用能力可有可无,GIS 理论基础 + WebGIS 技术基础 2 成,沟通能力 1 成后端服务开发:称手的或者业务上用的一个或多个 Web 框架的使用(自然包含它的开发语言熟练程度,3成),计算机网络 2 成,各种数据库使用 3 成,DevOps 等辅助手段 1 成,沟通能力 1 成其它种类...

以上权重只做近似。

语言基础

高市场占有率的自然要知道,无论什么,合适就好

WebGIS 技术基础

基于 GIS 理论基础(也就是本回答第一节),OGC WebGIS 标准要有了解,用时实事求是,耳熟能详的 WMS/WMTS/TMS/WFS 虽然老迈(XML真肿),但是奈何启动的 GeoServer 啥的依旧在用;SimpleFeature(简单要素)规范必须了解;其它各种数据格式的标准用到就简单看看。

最后请放过 Shapefile,有条件做决定的时候,我希望你放弃它,真的不要再用了:

新的 OGC API 正在激情讨论和制定中,有几个 API 已经被采纳,敬请关注!

前端常用 WebGIS 库简述

由于我混迹前端比较多些,这部分就多写写

OpenLayers,最经典的 2D GIS 库,API 的设计基本上符合 GIS 理论,团队不卖数据服务;API 基本齐全,也稳定;Leaflets,乌克兰朋友的作品,定位是可扩展的小型简易 2D 可视化,对移动端友好,API 较为简单,库本身也小,对非专业出身的开发者来说上手难度稍低;MapboxGL.js,一款 2D 出身但是有基于投影平面 3D 视图的库,大部分功能归于一个中央对象 Map,API 设计不是按 GIS 理论来的,也许对开发者来说找起来比较方便,可视化内核用的是 WebGL,所以自定义图层允许使用 WebGL 能力,甚至接入 Threejs,团队有提出一些巧妙的工具(earcut、turf 等)和数据规格(著名的 Mapbox 矢量瓦片),我给的评价是:一个套着地图的皮的 WebGL 库Maptalks,一款国人封装 WebGL 地图库,效果还不错,可与 threejs 一起使用ArcGIS API for JavaScript 4.x,商业作品,支持 2D/3D 视图但不能动画切换,API 设计上符合 GIS 理论,有 Esri 的风格,几乎完全可以不考虑去接触底层接口,配合 Enterprise 使用才是满血版CesiumJS,一个套着 10% 左右 GIS 技术的 WebGL 可视化库,凝结了众多数学、几何算法、RTR 成果,虽然号称 3D 地理可视化,可是通常被地理一词骗进去最后吭哧吭哧做了半年图形渲染的大有人在,把它看作前端 WebGL 可视化库中具备基本 GIS 能力的就可以了数据库简述

具备空间数据能力的数据库很多,我调查了排行榜的数据库管理系统,无论关系型,还是非关系型,多多少少都有。PostgreSQL 结合 PostGIS 插件是其中的佼佼者,读者可以参考我之前的文章:

PostGIS 给到你的是一套成熟的 GIS 工具集,基本来自积累多年成熟稳定的 GIS 库、图形库、图像库,以及结合 PostgreSQL 带来不错的空间索引能力。

SpatialLite 和 GeoPackage 虽然都基于 SQLite 开发而来,但是前者更像空间数据库,而后者像是一个可扩展的空间数据存储容器。

地理编码技术比较例外,它需要一个地名地点库,库越大,搜地址得坐标的结果才越准确、越能满足需求。

空间数据库与普通数据库的最大区别就是对外提供空间几何类型、空间索引能力、空间数据处理功能。所以,当你需要使用空间数据库的时候,仔细想想是不是真的需要这些能力,还是仅仅是为了存储一些图形、坐标。

二者并不独立,普通数据库中也可以有空间数据,取决于你的 DBMS 有没有空间模块。

DB ≠ DBMS

由于空间数据的特点,还可以在列数据库、kv数据库、对象型数据库中实现空间数据库。

最经典的例子就是 ArcGIS SpatialData Engine(ArcGIS SDE),ArcGIS 的 GeoDatabase 数据模型是完全面向对象的,具体可以参考 ArcObjects 的 UML 类图设计。

如何把 ArcGIS 这些面向对象的数据集存储到非文件地理数据库中?SDE 就是这个作用,虽然可以存储到关系数据库中,但是这是经过 SDE 转译了 ArcGIS 中的面向对象数据集的。

有关空间数据的分类,我觉得可以参考下我提出的一个不是很成熟的分层理论:

数据格式简述

再次鞭尸:

shp 年龄很大了,限制很多,但是我还是觉得,如果你有这个条件,不妨推动一下新格式的落地吧,入可接旧,出就不要输出旧的了。

具备空间特征的数据格式,都可以抓住空间这个特征,经过重重数学手段转换到 GIS 数据系统中。但就纯粹的 GIS 行业内数据来说,我认为其至少具备如下特征:

能存储空间几何数据,无论是 SFA 规范中的,还是图形中的 VertexBuffer 格式,亦或者是 CityEngine/Revit 中的参数化模型,还是建模软件中的数学公式模型可选的空间索引能力可选的非空间属性数据能力

三维中下一代的 3DTiles 和 I3S 都很好地做到了这三点,二维除了数据库之外也有不少优秀的实现,例如 FlatGeobuf:

不要忘了传统的 4D 数据理论,也是可以演进发展的。

小结

学海无涯苦作舟。高层提出的种种概念,数据治理、智慧城市、城市信息模型、数字孪生、城市信息化,哪个都好,都是对行业有期待的,可惜在落实过程中大多数沦为了拿来主义、拼凑产物,弱化了 GIS 的地位,只为博总结 ppt 数字一乐。

为什么做不起来?为什么硬改 ArcGIS 套皮称为 GeoScene?为什么不能像别人一样,base on something 就明确写出来,超链接给出来呢?这就是所谓的自主可控吗?

CGCS 2000 是一个高瞻远瞩的成果,不过“和 WGS84 差别不大,可以直接使用”是否是你心头不舒服的墨点呢?又有多少地方坐标系打着国家2000的名号,实际操作人员能准确说出(若无保密需求)投影方式、中央经线等关键参数呢?

缺,什么都缺,包括待遇。

噫嘘嚱,道阻且长,吾辈将上下而求索,希望中国 GIS 行业(非学术圈,毕业之后就对学术圈里不太了解了)有真正硬起来的那天。

本文有些地方较为主观,带情绪输出可能有失偏颇、写不周全,希望友善交流指正,不然你打我啊



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有