SuperMap iMobile for Android 地图开发(一)

第一步:创建 Android Studio 项目

第一步:创建 Android Studio 项目
Android Studio 有两种创建项目的方法。
第一种是在 Android Studio起始页选择“Start a new Android Studio Project”。
第二种是在 Android Studio 主页选择“File”–>“New Project…”

第二步:使用SuperMap iMobile for Android

1、解压SuperMap iMobile for Android 产品包。
在这里插入图片描述
2、根据功能的需要,从产品包中libs文件夹中选择需要的库文件拷贝到工程顶级路径下,本例以使用910版本为例(其他版本选用对应的库文件即可), 仅使用到二维功能,所以将产品包中libs文件夹中的核心模块库文件com.supermap.data_v910.jar、地图显示模块库文件com.supermap.mapping_v910.jar拷贝到 Module 的libs文件夹
3、然后在Module的build.gradle里加上jni的sourceSets配置:jniLibs.srcDirs = [‘libs’],完整代码请参见下面的代码段。

apply plugin: 'com.android.application'
android {
    
    
    compileSdkVersion 26
    defaultConfig {
    
    
        applicationId "com.supermap.supermapimobiledemo3d"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
    
    
        release {
    
    
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
    
    
        main {
    
    
            jniLibs.srcDirs = ['libs']
        }
    }
}

dependencies {
    
    
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
}
	

第三步:添加SuperMap iMobile for Android 最低权限

1、在AndroidManifest.xml中添加

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<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_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

第四步:添加 Activity 配置

在“AndroidManifest.xml”中,承载 MapControl 的那个 Activity 项目中添加 Activity 配置,让地图界面在横竖屏切换时不再重复调用 onCreate。

具体配置如下:

	在Activity 项目中添加如下配置
    android:configChanges="keyboardHidden|orientation"
    
	注意:当Android 版本在4.0以上时,配置configChanges要添加screenSize,具体配置如下:
	android:configChanges="keyboardHidden|orientation|screenSize"
		

第五步:支持多格式屏幕配置

在 AndroidManifest.xml的manifest节点下添加以下配置:

<supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    tools:ignore="ManifestOrder"/> 

第六步:编写代码

在布局文件 activity_main.xml 中添加如下代码:


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/main">
  <RelativeLayout
       android:gravity="left"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <com.supermap.mapping.MapView
           android:id = "@+id/Map_view"
           android:layout_width="match_parent"
           android:layout_height = "match_parent">
       </com.supermap.mapping.MapView>
      <ZoomControls
           android:id="@+id/zoomControls1"
           android:layout_alignParentBottom="true"
           android:layout_alignParentRight="true"
           android:layout_centerHorizontal="true"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentEnd="true">
       </ZoomControls>
   </RelativeLayout>
</RelativeLayout>

在MainActivity中编写应用程序代码如下:


public class MainActivity extends Activity {
    
    
    private MapControl m_mapcontrol = null;

    @Override

    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        String rootPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();

        //设置一些系统需要用到的路径
        Environment.setLicensePath(rootPath + "/SuperMap/license/");
        Environment.setTemporaryPath(rootPath + "/SuperMap/temp/");
        Environment.setWebCacheDirectory(rootPath + "/SuperMap/WebCatch");

        //组件功能必须在Environment初始化之后才能调用
        Environment.initialization(this);

        //如果机器中默认不包括需要显示的字体,可以把相关字体文件放在参数所代表的路径中。
        //例如,如果需要显示阿拉伯文字(若机器中原先不包括相关字体文件),可以把需要的字体文件放在参数所代表的路径中。
        Environment.setFontsPath(rootPath + "/SuperMap/fonts/");
        setContentView(R.layout.activity_main);

        //打开工作空间
        Workspace m_workspace = new Workspace();
        WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
        info.setServer(rootPath + "/SampleData/GeometryInfo/World.smwu");
        info.setType(WorkspaceType.SMWU);
        m_workspace.open(info);

        //将地图显示控件和工作空间关联
        MapView m_mapView = findViewById(R.id.Map_view);
        m_mapcontrol = m_mapView.getMapControl();
        m_mapcontrol.getMap().setWorkspace(m_workspace);

        //打开工作空间中的第二幅地图
        String mapName = m_workspace.getMaps().get(1);
        m_mapcontrol.getMap().open(mapName);
        ZoomControls m_zoom = findViewById(R.id.zoomControls1);
        m_zoom.setIsZoomInEnabled(true);
        m_zoom.setIsZoomOutEnabled(true);

        //放大按钮
        m_zoom.setOnZoomInClickListener(new OnClickListener() {
    
    
            public void onClick(View v) {
    
    
                m_mapcontrol.getMap().zoom(2);
                m_mapcontrol.getMap().refresh();
            }
        });

        //缩小按钮
        m_zoom.setOnZoomOutClickListener(new OnClickListener(){
    
    
            public void onClick(View v) {
    
    
                m_mapcontrol.getMap().zoom(0.5);
                m_mapcontrol.getMap().refresh();
            }
        });
        m_mapcontrol.getMap().refresh();
    }
}

第七步:运行工程就可以了

猜你喜欢

转载自blog.csdn.net/Chen_xiaobao/article/details/129587780