【IOS移动端】CityMaker入门之集成IOS SDK

版权声明:CityMaker技术服务中心——小白 https://blog.csdn.net/weixin_38476447/article/details/86488480

**

CityMaker IOS移动端SDK入门

**

一、文章说明

本文主要讲述了CityMaker IOS移动端开发环境部署以及SDK的调用流程,方便使用人员尽快了解CityMaker移动端开发。
下载地址:链接:https://pan.baidu.com/s/1fZZ0rbwrZ8VSlqUlHreT7A 提取码:bp0v

二:SDK集成配置

1、导入citymaker.framework包
将citymaker.framework包拷贝到工程文件夹下。
注意勾选copy items if needed选项
在这里插入图片描述
2、静态库中采用ObjectC++和C++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm)
Target->Build Settings ->C++ Standard Library选项改为 libstdc++ (GNU c++ standard library )
在这里插入图片描述

3、citymaker.framework不支持bitcode,需要在targets->Build Settings->Enable Bitcode 设置为NO
在这里插入图片描述

三:三维场景初始化

1:AppDelegat.h导入头文件
#import <CityMaker/CityMaker.h>
并添加类方法方便调用
在这里插入图片描述
2:在您的AppDelegate.m文件中初始化,并且设置好基础信息
在这里插入图片描述

四:各项功能接口调用(各项均为核心代码)

注:底色标注为黄色的地方是要替换为开发者自己的数据
1、创建本地的SDB图层,或者FDB图层(IFeatureLayer),返回的是一个数组
[[AppDelegate getRenderView].objectManager createFeatureLayer:你要加载的数据 geoRender:nil datasetName:nil fcName:nil]
注意:如果加载的是本地的SDB,需要填写的是文件的路径

2、图层的显隐
通过对象的visibleMask属性控制的
图层隐藏:visibleMask= gviViewNone
图层显示:visibleMask= gviView0

3、创建瓦片图层
I3DTileLayer* tileLayer = [[AppDelegate getRenderView].objectManager create3DTileLayer:加载的瓦片数据 password:@""];
注意:创建之后要设置相机飞过去才可以看到,以下创建的其他模型同理
设置相机飞到瓦片图层(都是通过对象的guid找到对象然后相机飞过去):
[[AppDelegate getRenderView].camera flyToObject:guid actionCode:gviActionFlyTo];

4、删除
每个对象都会有对应的guid属性,通过
[[AppDelegate getRenderView].objectManager deleteObject: guid]; 删除对象

5、创建标签
ILabel* lbl = [[AppDelegate getRenderView].objectManager createLabelSimple: x坐标
y:坐标
z:坐标
text:标签文字
textColor:标签文字颜色
textSize标签文字大小
bgColor:背景颜色
verticalOffset:垂直偏移量];

6、创建地形
[[AppDelegate getRenderView].objectManager createTerrain:地形数据 password:@""];

7、创建图片标签
创建一个有n行m列的TableLabel:
ITableLabel* tableLabel = [[AppDelegate getRenderView].objectManager createTableLabel:n columnCount:m];
设定表头文字tableLabel.titleText
设定表格中第n行,第m列的显示文字
[tableLabel setRecord:n col:m record:文字];
标牌的位置
IVector3* position = [[IVector3 alloc]init];
[position set:0 y:0 z:0];(自定义x,y,z坐标)
IPoint* fde_point = [IGeometryFactory createPoint:gviVertexAttributeZ];
fde_point.position = position;
tableLabel.position = fde_point;
列宽度
[tableLabel setColumnWidth:0 width:100];(自定义宽度)
表的边框颜色
tableLabel.borderColor
表的边框的宽度
tableLabel.borderWidth
表的背景色
tableLabel.tableBackgroundColor
标题背景色
tableLabel.titleBackgroundColor
设置文本样式
ITextAttribute* headerTextAttribute = [[ITextAttribute alloc]init];
headerTextAttribute.textColor 文字颜色
headerTextAttribute.textSize 文字大小
[tableLabel setColumnTextAttribute:0 textAttribute:headerTextAttribute];

8、创建render point 渲染点
IPoint* pt = (IPoint*) [IGeometryFactory createGeometry:gviGeometryPoint vertexAttribute:gviVertexAttributeZ];
[pt setCoords:0 y:0 z:0 m:0 i:0];
IImagePointSymbol* ptSym = [[IImagePointSymbol alloc]init];
IRenderPoint* renderPt = [[AppDelegate getRenderView].objectManager createRenderPoint:pt Symbol:ptSym];

