Android关于超图Gis地图的配置流程与许可文件获取方法

1,236 阅读3分钟

兄弟们好,公司有GIS地图开发的需求,看网上关于超图的文章不算多,就随便写写,第一次写博客,尽量写的让大家能看明白。好了,go。

步骤1:首先进入官网下载资源,support.supermap.com.cn/product/iMo… 然后配置jar包跟so,统统加进去。

步骤2:AndroidManifest 文件中添加代码

步骤3:获取许可文件

3.1许可文件(正式版本)

这里只说正式的许可,如果想要测试可以去官网下载一个测试的许可,www.supermap.com/cn/

获取正式版的许文文件可以通过访问网络请求的方式自动下载都目录下。 具体代码:

   //搭建地图环境
    String rootPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
    Environment.setLicensePath(rootPath + "/SuperMap/license/");
    Environment.initialization(this);
    //是否存在许可
    LicenseStatus licenseStatus = LicenseManager.getInstance().getLicenseStatus();
    boolean licenseExsit = licenseStatus.isLicenseExsit();
    if (licenseExsit) {
        //如果有许可 直接载入地图
        initMap();
    } else {
        //如果没有许可,在线申请许可
        //设置申请许可的模块
        ArrayList modules = new ArrayList();
        modules.add(LicenseManager.Module.Core_Runtime);
        //去问领导要激活码 激活码为20个字母数字组成的字符串
        LicenseManager.getInstance().activateDevice("xxxxx-xxxxx-xxxxx-xxxxx-xxxxx", modules);
        //设置许可激活
        LicenseManager.getInstance().setActivateCallback(new LicenseManager.LicenseActivationCallback() {

            @Override
            public void activateSuccess(LicenseStatus licenseStatus) {

                Log.e("123", "----->许可激活成功");
                //激活成功 直接载入地图
                initMap();

            }

            @Override
            public void activateFailed(String s) {

                Log.e("123", "----->许可激活失败" + s);
            }
        });
    }


}

好了,咱们现在有许可文件了,可以打开地图了

打开地图前首先要知道,咱们的项目地图是要做本地地图,还是发布在iserver服务器的地图。如果是本地地图,将地图放到指定目录下打开就行了,我放这里了,

