EVSDK二次开发文档
2023-01-03 10:07:06
120次阅读
0个评论
最后修改时间:2023-01-03 10:26:43
EVSDK二次开发包下载地址: http://bbs.ev-image.com:9094/thread?topicId=5
新建项目
- 1、app下的buid.gradle配置EV_SDK目前针对适配了android6.0-android8.0 以及高版本
```java
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "com.earthview.world.demomap"
minSdkVersion 24
targetSdkVersion 28
versionCode 100001
versionName "1.00.001"
ndk {
abiFilters 'armeabi-v7a' //'armeabi' 自行适配其他cpu架构
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir "src/main/libs" //指定jar包的存放路径
}
}
...
}
```
高版本的Android Studio可能要求targetSdkVersion 高于30 ;targetSdkVersion 28可能会报错。忽略即可。不影响使用
- 2、gradle版本指定
项目的build.gradule配置 gradle版本号为3.5.1
```java
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
```
修改gradle-wrapper.properties distributionUrl设置为gradle-5.4.1-all.zip
```
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
```
- 3、添加库文件
-- 3.1、添加jar文件到app/libs文件夹下,jar库文件在EVMapSDK_package目录libs下;
同时修改build.gradle 添加EVSDK.jar依赖
```java
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation files('libs\\EVSDK.jar')
}
```
- 3.2、添加so库到app/src/main/libs/armeabi-v7a,so库文件在EVMapSDK_package目录libs_so下;
修改AndroidManifest.xml文件,添加可能用到的权限和gles的版本号
```xml
<uses-feature android:glEsVersion="0x00020000" />
<uses-feature android:name="android.hardware.location.gps" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
```
- 4、创建Assert资源文件夹
导入必要的资源文件,assert资源目录结构如下
--assert
|_dex
|_evproj
|_Font3D
|_fonts:
|_images:
|_license
|_Render2DEnginePlugin
|_Resource
|_shader
|_versioninfo.xml
简单介绍一下,这几个文件的作用,
dex:将app/libs下的jar包使用ndk的dx.bat脚本打包生成的dex文件
evproj:默认地图数据
Font3D:字体相关
fonts:字体相关
images:显示在地图上的图片
license: 证书验证相关的配置文件
Render2DEnginePlugin:下的so可供AGG插件使用,不用管
Resource:下的NSL文件,海图继续相关
shader:着色器脚本
versioninfo.xml:标记assert资源的版本号
- 5、完成上述配置过程后可以进行项目开发了
- 5.1、Activity 中添加地图功能
1、activity_main.xml中添加GlobeGLSurface
```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.earthview.world.evmapsdk.renderview.GlobeGLSurface
android:id="@+id/globeGLSurface"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:visibility="gone" />
</RelativeLayout>
```
2、Application配置,自定义application。继承自EVMapApplication
```java
public class ControlApplication extends EVMapApplication {
private final String TAG = this.getClass().getSimpleName();
@Override
protected void attachBaseContext(Context base) {
Log.i(TAG, "Attaching base context");
super.attachBaseContext(base);
MultiDex.install(this);
}
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "Application onCreate");
}
}
```
同时记得修改AndroidManifest.xml,在applicaiton标签中添加 android:name=".ControlApplication"
3、MapActivity配置
  3.1 MapActivity要继承自EVBaseActivity
