专栏名称: CityMaker
CityMaker是国内领先的国产三维地理信息软件(3DGIS)平台和解决方案提供商,提供三维地理数据整合管理、浏览展示、服务发布、地形管理发布等多款专业应用软件产品、增值服务、整体解决方案等等。
目录
相关文章推荐
GiantPandaCV  ·  【ml-engineering ... ·  3 天前  
GiantPandaCV  ·  【翻译】使用PyTorch ... ·  4 天前  
GiantPandaCV  ·  【翻译】使用PyTorch ... ·  1 周前  
GiantPandaCV  ·  OpenAI o1 ... ·  6 天前  
51好读  ›  专栏  ›  CityMaker

CityMaker移动端开发入门

CityMaker  · 公众号  · 3D  · 2017-03-24 17:46

正文



本文介绍了CityMaker移动端开发基本流程,适用于刚接触CityMaker的Android开发人员。旨在便于用户尽快了解CityMaker移动端开发,快速完成APP搭建。主要内容包括:涉及的软件、移动端三维数据准备、SDK的调用、数据导入流程以及接口介绍等。



下面对这几部分内容分章节详细介绍:


1

涉及的软件


移动端开发涉及的软件包括:

CityMaker Android SDK,CityMaker Builder,CityMaker Server,Eclipse。



2

数据的准备


移动端共支持两种数据格式,即SDB和TDB,二者都是由FDB转换而来,在此仅介绍FDB到移动端数据的转换过程。


SDB是FDB针对移动端优化得到的模型场景数据,可以是模型图层或自定义符号化的矢量图层,能保留FDB下所有属性信息和模型信息,适合小范围业务精细数据的展示(如BIM),可以通过CityMaker Builder工具集一键转换得到。


TDB是将模型三角面片化得到的瓦片数据,更轻量,消耗机能更小,加载速度更快,渲染效率更高。可以使用CityMaker Server发布成服务访问,是移动端浏览大范围数据的首选


3

新建工程


Import SDK

在Eclipse的WorkSpace中导入CityMaker Android SDK,修改程序编码为UTF-8。


Runtime

在Eclipse内新建一个Android工程将libs,assets和src下除_TestActivity.java外所有文件拷贝至新的工程目录。


Project:在工程中res\layout中新建一个test.xml,其中SurfaceView即为三维控件。



在工程中src中新建com.gvitech.main包,并新建test.java。



更新AndroidManifest.xml文件,运行之,即可看见最原始的CityMaker控件。



4

工程设置模块


 设置授权文件:

方法:

SETLICENSEFILE(STRING PATH);

参数:

STRING PATH:LICENSE文件的绝对路径地址

样例代码:

RenderControl.get().SetLicenseFile("/sdcard/.../android_test.lic");


 设置基准高程:

方法:

SETPLANEHEIGHT(DOUBLE NEWVAL);

参数:

DOUBLE NEWVAL:新的基准高程值 当数据海拔较高时 设置为海拔类似值

样例代码:

RenderControl.get().objectManager.getReferencePlane().setPlaneHeight(1118);


 设置飞行时间:

方法:

SETFLYTIME(DOUBLE NEWVAL);

参数:

DOUBLE NEWVAL:新的飞行时间 默认为1秒

样例代码:

RenderControl.get().camera.setFlyTime(3);


 设置远近裁剪:

方法:

ETAUTOCLIPPLANE (BOOLEAN NEWVAL);

参数:

BOOLEAN NEWVAL:开启/关闭自动裁剪功能, 浏览室内场景需要关闭

样例代码:

RenderControl.get().camera.setAutoClipPlane(false);

RenderControl.get().camera.setFarClipPlane(10000);//大于10000米的物体被裁剪


 设置天空盒图片:

方法:

SETIMAGEPATH(GVISKYBOXIMAGEINDEX INDEX, STRING IMAGEPATH);

参数:

GVISKYBOXIMAGEINDEX:天空盒位置枚举 

样例代码:

RenderControl.get().objectManager.getSkyBox().setImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, "skybox/Sunny1_front.png");


 设置拾取对象类型:

方法:

SETMOUSESELECTOBJECTMASK(INT NEWVAL);

参数:

INT NEWVAL:对象类型枚举

样例代码:

RenderControl.get().setMouseSelectObjectMask(gviMouseSelectObjectMask.gviSelectAll.getValue());//设置为拾取全部


 设置漫游模式:

方法:

SETINTERACTMODE(GVIINTERACTMODE NEWVAL);

参数:

GVIINTERACTMODE NEWVAL:漫游模式类型枚举

样例代码:

RenderControl.get().setInteractMode(gviInteractMode.gviInteractNormal);//设置为漫游模式

5

对象创建模块

 加载SDB场景数据:

方法:

CREATEFEATURELAYER(STRING SDBFILE, IGEOMETRYRENDER GEOMETRYRENDER);

