SuperMap iMobile開發入門(iMobile 10i + AS3.6)
超圖防坑指南
機緣巧合,報名了超圖的 命題開發組競賽,想着,就像是寫個小作業,就能完成,順便領個小證書啥的(主要是想接觸下超圖軟件,萬一美帝真的有後續操作呢)。 不過, 哎?? 超圖這坑太深了吧!他們的視頻教程做了好多遍,細究了好多的細節(大概就是 仔細看每幀視頻畫面吧),也沒能Debug Successful。在超圖羣裏問了好幾次,最終在 聊大 尚澤兄弟 的協助下完成了HelloMap之SuperMap Version,小兄弟才大二,不過跳坑技能實屬高超,佩服佩服。
文章概要
- AS3.6安裝、SuperMap iMobile 10i下載 ,一筆帶過;
- HelloMap工程創建 ,必要步驟記錄;
- HelloMap示例代碼 ,貼代碼 + 部分講解;
- HelloMap完整工程下載 ,提供下載鏈接(GitHub + CSDN);
AS3.6安裝、SuperMap iMobile 10i下載
AS3.6下載鏈接: Android Studio 的下載頁面下載最新版 或者是 下載AS 3.5.2 的 exe
SuperMap iMobile 10i下載鏈接: SuperMap iMobile 10i SP1 for Android(2019-12-31)
SuperMap iMobile 10i試用的License文件: SuperMap Online
HelloMap工程創建
-
創建工程
常規操作 -
導入jar包
這裏導入data和mapping這兩個包就可以了 -
導入.so文件
直接複製了整個文件夾(armeabi-v7a)過來 -
配置activity.xml
添加MapView控件 -
配置activity.java
初始化環境、打開工作空間、關聯地圖控件和工作空間、權限適配 -
配置Manifest.xml
添加網絡權限、讀寫文件權限等 -
配置build.gradle
添加ndk和sourceSets節點,詳細實例代碼見下節
劃重點:超圖官方教程未進行ndk
節點設置,這裏不設置會報錯的,親測! -
數據導入手機
直接使用USB連接手機後,把示例數據和License文件導入手機根目錄就行
HelloMap示例代碼
build.gradle
:
// buid.gradle的部分關鍵代碼
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
buildToolsVersion "29.0.3"
defaultConfig {
...
minSdkVersion 16
targetSdkVersion 28
...
ndk {
abiFilters 'armeabi-v7a'
}
}
buildTypes {
...
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
...
implementation files('libs/com.supermap.data_v1001.jar')
implementation files('libs/com.supermap.mapping_v1001.jar')
}
activity.xml
:
// activity_main的全部代碼
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.supermap.mapping.MapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</com.supermap.mapping.MapView>
</RelativeLayout>>
</androidx.constraintlayout.widget.ConstraintLayout>
activity.java
:
// MainActivity的全部代碼
package com.bestyou.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import com.supermap.data.Environment;
import com.supermap.data.Workspace;
import com.supermap.data.WorkspaceConnectionInfo;
import com.supermap.data.WorkspaceType;
import com.supermap.mapping.MapControl;
import com.supermap.mapping.MapView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
checkPermission();
//初始化環境
Environment.setLicensePath("/sdcard/SuperMap/license/");
Environment.setTemporaryPath("/sdcard/SuperMap/temp/");
Environment.setWebCacheDirectory("/sdcard/SuperMap/WebCatch");
Environment.initialization(this);
setContentView(R.layout.activity_main);
//打開工作空間
Workspace workspace = new Workspace();
WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
info.setServer("/sdcard/SuperMap/GeometryInfo/World.smwu");
info.setType(WorkspaceType.SMWU);
workspace.open(info);
//將地圖顯示控件和工作空間關聯
MapView mapView = findViewById(R.id.mapview);
MapControl mapcontrol = mapView.getMapControl();
mapcontrol.getMap().setWorkspace(workspace);
//打開工作空間中的第1幅地圖
String mapName = workspace.getMaps().get(0);
mapcontrol.getMap().open(mapName);
mapcontrol.getMap().refresh();
}
//動態權限適配
public void checkPermission() {
boolean isGranted = true;
if (android.os.Build.VERSION.SDK_INT >= 23) {
if (this.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
//如果沒有寫sd卡權限
isGranted = false;
}
if (this.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
isGranted = false;
}
Log.i("cbs","isGranted == "+isGranted);
if (!isGranted) {
this.requestPermissions(
new String[]{
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE},
102
);
}
}
}
}
Manifest.xml
:
<-- AndroidManifest的全部代碼 -->
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.bestyou.myapplication">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true">
</supports-screens>
</manifest>
HelloMap完整工程下載
想直接運行下,看看Demo的可直接下載完整工程:
CSDN鏈接: 有下載積分的點這裏下載完整工程.
希望有CSDN積分的大佬能打賞下積分,謝謝~
Github鏈接: 用愛發電.
學生黨去Github就好了~
手機端導入數據完整示例: CSDN下載鏈接.
可直接拷貝到手機的根目錄,即:手機根目錄->SuperMap->其他文件夾(包括示例數據、license、緩存文件夾)