```java
public class MainActivity extends EVBaseActivity {}
```
3.2 MainActivity类中加载so库
```java
static {
System.loadLibrary("EV_Core_Java");
System.loadLibrary("EV_ProjectManager_Java");// ProjectManager
System.loadLibrary("EV_SpatialInterface_Java");
System.loadLibrary("EV_Download_Java");// WebManager
System.loadLibrary("EV_Plugin_GLMap");// initAsset
}
```
3.3 初始化地图,加载地图函数,在onCreate方法中调用即可
```java
public void initMap() {
MapContext.getInstance().init(this, this.getAssets());
}
@NeedsPermission({Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE})
public void loadMap() {
setMapLoadCallBack(new MapLoadCallBack() {
@Override
public void beforeMapLoad() {
// 加载地图前的回调函数
}
@Override
public void loadSuccess(EventBusEntity.MapLoadedEntity entity) {
// 地图加载成功回调函数
}
@Override
public void loadError(EventBusEntity.MapLoadedEntity entity) {
// 地图加载失败回调函数
}
});
loadMapProject(mGlobeSurface); //loadMapProject 继承自父类,开始加载地图
}
```
下面是MainActivity的完整代码
```java
@RuntimePermissions
public class MainActivity extends EVBaseActivity {
static {
System.loadLibrary("EV_Core_Java");
System.loadLibrary("EV_ProjectManager_Java");// ProjectManager
System.loadLibrary("EV_SpatialInterface_Java");
System.loadLibrary("EV_Download_Java");// WebManager
System.loadLibrary("EV_Plugin_GLMap");// initAsset
}
private GlobeGLSurface mGlobeSurface = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initMap(); // copy即可
initView(); // 开发实现
/*initData(); // 开发实现*/
//调用的时候要确保申请了权限,防止因为没有权限报错。如果自己确认已经授予了权限,直接调用loadMap()加载地图即可,不需要使用permissionsDispatcher
MainActivityPermissionsDispatcher.loadMapWithPermissionCheck(this);
//loadMap(); //copy即可
}
private void initView() {
mGlobeSurface = findViewById(R.id.globeGLSurface);
}
public void initMap() {
MapContext.getInstance().init(this, this.getAssets());
WebManager.getSingleton().installServicePlugin("EV_EarthView_Download", "http://192.168.5.3:8088");
}
@NeedsPermission({Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE})
public void loadMap() {
setMapLoadCallBack(new MapLoadCallBack() {
@Override
public void beforeMapLoad() {
// 加载地图前的回调函数
}
@Override
public void loadSuccess(EventBusEntity.MapLoadedEntity entity) {
// 地图加载成功回调函数
}
@Override
public void mapSurfaceShow() {
// 地图显示后回调,如 获取图层可见性 控制图层显影
}
@Override
public void loadError(EventBusEntity.MapLoadedEntity entity) {
// 地图加载失败回调函数
}
});
loadMapProject(mGlobeSurface); //loadMapProject 继承自父类,开始加载默认地图地图
// loadMapProject("map20220324.evproj", mGlobeSurface); //loadMapProject 继承自父类,开始加载指定地图地图
}
@OnNeverAskAgain({Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE})
void showNeedPermissionWhy() {
Toast.makeText(this, "拒绝授予权限,并不再询问", Toast.LENGTH_SHORT).show();
}
@OnPermissionDenied({Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE})
public void permissionsDenied() {
Toast.makeText(this, "授予权限被拒绝", Toast.LENGTH_SHORT).show();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//生成辅助类_动态注册权限
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
}
```
其中“map20220324.evproj”是手动导入的离线地图数据,默认显示的地图数据内置apk中的小数据。更详细的地图数据很大,需要导入sdcard中加载。
【注】 当assets资源更新后,需要将assets/versioninfo.xml中的版本号+1,避免出现不必要的问题。
4、图元绘制 EVSDk1.00.003添加该功能 见EVMapSDK_package_20220219.zip
4.1 声明绘制点,线,面图元的封装对象
```java
// 绘制点的对象
SimplePointSet simplePointSet = null;
// 绘制线的对象
DrawLineEntity drawLineEntity = null;
List<DrawLineEntity> drawLineEntities = new ArrayList<>();
```
4.2 在地图加载完成后
初始化刚刚声明的对象
```java
setMapLoadCallBack(new MapLoadCallBack() {
@Override
public void loadSuccess(EVSDKEntity.MapLoadedEntity entity) {
//在地图加载完成后初始化绘制点 线, 面的接口类
simplePointSet = new SimplePointSet();
drawLineEntity = new DrawLineEntity();
}
});
```
4.3 设置测量分析的回调监听
```java
// 添加测量事件的监听
setMeasureResultListener(new MeasureResultListener() {
@Override
public void getMeasureResult(MeasureResult measureResult) {
switch (measureResult.getMeasureType()) {
case 0:
//距离测量
Log.i(TAG, "距离 = " + measureResult.getDistance());
Toast.makeText(MainActivity.this, "距离 = " + measureResult.getDistance(), Toast.LENGTH_SHORT).show();
break;
case 1:
//面积周长
Log.i(TAG, "面积 = " + measureResult.getArea() + " 周长 = " + measureResult.getPerimeter());
Toast.makeText(MainActivity.this, "面积 = " + measureResult.getArea() + " 周长 = " + measureResult.getPerimeter(), Toast.LENGTH_SHORT).show();
break;
case 2:
//角度
Log.i(TAG, "角度 = " + measureResult.getAngle());
Toast.makeText(MainActivity.this, "角度 = " + measureResult.getAngle(), Toast.LENGTH_SHORT).show();
break;
}
}
});
```
4.4 图元绘制,测量分析demo
```java
case R.id.use_default_listener:
// 设置使用默认的双击事件(放大地图)。
// 在调用MapWidgetHelper.getSingleton().setMapClickListener后,如果要切原来的双击事件,调用setDefaultDoubleClickEnable(true)
mapWidgetHelper.getGlSurface().getMapGestureDetector().setDefaultDoubleClickEnable(true);
break;
case R.id.use_user_listener:
// 同双击事件一样
mapWidgetHelper.getGlSurface().getMapGestureDetector().setSingleClickEnable(true);
break;
case R.id.point_add:
// 定义一个simplePoint对象,
SimplePoint simplePoint = new SimplePoint();
simplePoint.setLongLang(114.399774, 30.480749);
// 添加到simplePointSet 即刻显示到地图上
simplePointSet.addSimplePoint(simplePoint);
break;
case R.id.point_add_point_list:
// 定义一个点的集合显示到地图上
testRemoveSimplePoints.add(new SimplePoint(114.399774, 30.480749, 0));
testRemoveSimplePoints.add(new SimplePoint(115.399774, 31.480749, 0));
testRemoveSimplePoints.add(new SimplePoint(116.399774, 32.480749, 0));
testRemoveSimplePoints.add(new SimplePoint(117.399774, 33.480749, 0));
testRemoveSimplePoints.add(new SimplePoint(118.399774, 34.480749, 0));
testRemoveSimplePoints.add(new SimplePoint(119.399774, 35.480749, 0));
simplePointSet.addSimplePoint(testRemoveSimplePoints);
break;
case R.id.point_delete_point:
// 移除index 为3 的点
simplePointSet.removeSimplePoint(3);
break;
case R.id.point_delete_point_list:
// 移除一组点
simplePointSet.removeSimplePoint(testRemoveSimplePoints);
break;
case R.id.point_delete_all_point:
// 清除全部的点
simplePointSet.clear();
break;
case R.id.point_add_500_point:
//性能测试添加5000个点对象到地图上
double lon = 114.399774;
double lat = 30.480749;
List<SimplePoint> largerNumberPoint = new ArrayList<>();
for (int i = 1; i < 500; i++) {
for (int j = 1; j < 20; j++) {
largerNumberPoint.add(new SimplePoint(lon + i * 0.1, lat + j + 0.001, 0));
}
}
simplePointSet.addSimplePoint(largerNumberPoint);
break;
case R.id.point_hide:
// 切换是否隐藏屏幕上的点,(不是删除) 可以再次点击显示
boolean isShowPointSet = simplePointSet.isShowPointSet;
if (isShowPointSet) {
simplePointSet.hidePointSet();
} else {
simplePointSet.showPointSet();
}
break;
case R.id.point_set_style:
// 设置点的样式为方形的点,点的类型见EVSimpleMarkerType类
int pointColor = 0X00FF00;
int pointSize = 40;
EVSimpleMarkerSymbol.Builder builder = new EVSimpleMarkerSymbol.Builder();
builder.setColor(new RgbColor((short) Color.red(pointColor), (short) Color.green(pointColor), (short) Color.blue(pointColor), RegisteredWhenConstruct.RWC_NotCallBack));
builder.setStyle(EVSimpleMarkerType.SMT_SIMPLEMARKERTYPE_SQUARE);
builder.setSize(pointSize);
simplePointSet.setMarkerSymbol(builder.build());
break;
case R.id.draw_line_add_point:
// 绘制一条线段,在线上添加第一个点显示
drawLineEntity.addPoint(new SimplePoint(111.399774, 29.480749, 0));
break;
case R.id.draw_line_add_point_list:
// 在线上添加一组点
removeSimplePoints.add(new SimplePoint(114.399774, 30.480749, 0));
removeSimplePoints.add(new SimplePoint(115.399774, 31.480749, 0));
removeSimplePoints.add(new SimplePoint(116.399774, 32.480749, 0));
removeSimplePoints.add(new SimplePoint(117.399774, 33.480749, 0));
removeSimplePoints.add(new SimplePoint(118.399774, 34.480749, 0));
removeSimplePoints.add(new SimplePoint(119.399774, 35.480749, 0));
drawLineEntity.addPoints(removeSimplePoints);
break;
case R.id.draw_line_set_point_list:
// 重新设置线上一组点 并清除原来的点
removeSimplePoints.add(new SimplePoint(124.399774, 40.480749, 0));
removeSimplePoints.add(new SimplePoint(125.399774, 41.480749, 0));
removeSimplePoints.add(new SimplePoint(126.399774, 42.480749, 0));
removeSimplePoints.add(new SimplePoint(127.399774, 43.480749, 0));
removeSimplePoints.add(new SimplePoint(128.399774, 44.480749, 0));
removeSimplePoints.add(new SimplePoint(129.399774, 45.480749, 0));
drawLineEntity.setPoints(removeSimplePoints);
break;
case R.id.draw_line_delete_point:
// 移除线段上index为4的点
drawLineEntity.removePoint(4);
break;
case R.id.draw_line_delete_end_point:
// 移除线上最后一个点
drawLineEntity.removeEndPoint();
break;
case R.id.draw_line_delete_point_list:
// 移除线上index从3开始 后面的3个点
drawLineEntity.removePoint(3, 3);
break;
case R.id.draw_line_delete_all_point:
// 清除线上全部的点
drawLineEntity.clearPoint();
break;
case R.id.draw_line_set_style:
// 随机设置线的颜色和宽度
RgbColor markerColor = new RgbColor((short) rd.nextInt(255), (short) rd.nextInt(255), (short) rd.nextInt(255), RegisteredWhenConstruct.RWC_NotCallBack);
SimpleLineSymbol simpleLineSymbol = new SimpleLineSymbol(RegisteredWhenConstruct.RWC_NotCallBack);
simpleLineSymbol.setColor(markerColor);
simpleLineSymbol.setWidth(rd.nextInt(30));
markerColor.dispose(true);
drawLineEntity.setLineSymbol(simpleLineSymbol);
break;
case R.id.draw_line_add_line:
// 重新绘制一条线
drawLineEntity = new DrawLineEntity();
drawLineEntities.add(drawLineEntity);
break;
case R.id.draw_line_show_point:
// 控制点上的点是否显示
boolean flag = drawLineEntity.isShowPointSet();
drawLineEntity.setShowPointSet(!flag);
break;
case R.id.draw_line_show_line:
// 控制线的显示和隐藏
boolean isShowDrawEntity = drawLineEntity.isShowDrawEntity();
if (isShowDrawEntity) {
drawLineEntity.setHideEntity();
} else {
drawLineEntity.setShowEntity();
}
break;
case R.id.draw_line_set_point_symbol:
// 设置线上的点的样式
int pointColor1 = 0X00FF00;
int pointSize1 = 40;
EVSimpleMarkerSymbol.Builder builder1 = new EVSimpleMarkerSymbol.Builder();
builder1.setColor(new RgbColor((short) Color.red(pointColor1), (short) Color.green(pointColor1), (short) Color.blue(pointColor1), RegisteredWhenConstruct.RWC_NotCallBack));
builder1.setStyle(EVSimpleMarkerType.SMT_SIMPLEMARKERTYPE_SQUARE);
builder1.setSize(pointSize1);
drawLineEntity.setPointStyle(builder1.build());
break;
case R.id.draw_line_measure:
// 测量两点直接的距离
if (drawLineEntity.getEntityPointSet().getSize() >= 2) {
// 第一个点和最后一个点 两个点的距离
MapControl mapControl = mapWidgetHelper.getMapControl();
SimplePointSet simplePointSet = drawLineEntity.getEntityPointSet();
int count = simplePointSet.getSize();
SimplePoint point1 = simplePointSet.getSimplePoints().get(count - 1);
SimplePoint point2 = simplePointSet.getSimplePoints().get(0);
point1.deviceToGeographicPoints(mapControl); // 转换成经纬坐标
point2.deviceToGeographicPoints(mapControl); // 转换成经纬坐标
Imap map = mapControl.getMap();
Ispatialreference sr = map.getSpatialReference();
GeodesicMeasure mea = new GeodesicMeasure(sr.getCEllipseSphere().getSamiMajor(), sr.getCEllipseSphere().getInvFlattening(),
RegisteredWhenConstruct.RWC_NotCallBack);
double res = mea.distanceMeasure(point1.longitude, point1.latitude,
point2.longitude, point2.latitude, null, 50);
Log.i(TAG, "res = " + res);
}
break;
case R.id.draw_area_show_area:
/*boolean drawLineEntity.isLine();*/
// setLine(false); 表示当前drawLineEntity绘制的是面图元
drawLineEntity.setLine(false);
break;
case R.id.draw_area_set_style:
//设置面的样式
drawLineEntity.setLine(false);
AreaConfig areaConfig = drawLineEntity.getAreaConfig();
int color = 0x00FF00;
areaConfig.setAreaColor(color);
areaConfig.setAreaLineWidth(rd.nextInt(30));
drawLineEntity.setAreaSymbol(areaConfig.getDefaultFillSymbol());
break;
case R.id.draw_area_show_line:
// 设置面上的线是否可以显示
boolean isShowAreaLine = drawLineEntity.isShowAreaLine();
drawLineEntity.setShowAreaLine(!isShowAreaLine);
break;
case R.id.draw_area_set_point_symbol:
// 设置面上的线是否需要显示
LineConfig lineConfig = new LineConfig();
int c = 0x0000FF;
lineConfig.setPointColor(c);
drawLineEntity.setPointStyle(lineConfig.getLinePointSymbol());
break;
case R.id.draw_area_set_line_symbol:
// 设置面图元上的线的样式
AreaConfig areaConfig1 = drawLineEntity.getAreaConfig();
int pp = 0x00FFFF;
areaConfig1.setAreaLineColor(pp);
drawLineEntity.setAreaSymbol(areaConfig1.getDefaultFillSymbol());
break;
case R.id.draw_line_enable_measure:
//使能测量功能,图元绘制的时候关闭,测量的回调接口不触发器
drawLineEntity.setNeedMeasure(true);
break;
case R.id.draw_angle:
clickMapShowAngle();
break;
case R.id.draw_angle_delete_end:
drawAngleEntity.removeEndAngle();
break;
```
4.5 文字绘制demo
```java
case R.id.draw_text_show_text:
// 设置点击地图的监听事件,绘制文字
clickMapShowText();
break;
case R.id.draw_text_add_text:
TextEntity textEntity = new TextEntity();
Location location = new Location("");
location.setLongitude(114.399774);
location.setLatitude(30.48074);
textEntity.setSimplePoint(new SimplePoint(location));
textEntity.setMsg("text-" + textCount);
drawTextEntity.addText(textEntity);
textCount++;
break;
case R.id.draw_text_remove_last:
drawTextEntity.removeLastText();
break;
case R.id.draw_text_remove_list:
// 移除位置3 4上的两个文字
drawTextEntity.removeText(2, 2);
break;
case R.id.draw_text_clear:
drawTextEntity.clearText();
textCount = 0;
break;
```
其中定义的文字封装实体类
```java
// 绘制文字对象
DrawTextEntity drawTextEntity = null;
int textCount = 0;
// 绘制图片
ImageEntity imageEntity = null;
List<ImageEntity> imageEntities = new ArrayList<>();
```
在地图加载完成的回调方法中初始换drawTextEntity
```java
@Override
public void loadSuccess(EVSDKEntity.MapLoadedEntity entity) {
drawTextEntity = new DrawTextEntity();
imageEntity = new ImageEntity();
// 设置大小
imageEntity.setImageSize(50);
imageEntity.setAssertImageFile("hl.png"); // assets/images/hl.png
imageEntities.add(imageEntity);
}
```
4.6、图片绘制Demo调用
```java
case R.id.draw_image_show_image:
imageEntity = new ImageEntity();
// 设置显示另一张图片
imageEntity.setImageSize(50);
imageEntity.setAssertImageFile("location.png"); // assets/images/location.png
//imageEntity.setRepeatDraw(false);
imageEntities.add(imageEntity);
clickMapShowImage();
break;
case R.id.draw_image_add_image:
imageEntity.addImageAt(new SimplePoint(119.399774, 29.480749, 0));
break;
case R.id.draw_image_remove_last:
imageEntity.removeLastImage();
break;
case R.id.draw_image_remove_list:
imageEntity.removeImage(3, 2);
break;
case R.id.draw_image_clear:
imageEntity.removeAllImage();
break;
```
4.7 贝塞尔(光滑)曲线绘制
```java
// 定义曲线对象
// 绘制贝塞尔曲线
DrawBezierLineEntity drawBezierLineEntity = null;
// 绘制的是否是贝塞尔曲线
private boolean isBezierLine = false;
//点击事件添加点到曲线上
case R.id.draw_bezier_line_set_is_bezier_close_line:
isBezierLine = true;
// 设置点击地图的监听事件,绘制闭合的贝塞尔曲线
clickMapShowLineArea();
drawBezierLineEntity = new DrawBezierLineEntity();
drawBezierLineEntity.setDrawEntityType(DrawBezierLineEntity.DRAW_BEZIER_LINE);
EVBezierLine evBezierLine = new EVBezierLine();
evBezierLine.setLineType(EVBezierLine.CLOSED_LINE);// 闭合曲线
//evBezierLine.setLineType(EVBezierLine.LINE);// 非闭合曲线
// 贝塞尔曲线暂时不支持删除一个重新绘制,只支持添加点
evBezierLine.setStep(0.1);// 分10段 ,也是默认值
drawBezierLineEntity.setEvBezierLine(evBezierLine);
break;
case R.id.draw_bezier_line_set_is_bezier_line:
isBezierLine = true;
// 设置点击地图的监听事件,绘制闭合的贝塞尔曲线
clickMapShowLineArea();
drawBezierLineEntity = new DrawBezierLineEntity();
drawBezierLineEntity.setDrawEntityType(DrawBezierLineEntity.DRAW_BEZIER_LINE);
EVBezierLine evBezierLine1 = new EVBezierLine();
evBezierLine1.setLineType(EVBezierLine.LINE);// 闭合曲线
//evBezierLine.setLineType(EVBezierLine.LINE);// 非闭合曲线
// 贝塞尔曲线暂时不支持删除一个重新绘制,只支持添加点
evBezierLine1.setStep(0.1);// 分10段 ,也是默认值
drawBezierLineEntity.setEvBezierLine(evBezierLine1);
break;
case R.id.draw_bezier_line_add_points:
//drawBezierLineEntity1上添加一组点
List<SimplePoint> addBezierPoinst = new ArrayList<>();
addBezierPoinst.add(new SimplePoint(117.399774, 33.480749, 0));
addBezierPoinst.add(new SimplePoint(119.399774, 29.480749, 0));
addBezierPoinst.add(new SimplePoint(120.399774, 25.480749, 0));
addBezierPoinst.add(new SimplePoint(127.399774, 20.480749, 0));
drawBezierLineEntity.addPoints(addBezierPoinst);
break;
case R.id.draw_bezier_line_delete_points:
// 删除一组点
drawBezierLineEntity.removePoint(0, 2);
break;
case R.id.draw_bezier_line_delete_all:
drawBezierLineEntity.clearPoint();
break;
case R.id.draw_bezier_line_set_bezier_area_style:
drawBezierLineEntity.setAreaSymbol(DrawBezierLineEntity.DRAW_BEZIER_AREA);
break;
case R.id.draw_bezier_line_set_bezier_line__style:
drawBezierLineEntity.setLineSymbol(DrawBezierLineEntity.DRAW_BEZIER_LINE);
break;
case R.id.draw_bezier_line_hide_side_point:
//控制点的显示
boolean showPoint = drawBezierLineEntity.isShowPointSet();
drawBezierLineEntity.setShowPointSet(!showPoint);
break;
case R.id.draw_bezier_line_hide_side_line:
// 控制线的显隐藏 ,如果当前绘制的是线,请使用setHideEntity方法控制,此方式只针对面的绘制
boolean showLine = drawBezierLineEntity.isShowAreaLine();
drawBezierLineEntity.setShowAreaLine(!showLine);
break;
case R.id.draw_bezier_line_hide_entity:
// 控制全部的显示隐藏
boolean showEntity = drawBezierLineEntity.isShowDrawEntity();
if (showEntity) {
drawBezierLineEntity.setHideEntity();
} else {
drawBezierLineEntity.setShowEntity();
}
break;
```
4、8 角度测量
```java
case R.id.draw_angle:
clickMapShowAngle();
break;
case R.id.draw_angle_delete_end:
drawAngleEntity.removeEndAngle();
break;
```
4、9 证书验证功能(相关代码见EVSDKDemo):
```java
case R.id.action_license:
if (Constant.enableLicense) {
registerLicense();
} else {
Log.e(TAG, "未使能证书验证功能");
}
break;
case R.id.action_unregister_license:
if (Constant.enableLicense) {
unregisterLicense();
} else {
Log.e(TAG, "未使能证书验证功能");
}
break;
```
- 5.2、Fragment中添加地图功能(和Activity大同小异)
1、先在activity中加载so库
```java
// copy 固定调用
static {
System.loadLibrary("EV_Core_Java");
System.loadLibrary("EV_ProjectManager_Java");// ProjectManager
System.loadLibrary("EV_SpatialInterface_Java");
System.loadLibrary("EV_Download_Java");// WebManager
System.loadLibrary("EV_Plugin_GLMap");// initAsset
}
```
2、MapFragment继承自EVBaseFragment
3、在onViewCreated方法中完成地图的初始胡和加载过程initMap,loadMap
```java
/**
* 初始化地图
*/
private void initMap() {
MapContext.getInstance().init(mContext, mContext.getAssets());
}
/**
* 加载地图,要求获取到文件读取权限。可以先在activity中申请
*/
private void loadMap() {
setMapLoadCallBack(new MapLoadCallBack() {
@Override
public void beforeMapLoad() {
// 加载地图前的回调函数
}
@Override
public void loadSuccess(EventBusEntity.MapLoadedEntity entity) {
// 地图加载成功回调函数
}
@Override
public void loadError(EventBusEntity.MapLoadedEntity entity) {
// 地图加载失败回调函数
}
});
loadMapProject(mGlobeGLSurface); //loadMapProject 继承自父类,开始加载地图
//loadMapProject("map20220324.evproj", mGlobeSurface); //loadMapProject 继承自父类,开始加载指定地图
}
```
完整代码见EVSDK二次开发包中的EVSDKDemo
0
0