吐槽Skyline的编程和操作
【新注2019年7月28日】:看了很多的二次开发文档,无论是Skyline还是arcgis,抑或是监控等行业的API,都有一个非常严重的问题,就是API的可读,但无法串联成线。首先这些平台的API存在“青黄不接”,即要么太过简单,要么太过原始。所提供的API仅限如图层控制这么简单功能,个人主观能动性,尤其是参数配置、缓存管理等方面做的很差,编程人员不得不规避调用API中所导致的相关问题。参数的设置非常不合理,有些太过底层,传入的对象不能识别类型和类别。接口泛滥,无法将实体与接口对应起来。这应该也是开源产品做的比较优秀的地方。
【原文】
对于一个不是GIS毕业的孩子,Skyline 从5 到6编程越来越让我吃了。我想了下,根本原因是它越来越把它看做一个地理信息系统,不断引入地理方面的概念,同时不提供方便的方法进行格式转换。
1)首先要吐槽的IGeometry。
IGeometry是地理位置信息,可以是点,线,面等。Skyline提供的几个函数,包括CreateGeometryFromWKB,CreateGeometryFromWKT。那么什么是WKB和WKT呢,这个需要自己查资料,最后发现是OGC的一种通用格式。且不说构建这种格式需要编程了解什么是WKB或者WKT,单单构建WKT你都需要逐字去检查是否拼写错误。好吧,你或许说,自己可以写个处理函数进行转换。但是,Skyline创建任何三维对象都用一个IGeometry,到底这个IGeometry可以是什么呢?比如多边形按照理解可以理解为多线段,从而l提供MultiLine。也可以理解为多点的连接,从而提供MultiPoint。当然也可以理解为一个多边形,从而提供Polygon。但是Skyline并不理解前面两种格式!你让我情何以堪。你不会怪我思想不单纯吧。
2)参数object化
Object是什么,物体!你能理解我的Object指的是什么?好女人味哦!看这个函数
ITerrain3DPolygon65 Create3DPolygon(
IGeometry pIGeometry,
[double ObjectHeight = 20],
[object LineColor = 0xFF00FF00],
[object FillColor = 0xFF646464],
[AltitudeTypeCode AltitudeType = AltitudeTypeCode.ATC_TERRAIN_RELATIVE],
[string GroupID = ““],
[string Description = ""])
这里的LineColor和FillColor都是object类型。如果不看帮助文档,C#的智能提示会告诉你 LineColor是Object对象。好吧,那我就猜测,Color可以用RGB表示,也可以用HSB之类的表示吧。排除掉除RGB的颜色格式,我作为一般人还真想不到为啥用类型Object。费劲心机打开帮助文档,原来这是一个重载函数,object可以是IColor对象,也可以是number,也可以是HTML的字符串颜色格式。难道你不觉得object是一个炸弹么!
3)不支持高亮
无论哪个版本,Skyline都不支持高亮对象!这个特性让我个程序员成为众矢之的。所以凭借丰富的想象力,发明了把对象放大,查询属性构建立方体的包围盒,启动编辑状态,改变对象属性等等损招!一听到高亮,我分分钟想剖腹自杀!
4)使用TerrainExplorer Pro版本,在场景中选择一个对象,很难映射到图层树中去
这个 缺点导致你不得不一个个图层去查找对象,这对于编辑的时候实在是让人崩溃
5)矢量数据图层中对象选择后很难查看属性
这个也是很致命的,如果一个矢量图层被表示未Model,选择一个Model后要想查看属性,那么就会提示你不能查看,除非转换回去。这明显是矢量图层设计架构出现错误。
6)组对象必须通过矢量的方式才能附带属性
举例来说,你有一大堆模型,导入到平台中后发现模型是没有附件属性的。好像只能把这些模型转换为shp图层,然后对shp添加字段(也可以类似的采用Excel等格式)。这个缺点是很明显的,就是要么提前做好数据,否则后面再做,死人。
7)保存工程
Skyline的保存是很恶心的。为啥,因为你编辑一大堆后,发现错了一点,比如不小心删了个对象。这时候你要么放弃编辑的状态,要么保存后再把最后的错误进行修复。skyline的弱保存功能,使得对数据的编辑是让人抓狂的。
8)网络搭建能力弱
首先是配套的TerraGate要收费,但TerraGate基本只用来发布地形服务。三维模型的需要IIS,矢量shp文件不能网络下载(需要搭建WFS之类的服务)。所以要完整的搭建网络版还是需要蛮多知识的。
9)启动过程慢
哎呀,打开TerrainExplorer的首页越来越慢了...