本文介绍了CityMaker移动端开发基本流程,适用于刚接触CityMaker的Android开发人员。旨在便于用户尽快了解CityMaker移动端开发,快速完成APP搭建。主要内容包括:涉及的软件、移动端三维数据准备、SDK的调用、数据导入流程以及接口介绍等。
下面对这几部分内容分章节详细介绍:
移动端开发涉及的软件包括:
CityMaker Android SDK,CityMaker Builder,CityMaker Server,Eclipse。
移动端共支持两种数据格式,即SDB和TDB,二者都是由FDB转换而来,在此仅介绍FDB到移动端数据的转换过程。
SDB是FDB针对移动端优化得到的模型场景数据,可以是模型图层或自定义符号化的矢量图层,能保留FDB下所有属性信息和模型信息,适合小范围业务精细数据的展示(如BIM),可以通过CityMaker Builder工具集一键转换得到。
TDB是将模型三角面片化得到的瓦片数据,更轻量,消耗机能更小,加载速度更快,渲染效率更高。可以使用CityMaker Server发布成服务访问,是移动端浏览大范围数据的首选。
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控件。
设置授权文件:
方法:
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);//设置为漫游模式
加载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);
设置相机位置:
方法:
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