private void initLayer() {
try {
featureLayer = new FeatureLayer(new ShapefileFeatureTable(
shpPath));
featureLayer.setRenderer(new SimpleRenderer(new SimpleFillSymbol(
Color.GREEN)));
mapView.addLayer(featureLayer);
} catch (Exception e) {
e.printStackTrace();
}
}
效果圖如下。

這樣就可以很簡單地加載shp檔案了。下面我們來學習一下FeatureLayer的查詢。
一、FeatureLayer點選查詢主要用到的方法是featureLayer.getFeatureIDs(float x, float y, int tolerance),方法與上一講GraphicsLayer的查詢差不多。可以擷取每個要素的屬性屬性值。
private void handleSingleTap(float x, float y) {
long[] featureIds = featureLayer.getFeatureIDs(x, y, 8);
if (featureIds != null && featureIds.length > 0) {
for (long id : featureIds) {
com.esri.core.map.Feature feature = featureLayer.getFeature(id);
Map<String, Object> attrs = feature.getAttributes();
Set<Entry<String, Object>> setEntry = attrs.entrySet();
for (Entry<String, Object> entryItem : setEntry) {
Log.e(TAG,
entryItem.getKey() + "====" + entryItem.getValue());
}
}
private void queryTable() {
FeatureTable featureTable = featureLayer.getFeatureTable();
QueryParameters parameters = new QueryParameters();
//查詢條件,有點像資料庫中的查詢
parameters.setWhere("name = 'shanghai'");<span style="white-space:pre"> </span>Future<long[]> queryIds = featureTable.queryIds(parameters,new CallbackListener<long[]>() {
@Override
public void onError(Throwable arg0) {
// TODO Auto-generated method stub
}
public void onCallback(long[] arg0) {
});
long[] Ids = queryIds.get();
if (Ids != null && Ids.length > 0) {
for (int i = 0; i < Ids.length; i++) {
Feature feature = featureLayer.getFeature(Ids[i]);
Log.i(TAG, feature.getAttributes().get("name") + "");
} catch (InterruptedException e) {
} catch (ExecutionException e) {
}
這樣就可以快速查詢到某個具體的要素。
Code for all
沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的架構所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如别人所關心你的。理想的騰飛與實作,沒有别人的支援與幫助,是萬萬不能的。
本文轉自wenglabs部落格園部落格,原文連結:http://www.cnblogs.com/arxive/p/7751880.html,如需轉載請自行聯系原作者