之前的博客介绍了基于Runtime SDK的二维地图相关的开发,接下来将会是三维相关的开发,这篇博客将介绍三维场景的加载,包括发布的在线场景、slpk(SceneLayer Package)以及mspk(Mobile Scene Package)。
一、slpk加载
slpk数据可以通过将3D Max等软件做出的三维模型导入到Arcgis Pro中生成,
Android下加载SLPK场景的代码如下,解释见注释,环境配置见:基于Arcgis Runtime SDK 100.x 的Android GIS开发(一)——基础配置
代码如下:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.esri.arcgisruntime.layers.ArcGISSceneLayer;
import com.esri.arcgisruntime.loadable.LoadStatus;
import com.esri.arcgisruntime.mapping.ArcGISScene;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.MobileScenePackage;
import com.esri.arcgisruntime.mapping.view.Camera;
import com.esri.arcgisruntime.mapping.view.SceneView;
import com.github.clans.fab.FloatingActionButton;
import com.github.clans.fab.FloatingActionMenu;
import com.orhanobut.logger.Logger;
import com.xiaok.winterolympic.R;
import com.xiaok.winterolympic.utils.FileUtils;
public class SceneComplaceActivity extends AppCompatActivity {
private SceneView mSceneView;
private ArcGISScene scene;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scene_complace);
scene = new ArcGISScene(Basemap.createImagery()); //用遥感影像作为三维场景底图
mSceneView = findViewById(R.id.scene_sceneview);
mSceneView.setScene(scene);
mSceneView.setAttributionTextVisible(false); //去掉Esri logo
String filepath = FileUtils.SCENE_PATH; //三维场景文件路径
if (!filepath.isEmpty()) {
ArcGISSceneLayer sceneLayer = new ArcGISSceneLayer(filepath); // 实例化图层对象
scene.getOperationalLayers().add(sceneLayer); //添加三维场景图层
// 设置场景视角镜头(camera),参数依次为纬度、经度、X轴偏转角度、Y轴偏转角度、Z轴偏转角度、相机高度
Camera camera = new Camera(39.991616, 116.3842271,200, 345, 65, 0);
mSceneView.setViewpointCamera(camera);
}
}
@Override
protected void onPause() {
mSceneView.pause();
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
mSceneView.resume();
}
@Override
protected void onDestroy() {
mSceneView.dispose();
super.onDestroy();
}
}
效果图如下
二、mspk加载
项目Github地址:传送门