地图服务

加载地图

iMobile支持加载iServer发布的REST地图服务。使用的类库和关键方法,如下表:

jar包
com.supermap.data.jar、com.supermap.mapping.jar
so库
libimb2d.so、libgnustl_shared.so、libQt5Core.so、libQt5Gui.so、libQt5Svg.so、libQt5Widgets.so(v11.1版本开始,需添加后五个so库。)
关键类和方法
DatasourceConnectionInfo:setServer()、setEngineType()
MapControl:getMap()
Workspace:getDatasources()
MapView:getMapControl()

关键代码如下:

注意事项:
  • setServer()方法中的IP地址,是服务器的IP地址,必须写具体的地址,不能写localhost。
  • 移动设备和服务器在一个IP网段。
m_woWorkspace = new Workspace();
// 将地图显示控件与工作空间关联
m_mapView = (MapView)findViewById(R.id.Map_view);
m_mapControl = m_mapView.getMapControl();
m_mapControl.getMap().setWorkspace(m_woWorkspace);
DatasourceConnectionInfo dsInfo = new DatasourceConnectionInfo();  dsInfo.setServer("http://192.168.12.5:8090/iserver/services/map-Changchun/rest/maps/长春市区图");
dsInfo.setEngineType(EngineType.Rest);
m_datasource = m_woWorkspace.getDatasources().open(dsInfo);
if(m_datasource != null){ m_mapControl.getMap().getLayers().add(m_datasource.getDatasets().get(0), true);
  m_mapControl.getMap().refresh();
}
图:SuperMap iMobile加载SuperMap iServer REST地图服务

数据查询

移动端与服务端交互,进行服务端数据查询iMobile组件产品的数据查询功能是基于SuperMap iServer Rest地图服务进行的。服务端的查询结果以要素集合Featureset的方式返回。设置响应回调函数,通过回调函数获取操作结果和服务器响应等。数据查询需要使用的类库和关键方法,如下表所示:

jar包
com.supermap.data.jar、com.supermap.mapping.jar、com.supermap.services.jar、gson.jar、okhttp.jar、okio.jar
so库
libimb2d.so、libgnustl_shared.so、libQt5Core.so、libQt5Gui.so、libQt5Svg.so、libQt5Widgets.so(v11.1版本开始,需添加后五个so库。)
关键类和方法
QueryService:query()、setResponseCallback()
ServiceQueryParameter:setQueryServiceName()、setQueryMapName()、setQueryLayerName()、setExpectRecordCount()、setQueryRecordStart()、setQueryOption()、setAttributeFilter()

参考代码如下:

QueryService service = new QueryService(m_strServer);
//设置查询参数
ServiceQueryParameter parameter = new ServiceQueryParameter();
parameter.setQueryMapName("长春市区图");
parameter.setQueryServiceName("map-Changchun-6/rest");
parameter.setQueryLayerName("School@changchun");		
parameter.setExpectRecordCount(100);
parameter.setQueryRecordStart(0);
parameter.setQueryOption(QueryOption.GEOMETRY);
parameter.setAttributeFilter("SMID>200");
service.setResponseCallback(new ResponseCallback() {
  @Override
  public void requestSuccess() {				
    Toast.makeText(MainFrame.this,"查询成功",Toast.LENGTH_LONG).show();
  }
  @Override
  public void requestFailed(String arg0) {				
    Toast.makeText(MainFrame.this, "查询失败", Toast.LENGTH_LONG).show();
  }
  @Override
  public void receiveResponse(FeatureSet arg0) {
    if (arg0 instanceof FeatureSet) {
      FeatureSet featureSet = (FeatureSet)arg0;
      int nCount = 0;
      featureSet.moveFirst();
      while (!featureSet.isEOF()) {
        Geometry geo = featureSet.getGeometry();
        if (geo == null) {
          featureSet.moveNext();
          continue;
        }
        nCount++;
        Point2D pt = featureSet.getGeometry().getInnerPoint();
        LayoutInflater lfCallOut = getLayoutInflater();
        View calloutLayout = lfCallOut.inflate(R.layout.callout, null);
        CallOut callout = new CallOut(MainFrame.this);
        callout.setContentView(calloutLayout);		
        callout.setCustomize(true);
        callout.setLocation(pt.getX(), pt.getY());
        m_mapView.addCallout(callout);
        featureSet.moveNext();
      }
    }			
  }
  @Override
  public void dataServiceFinished(String arg0) {
  }
  @Override
  public void addFeatureSuccess(int arg0) {
  }
});
service.query(parameter, QueryMode.SqlQuery);// 查询

上述地图服务功能,可参照示例代码:范例程序说明/Service/服务访问