ArcGIS for Android 离线数据空间查询--I查询
2017-08-01 18:03
519 查看
空间查询是地理信息中的一个概念,指的是通过空间数据进行空间数据库的查询操作。ArcGIS在10.2.2的版本发布了.geodatabase数据,其本质上就是一个轻量级的空间数据库,并通过发布了ArcGIS
Android 10.2.9的API,使得Android设备可以直接该API实现空间查询的功能。
首先我们先看下官方文档对于空间查询提供的工具:
可以看到这个ArcGIS 10.2版本以后新增的一个包,包含了四个类,分别应用于:
OutStatistics:用来定义一个或多个领域的统计数据的计算;
QueryParameters:类在支持查询的图层或表上保存查询参数,在本地或访问服务上执行;
QueryTask:用于在ArcGIS Server服务的图层或表资源上执行“查询”和“查询相关记录”操作;
RelatedQueryParameters:这个类是用来建立一个在对应图层/表查询相关记录的操作的参数。
其实这个和之前的query包很相似,不过那个query包换到ags目录下了。然后这四个类里,和我们离线空间查询相关的主要就是QueryParameters类了。我们可以看看对于这个类的官方解释为:
简单翻译下,就是该类可以用来设置查询参数用来进行离线或者在线的空间查询,使用时候,需要先对QueryParameters实例填充所需的查询参数,然后把这些参数传递给一个QueryTask实例或者一个对GeodatabaseFeatureTable类查询方法。然后就是可以定义的参数包含:
WHERE子句
是否在结果集里必须包含与每个结果相关联的空间数据
要返回结果集中包含的字段列表
要查询的这个图层/表的对象的ID
响应是否应该只包含对象ID数组或其他特性集。
搜索文本
作为空间查询条件的空间数据
和输入的空间数据存在某种空间关系
输入空间数据的空间参考系
返回空间数据的空间参考系
是否在结果集必须包含与每个结果相关的空间数据
其中,第二条和第十条挺像的,具体的差别我也不太清楚- -!
好了,对这个类有了了解后我们先看下如何实现I查询。I查询其实就是通过选取地图上某个点,经过空间分析后获取到该点对应图斑的信息。简单来说,就是进行一个数据库查询的操作,只是查询的条件是一个点。
我们先创建个地图,并加载geodatabase数据:
此时就可以在我们的设备的屏幕上看到对应图层了。然后我们要I查询,首先需要进行取点操作,然后将这个点转换为地图上的点:
接下里就是通过QueryParameters类输入查询参数。I查询的条件很简单,只需要通过我们取的点返回该点所属图斑的信息即可,所以代码为:
运行下,我们看看结果:
很明显,这是个地类图斑的数据。
至此,I查询工作完成,剩下只需要将结果展示出来即可。
附上完整代码:
Android 10.2.9的API,使得Android设备可以直接该API实现空间查询的功能。
首先我们先看下官方文档对于空间查询提供的工具:
可以看到这个ArcGIS 10.2版本以后新增的一个包,包含了四个类,分别应用于:
OutStatistics:用来定义一个或多个领域的统计数据的计算;
QueryParameters:类在支持查询的图层或表上保存查询参数,在本地或访问服务上执行;
QueryTask:用于在ArcGIS Server服务的图层或表资源上执行“查询”和“查询相关记录”操作;
RelatedQueryParameters:这个类是用来建立一个在对应图层/表查询相关记录的操作的参数。
其实这个和之前的query包很相似,不过那个query包换到ags目录下了。然后这四个类里,和我们离线空间查询相关的主要就是QueryParameters类了。我们可以看看对于这个类的官方解释为:
简单翻译下,就是该类可以用来设置查询参数用来进行离线或者在线的空间查询,使用时候,需要先对QueryParameters实例填充所需的查询参数,然后把这些参数传递给一个QueryTask实例或者一个对GeodatabaseFeatureTable类查询方法。然后就是可以定义的参数包含:
WHERE子句
是否在结果集里必须包含与每个结果相关联的空间数据
要返回结果集中包含的字段列表
要查询的这个图层/表的对象的ID
响应是否应该只包含对象ID数组或其他特性集。
搜索文本
作为空间查询条件的空间数据
和输入的空间数据存在某种空间关系
输入空间数据的空间参考系
返回空间数据的空间参考系
是否在结果集必须包含与每个结果相关的空间数据
其中,第二条和第十条挺像的,具体的差别我也不太清楚- -!
好了,对这个类有了了解后我们先看下如何实现I查询。I查询其实就是通过选取地图上某个点,经过空间分析后获取到该点对应图斑的信息。简单来说,就是进行一个数据库查询的操作,只是查询的条件是一个点。
我们先创建个地图,并加载geodatabase数据:
mMapView.setMapBackground(0xFAFAFA, 0xffffff, 0.0f, 0.0f);//地图背景 String path= StorageUtil.getSDCardRootPath(getApplicationContext())+"/ydyzt/data/TDXZ_JBNT.geodatabase"; Geodatabase localGdb=null; try { localGdb = new Geodatabase(path); }catch (Exception e){ e.printStackTrace(); } if (localGdb != null) { for (GeodatabaseFeatureTable gdbFeatureTable : localGdb.getGeodatabaseTables()) { if (gdbFeatureTable.hasGeometry()){ featureLayer = new FeatureLayer(gdbFeatureTable); mMapView.addLayer(featureLayer); } } }
此时就可以在我们的设备的屏幕上看到对应图层了。然后我们要I查询,首先需要进行取点操作,然后将这个点转换为地图上的点:
mMapView.setOnLongPressListener(new OnLongPressListener() { @Override public boolean onLongPress(float v, float v1) { Point point = mMapView.toMapPoint(v, v1); return false; } }); }
接下里就是通过QueryParameters类输入查询参数。I查询的条件很简单,只需要通过我们取的点返回该点所属图斑的信息即可,所以代码为:
QueryParameters query = new QueryParameters();//定义并初始化查询 query.setOutFields(new String[]{"*"});// 设置返回字段的数组 query.setGeometry(point);// 设置空间几何对象 if (featureLayer == null) { return false; } FeatureTable mTable = featureLayer.getFeatureTable();//得到查询属性表 mTable.queryFeatures(query, new CallbackListener<FeatureResult>() { @Override public void onCallback(FeatureResult featureResul) { for (Object element : featureResul) { if (element instanceof Feature) { Feature mFeatureGrafic = (Feature) element; Map<String, Object> mQuerryString = mFeatureGrafic.getAttributes(); for(String key : mQuerryString.keySet()){ Log.i("==============="+key,String.valueOf(mQuerryString.get(key))); } } } } @Override public void onError(Throwable throwable) { }
运行下,我们看看结果:
很明显,这是个地类图斑的数据。
至此,I查询工作完成,剩下只需要将结果展示出来即可。
附上完整代码:
public class GisActivity extends AppCompatActivity {
@BindView(R.id.mapview)
MapView mMapView;
FeatureLayer featureLayer;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_arcgis );
ButterKnife.bind(this);
initGeodatabase();
mMapView.setOnLongPressListener(new OnLongPressListener() {
@Override
public boolean onLongPress(float v, float v1) {
try {
Point point = mMapView.toMapPoint(v, v1);
QueryParameters query = new QueryParameters();//定义并初始化查询 query.setOutFields(new String[]{"*"});// 设置返回字段的数组 query.setGeometry(point);// 设置空间几何对象 if (featureLayer == null) { return false; } FeatureTable mTable = featureLayer.getFeatureTable();//得到查询属性表 mTable.queryFeatures(query, new CallbackListener<FeatureResult>() { @Override public void onCallback(FeatureResult featureResul) { for (Object element : featureResul) { if (element instanceof Feature) { Feature mFeatureGrafic = (Feature) element; Map<String, Object> mQuerryString = mFeatureGrafic.getAttributes(); for(String key : mQuerryString.keySet()){ Log.i("==============="+key,String.valueOf(mQuerryString.get(key))); } } } } @Override public void onError(Throwable throwable) { }
});
}catch (Exception e){
e.printStackTrace();
}
return false;
}
});
}
private void initGeodatabase(){
mMapView.setMapBackground(0xFAFAFA, 0xffffff, 0.0f, 0.0f);//地图背景 String path= StorageUtil.getSDCardRootPath(getApplicationContext())+"/ydyzt/data/TDXZ_JBNT.geodatabase"; Geodatabase localGdb=null; try { localGdb = new Geodatabase(path); }catch (Exception e){ e.printStackTrace(); } if (localGdb != null) { for (GeodatabaseFeatureTable gdbFeatureTable : localGdb.getGeodatabaseTables()) { if (gdbFeatureTable.hasGeometry()){ featureLayer = new FeatureLayer(gdbFeatureTable); mMapView.addLayer(featureLayer); } } }
}
}
相关文章推荐
- ArcGIS for Android Runtime100 基本操作(三)——离线数据空间查询
- ArcGIS for Android 离线数据空间分析--叠加分析
- arcgis for android 学习 - (8) 空间查询 - 点击某点,选中该点所在单位区域。
- Arcgis for android 离线查询
- arcgis for android 空间查询 - 点击某点,选中该点所在单位区域。
- Arcgis for android 离线查询
- ArcGIS runtime sdk for android 结合mpchartlib进行离线数据统计分析
- 【技术直通车】ArcGIS for Android离线数据编辑实现原理
- ArcGIS Runtime SDK For Android 10.2.x版本支持的空间数据类型
- ArcGIS for Android离线数据编辑实现原理
- arcgis for android 学习 - (8) 空间查询 - 点击某点,选中该点所在单位区域。
- arcgis for android 离线切片加载与geodatabase查询
- Arcgis for Android 空间数据WKT与JSON描述
- ArcGIS for Android 离线数据编辑原理
- arcgis for android 空间查询
- ArcGIS for Android 离线数据图例加载
- ArcGIS Runtime SDK For Android 10.2.x版本空间查询和属性查询
- ArcGIS for Android示例解析之空间查询-----QueryTask
- ArcGIS for Android示例解析之空间查询-----QueryTask
- ArcGIS for Android 离线数据编辑原理