参数:

STRING SDBFILE:SDB文件的绝对路径地址

IGEOMETRYRENDER GEOMETRYRENDER:矢量数据样式对象 模型数据默认为null

样例代码:

RenderControl.get().objectManager.createFeatureLayer("文件绝对路径",null);

 加载TDB场景数据:

方法:

CREATE3DTILELAYER CREATE3DTILELAYER(STRING LAYERINFO, STRING PASSWORD);

参数:

STRING LAYERINFO:TDB文件的绝对路径地址或者网路地址

STRING PASSWORD:数据密码 默认为“”

样例代码:

RenderControl.get().objectManager.create3DTileLayer("文件绝对路径","");//加载本地文件

RenderControl.get().objectManager.create3DTileLayer("[email protected]:80","");//加载服务

 创建图片标注:

方法:

CREATERENDERPOINT(DOUBLE X, DOUBLE Y, DOUBLE Z, STRING IMAGEPATH, INT SIZE);

参数:

DOUBLE X:设置标注的X值

DOUBLE Y:设置标注的Y值

DOUBLE Z:设置标注的Z值

STRING IMAGEPATH:设置assets下图片路径

INT SIZE:设置图片标注大小尺寸

样例代码:

RenderControl.get().objectManager.createRenderPoint(pr.intersectX, pr.intersectY, pr.intersectZ, "1.png", 100);

 创建文字标注:

方法:

CREATELABEL(DOUBLE X, DOUBLE Y, DOUBLE Z, STRING TEXT, INT TEXTCOLOR, INT TEXTSIZE, INT BGCOLOR, DOUBLE VERTICALOFFSET);

参数:

DOUBLE X:设置标注的X值

DOUBLE Y:设置标注的Y值

DOUBLE Z:设置标注的Z值

STRING TEXT:设置文字

INT TEXTCOLOR:设置文字颜色

INT TEXTSIZE:设置文字大小

INT BGCOLOR:设置标注背景色

DOUBLE VERTICALOFFSET: 设置标注标高

样例代码:

RenderControl.get().objectManager.createLabel(10, 20, 30, "三峡大学ABC", Color.argb(255, 255, 255, 255), 20, Color.argb(200, 108, 116, 255), 2);

 创建线段:

方法:

CREATERENDERPOLYLINE(ARRAYLIST ARRPOINTS, INT LINECOLOR, FLOAT LINEWIDTH);

参数:

ARRAYLIST ARRPOINTS: xyz坐标点的List

INT LINECOLOR:设置线的颜色

FLOAT LINEWIDTH:设置线宽 0位最小像素位 1以上为单位为米

样例代码:

ArrayList arrPoints = new ArrayList();

arrPoints.add(0.0);

arrPoints.add(0.0);

arrPoints.add(0.0);

arrPoints.add(1.0);

arrPoints.add(1.0);

arrPoints.add(1.0);

IRenderPolyline po = RenderControl.get().objectManager.createRenderPolyline(arrPoints, Color.BLUE, 1);

 创建矩形:

方法:

CREATERENDERPOLYGON(ARRAYLIST ARRPOINTS, INT FILLCOLOR);

参数:

ARRAYLIST ARRPOINTS: xyz坐标点的List

INT FILLCOLOR:设置矩形颜色

样例代码:

RenderControl.get().objectManager.createRenderPolygon(arrPoints, Color.RED);


6

常用功能模块(封装后)

 设置相机位置:

方法:

SETCAMERA1(DOUBLE X,DOUBLE Y,DOUBLE Z,DOUBLE HEADING,DOUBLE TILT,DOUBLE ROLL);

参数:

DOUBLE X:设置看向点的x值

DOUBLE Y:设置看向点的y值

DOUBLE Z:设置看向点的z值

DOUBLE HEADING:0~360设置相机水平角

DOUBLE TILT: 0~360设置相机俯仰角

DOUBLE ROLL:0~360设置相机旋转角

样例代码:

RenderControl.get().camera.setCamera(v , e,gviSetCameraFlags. gviSetCameraNoFlags);

 设置相机看向点:

方法:

LOOKAT1(DOUBLE X,DOUBLE Y,DOUBLE Z,DOUBLE DISTANCE,DOUBLE HEADING,DOUBLE TILT,DOUBLE ROLL);

参数:

DOUBLE X:设置看向点的x值

DOUBLE Y:设置看向点的y值

DOUBLE Z:设置看向点的z值

DOUBLE HEADING:0~360设置相机水平角

DOUBLE TILT: 0~360设置相机俯仰角

DOUBLE ROLL:0~360设置相机旋转角

样例代码:

RenderControl.get().camera.lookAt(v,distance, e);





 想了解更多? 
 那就赶紧来关注我们 

长按二维码 关注我们

加入我们官方QQ讨论群,参与更多互动分享

CityMaker软件技术分享群

189406624