业务数据查询
地图通常能够结合诸多资源,无论是符号化、注记还是图例往往不能够满足对信息的表达,为了更多更细节地承载信息,通过查询和地图上的弹出式窗口能够完整的展示资源的属性信息。业务数据的空间查询,是展示更多信息的第一步。
可进行查询的方法:
- MapView( GeoView ) - identifyLayerAsync方法
- MapView( GeoView ) - identifyLayersAsync方法
- GeodatabaseFeatureTable( FeatureTable ) - queryFeaturesAsync方法
- ServiceFeatureTable ( FeatureTable ) - queryFeaturesAsync方法
- FeatureLayer - selectFeaturesAsync方法
空间查询 - MapView( GeoView )
MapView(GeoView)提供了对Graphics Overlays、FeatureLayer和ArcGISMapImageLayer进行空间查询的方法。
- screenPoint:屏幕点击位置
- Tolerance:将点缓冲为圆的半径,输入值为屏幕像素(pixels/dp)最大值为100dp
- returnPopups:查询结果是否包含 弹出窗口(Pop-ups)信息
- maximumResults:查询结果最大返回值,必须大于0
方法执行后,通过addDoneListener接收结果。
final ListenableFuture<List<IdentifyLayerResult>> identifyFuture =
mainMapView.identifyLayersAsync(screenPoint, screenTolerance, false, 100);
identifyFuture.addDoneListener(new Runnable() {
@Override
public void run() {
try {
List<IdentifyLayerResult> identifyLayersResults = identifyFuture.get();
for (IdentifyLayerResult identifyLayerResult : identifyLayersResults) {
for (GeoElement identifiedElement : identifyLayerResult.getElements()) {
identifyLayerResult.getLayerContent();
if (identifiedElement instanceof Feature) {
Feature identifiedFeature = (Feature) identifiedElement;
}
}
}
}
catch (Exception e) {
}
}
});
空间查询 - FeatureTable(GeodatabaseFeatureTable 、ServiceFeatureTable)
QueryParameters(com.esri.arcgisruntime.data.QueryParameters)是queryFeaturesAsync、selectFeaturesAsync的查询参数。
- setGeometry:进行空间范围查询的Geometry对象
- setMaxFeatures:最大返回值
- setOutSpatialReference:查询返回结果的空间参考
- setReturnGeometry:是否在查询结果中包含结合对象
- setSpatialRelationship:进行空间查询的空间关系设置
- setWhereClause:查询语句
SpatialRelationship(com.esri.arcgisruntime.data.QueryParameters.SpatialRelationship)枚举:
- CONTAINS
- CROSSES
- DISJOINT
- ENVELOPE_INTERSECTS
- EQUALS
- INDEX_INTERSECTS
- INTERSECTS
- OVERLAPS
- RELATE
- TOUCHES
- UNKNOWN
- WITHIN
final ListenableFuture<FeatureQueryResult> featureQueryResult
= featureLayer.getFeatureTable().queryFeaturesAsync(query);
featureQueryResult.addDoneListener(new Runnable() {
@Override
public void run() {
try {
FeatureQueryResult result = featureQueryResult.get();
Iterator<Feature> iterator = result.iterator();
Feature feature;
while (iterator.hasNext()) {
feature = iterator.next();
}
} catch (Exception e) {
}
}
});
空间查询 - FeatureLayer
FeatureLayer的selectFeaturesAsync方法从本质上讲数据要素选择,但从实现结果上来说相当于空间查询。同时,查询的结果会被高亮显示。高亮显示可以通过FeatureLayer设置颜色和宽度(厚度):
- setSelectionColor:设置选中要素的颜色
- setSelectionWidth:设置选中要素的边缘宽度(厚度)
final ListenableFuture<FeatureQueryResult> featureQueryResult
= featureLayer.selectFeaturesAsync(query, FeatureLayer.SelectionMode.NEW);
featureQueryResult.addDoneListener(new Runnable() {
@Override
public void run() {
try {
FeatureQueryResult result = featureQueryResult.get();
Iterator<Feature> iterator = result.iterator();
Feature feature;
while (iterator.hasNext()) {
feature = iterator.next();
}
} catch (Exception e) {
}
}
});