地图服务
加载地图
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/服务访问。