9、创建render polyline 路线
IPolyline* fde_polyline = (IPolyline*)[IGeometryFactory createGeometry:gviGeometryPolyline
vertexAttribute:gviVertexAttributeZ];
IPoint* fde_point = (IPoint*)[IGeometryFactory createPoint:gviVertexAttributeZ];
添加点,画线
[fde_point setCoords:x y:y z:z m:0 i:0];
[fde_polyline appendPoint:fde_point];

10、创建cameraTour
ICameraTour* g_cameraTour= [[AppDelegate getRenderView].objectManager createCameraTour];
添加点:IVector3* pos = [[IVector3 alloc] init];
[pos set: x y:y z:y];
IEulerAngle* ang = [[IEulerAngle alloc] init];
[ang set: heading tilt: tilt roll:roll];
[g_cameraTour addWaypoint:pos angle:ang duration:1 mode:gviCameraTourSmooth];
暂停:[g_cameraTour pause];
开始:[g_cameraTour play];

11、雾效
[[[AppDelegate getRenderView].objectManager getSkyBox:0] setFogMode:雾效类型];
雾效类型
gviFogNone ,gviFogExp,gviFogExp2,gviFogLinear
当设置为gviFogLinear时,需要增加设置雾效范围
[[[AppDelegate getRenderView].objectManager getSkyBox:0] setFogStartDistance:100];
[[[AppDelegate getRenderView].objectManager getSkyBox:0] setFogEndDistance:200];

12、设置相机位置 setcamera
IVector3* pos = [[IVector3 alloc] init];
[pos set: -320.534501 y:12.251874 z:15.165675];
IEulerAngle* ang = [[IEulerAngle alloc] init];
[ang set: 0.000000 tilt: -30.000000 roll:-0.000000];
[[AppDelegate getRenderView].camera lookAt:pos distance:10 angle:ang];

13、正交模式
开启正交模式:
IEnvelope* env = [[IEnvelope alloc] init];
[env set: -36 maxX:2.65 minY:-30.5 maxY:-0.11 minZ:-7.10 maxZ:7.47];
IEulerAngle* ang = [[IEulerAngle alloc] init];
[ang set: 0.000000 tilt: -90.000000 roll:-0.000000];
注意检查_env值是否理想,minZ==maxZ时进入正交模式后会什么都看不到
_env.minZ = -7.10;
_env.maxZ = 7.47;
[[AppDelegate getRenderView].camera enterOrthoMode:_env angle:ang];
关闭正交模式:
[[AppDelegate getRenderView].camera leaveOrthoMode];

14、选择模式(拾取)、漫游模式
选择模式:
[AppDelegate getRenderView].mouseSelectObjectMask = gviSelectAll;
[AppDelegate getRenderView].useScreenToWorldSelect = YES;
拾取之后的处理在
(void)renderViewPickResult:(IPickResult*) pickResult intersectPoint:(IPoint*) intersectPoint
{
这里处理拾取后续工作,根据type值查看拾取到的对象
gviObjectType type = pickResult.type;
}
漫游模式:
[AppDelegate getRenderView].useScreenToWorldSelect = NO;

15、步行模式
[AppDelegate getRenderView].interactMode = gviInteractWalk2;
设置步行模式下的速度:
[[AppDelegate getRenderView].camera setWalkSpeed:0.3f];

16、使用传感器漫游
开始:[[AppDelegate getRenderView] startSensorControl];
停止:[[AppDelegate getRenderView] stopSensorControl];

17、测距
任意点测距:
[AppDelegate getRenderView].interactMode = gviInteractMeasurement;
[AppDelegate getRenderView].measurementMode = gviMeasureAerialDistance;
水平测距:
[AppDelegate getRenderView].interactMode = gviInteractMeasurement;
[AppDelegate getRenderView].measurementMode = gviMeasureHorizontalDistance;
垂直测距:
[AppDelegate getRenderView].interactMode = gviInteractMeasurement;
[AppDelegate getRenderView].measurementMode = gviMeasureVerticalDistance;
坐标测量:
[AppDelegate getRenderView].interactMode = gviInteractMeasurement;
[AppDelegate getRenderView].measurementMode = gviMeasureCoordinate;
投影面积:
[AppDelegate getRenderView].interactMode = gviInteractMeasurement;
[AppDelegate getRenderView].measurementMode = gviMeasureArea;
两点多轴:
[AppDelegate getRenderView].interactMode = gviInteractMeasurement;
[AppDelegate getRenderView].measurementMode = gviMeasureMultiaxisDistance;

猜你喜欢

转载自blog.csdn.net/weixin_38476447/article/details/86488480