具体打开代码为

  private void initMap() {
    setContentView(R.layout.activity_main);
 //打开工作空间
    Workspace m_workspace = new Workspace();
    WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
    info.setServer(android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/SampleData/GeometryInfo/World.smwu");
    info.setType(WorkspaceType.SMWU);
    m_workspace.open(info);
   //将地图显示控件和工作空间关联
    MapView m_mapView = (MapView) findViewById(R.id.Map_view);
    m_mapcontrol = m_mapView.getMapControl();
    m_mapcontrol.getMap().setWorkspace(m_workspace);
}

要是想打开iserver服务器里面的地图呢,你要先有打开地图的路径,问gis服务器开发人员要,我们服务器里面有三个路径,一个是存数据的,一个是关联数据与图层的,一个是影像地图的,这里我们要打开地图用第三个

具体代码为:

private void openMapUImage() {
    //打开工作空间
    Workspace m_workspace = new Workspace();
    //将地图显示控件和工作空间关联
    m_mapView = (MapView) findViewById(R.id.Map_view);
    DatasourceConnectionInfo info = new DatasourceConnectionInfo();
    //设置数据源别名
    info.setAlias("Rest1");
    //设置引擎类型
    info.setEngineType(EngineType.Rest);
    //地图服务地址(此处为本地搭建的范例服务为例:)
    //注意:自己地图服务器的地址
    String url = "自己地图服务器的地址";
    //设置地图服务地址(必设)
    info.setServer(url);
    //打开数据源
    datasource = m_workspace.getDatasources().open(info);
    //添加数据集到地图窗口
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    m_mapControl = m_mapView.getMapControl();
    m_Map = m_mapControl.getMap();
    m_Map.setWorkspace(m_workspace);
    Datasets datasets = datasource.getDatasets();
    m_Map.getLayers().add(datasets.get(0), true);
    
}

整体的代码Activity:

    package com.example.l.gistestdemo;

     import android.content.Context;
     import android.hardware.SensorManager;
     import android.support.v7.app.AppCompatActivity;
     import android.os.Bundle;
     import android.util.Log;
     import android.view.WindowManager;
     import android.widget.Toast;

     import com.supermap.data.Dataset;
     import com.supermap.data.Datasets;
     import com.supermap.data.Datasource;
     import com.supermap.data.DatasourceConnectionInfo;
     import com.supermap.data.EngineType;
     import com.supermap.data.Environment;
     import com.supermap.data.LicenseStatus;
     import com.supermap.data.Workspace;
     import com.supermap.data.WorkspaceConnectionInfo;
     import com.supermap.data.WorkspaceType;
     import com.supermap.mapping.Map;
     import com.supermap.mapping.MapControl;
     import com.supermap.mapping.MapView;
     import java.util.ArrayList;


  public class MainActivity extends AppCompatActivity {
      private MapControl m_mapcontrol = null;
      private MapView m_mapView;
      private MapControl m_mapControl;
      private SensorManager mSensorManager;
      private Map m_Map;
      private boolean isQuerying = true;
      private long firstTime;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

  
    //搭建地图环境
    String rootPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
    Environment.setLicensePath(rootPath + "/SuperMap/license/");
    Environment.initialization(this);
    //是否存在许可
    LicenseStatus licenseStatus = LicenseManager.getInstance().getLicenseStatus();
    boolean licenseExsit = licenseStatus.isLicenseExsit();
    if (licenseExsit) {
        //如果有许可 直接载入地图
        initMap();
    } else {
        //如果没有许可,在线申请许可
        //设置申请许可的模块
        ArrayList modules = new ArrayList();
        modules.add(LicenseManager.Module.Core_Runtime);
        LicenseManager.getInstance().activateDevice("1DA4E-4ECF2-FD41F-DA024-DEA3A", modules);
        //设置许可激活
        LicenseManager.getInstance().setActivateCallback(new LicenseManager.LicenseActivationCallback() {

            @Override
            public void activateSuccess(LicenseStatus licenseStatus) {

                Log.e("123", "----->许可激活成功");
                //激活成功 直接载入本地地图
                initMap();
                //激活成功 直接载入服务器中地图
                //openMap();
            }

            @Override
            public void activateFailed(String s) {

                Log.e("123", "----->许可激活失败" + s);
            }
        });
    }
}

private void initMap() {
          setContentView(R.layout.activity_main);
  //        //打开工作空间
          Workspace m_workspace = new Workspace();
          WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
          info.setServer(android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/SampleData/GeometryInfo/World.smwu");
    info.setType(WorkspaceType.SMWU);
    m_workspace.open(info);
  //        //将地图显示控件和工作空间关联
    MapView m_mapView = (MapView) findViewById(R.id.Map_view);
    m_mapcontrol = m_mapView.getMapControl();
    m_mapcontrol.getMap().setWorkspace(m_workspace);
}



private void openMap() {
    Workspace wokspace = new Workspace();
    m_mapView = (MapView) findViewById(R.id.Map_view);
    m_mapControl = m_mapView.getMapControl();
    m_mapControl.getMap().setWorkspace(wokspace);

    DatasourceConnectionInfo dsInfo = new DatasourceConnectionInfo();
    dsInfo.setServer("http://support.supermap.com.cn:8090/iserver/services/map-china400/rest/maps/China");
    dsInfo.setEngineType(EngineType.Rest);
    Datasource datasource = wokspace.getDatasources().open(dsInfo);
    if (datasource != null) {
        Dataset dataset = datasource.getDatasets().get(0);
        m_mapControl.getMap().getLayers().add(dataset, true);
        m_mapControl.getMap().refresh();
        Datasets datasets = datasource.getDatasets();
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        m_Map = m_mapControl.getMap();
        m_Map.setWorkspace(wokspace);

        m_Map.getLayers().add(datasets.get(0), true);

    } else {
        Toast.makeText(getApplicationContext(), "为空", Toast.LENGTH_LONG).show();
    }
}
 }

xml-layout文件代码:

    <com.supermap.mapping.MapView
        android:id = "@+id/Map_view"
        android:layout_width="match_parent"
        android:layout_height = "match_parent">
    </com.supermap.mapping.MapView>