兄弟們好,公司有GIS地圖開發的需求,看網上關於超圖的文章不算多,就隨便寫寫,第一次寫博客,儘可能寫的讓你們能看明白。好了,go。java
步驟1:首先進入官網下載資源,support.supermap.com.cn/product/iMo… 而後配置jar包跟so,通通加進去。android
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);
}
});
}
}
複製代碼
好了,我們如今有許可文件了,能夠打開地圖了app
具體打開代碼爲ide
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:this
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文件代碼: url
<com.supermap.mapping.MapView
android:id = "@+id/Map_view"
android:layout_width="match_parent"
android:layout_height = "match_parent">
</com.supermap.mapping.MapView>
複製代碼