Android sdk 100.11 加载GeoPackage数据,getFields = null

Android sdk 100.11 加载GeoPackage数据时,数据能正常加载,但是,
GeoPackageFeatureTable.getFields() = null,和
getSpatialReference() = null
 
已邀请:

张佳期

赞同来自:

package com.esri.arcgisruntime.sample.featurelayergeopackage;

import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment;
import com.esri.arcgisruntime.concurrent.ListenableFuture;
import com.esri.arcgisruntime.data.Feature;
import com.esri.arcgisruntime.data.FeatureQueryResult;
import com.esri.arcgisruntime.data.FeatureTable;
import com.esri.arcgisruntime.data.GeoPackage;
import com.esri.arcgisruntime.data.QueryParameters;
import com.esri.arcgisruntime.layers.FeatureLayer;
import com.esri.arcgisruntime.loadable.LoadStatus;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.BasemapStyle;
import com.esri.arcgisruntime.mapping.Viewpoint;
import com.esri.arcgisruntime.mapping.view.MapView;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class MainActivity extends AppCompatActivity {

private final String TAG = MainActivity.class.getSimpleName();

private MapView mMapView;
private ArcGISMap mMap;
// objects that implement Loadable must be class fields to prevent being garbage collected before loading
private GeoPackage mGeoPackage;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// authentication with an API key or named user is required to access basemaps and other
// location services
// ArcGISRuntimeEnvironment.setApiKey(BuildConfig.API_KEY);

// inflate MapView from layout
mMapView = findViewById(R.id.mapView);
// create a map with the BasemapType topographic
mMap = new ArcGISMap(Basemap.createNavigationVector());
// set the map to be displayed in this view
mMapView.setMap(mMap);
mMapView.setViewpoint(new Viewpoint(39.7294, -104.8319, 100000));

// Get the full path to the local GeoPackage
String geoPackagePath = getExternalFilesDir(null) + getString(R.string.aurora_co_gpkg);

// Open the GeoPackage
mGeoPackage = new GeoPackage(geoPackagePath);
mGeoPackage.loadAsync();
mGeoPackage.addDoneLoadingListener(() -> {
if (mGeoPackage.getLoadStatus() == LoadStatus.LOADED) {
// Read the feature tables and get the first one
FeatureTable geoPackageTable = mGeoPackage.getGeoPackageFeatureTables().get(0);

// Make sure a feature table was found in the package
if (geoPackageTable == null) {
Toast.makeText(MainActivity.this, "No feature table found in the package!", Toast.LENGTH_LONG).show();
Log.e(TAG, "No feature table found in this package!");
return;
}

// Create a layer to show the feature table
FeatureLayer featureLayer = new FeatureLayer(geoPackageTable);

// Add the feature table as a layer to the map (with default symbology)
mMap.getOperationalLayers().add(featureLayer);

queryAttribute(featureLayer);
} else {
Toast.makeText(MainActivity.this, "GeoPackage failed to load! " + mGeoPackage.getLoadError(), Toast.LENGTH_LONG).show();
Log.e(TAG, "GeoPackage failed to load!" + mGeoPackage.getLoadError());
}
});
}
/**
* 属性查询
* @param featureLayer
*/
private void queryAttribute(FeatureLayer featureLayer) {


QueryParameters query = new QueryParameters();
query.setWhereClause("1=1");
final ListenableFuture<FeatureQueryResult> featureQueryResult
= featureLayer.getFeatureTable().queryFeaturesAsync(query);
featureQueryResult.addDoneListener(new Runnable() {
@Override
public void run() {
try {

List<Feature> mapQueryResult = new ArrayList<>();//查询统计结果

FeatureQueryResult result = featureQueryResult.get();
Iterator<Feature> iterator = result.iterator();
Feature feature;
int i=0;
while (iterator.hasNext()) {
feature = iterator.next();
mapQueryResult.add(feature);
i = i + 1;

Log.d("info", "i的值是: " + i);
Log.d("info", feature.getAttributes().toString());
}
//获取空间参考
Log.d("info", featureLayer.getSpatialReference().getWKText());
Toast.makeText(MainActivity.this,"查询出"+mapQueryResult.size()+"个符合要求的结果",Toast.LENGTH_SHORT).show();

} catch (Exception e) {
e.printStackTrace();
}
}
});
}


@Override
protected void onPause() {
super.onPause();
mMapView.pause();
}

@Override
protected void onResume() {
super.onResume();
mMapView.resume();
}

@Override
protected void onDestroy() {
super.onDestroy();
mMapView.dispose();
}
}

上述代码供参考,能够加载geopackage以及获取其属性表详细信息和空间参考信息,如下图:
5.png

如果只是想获取字段名称,那这个链接供参考,里面有获取字段的方法:https://blog.csdn.net/gislaozh ... 62389

要回复问题请先登录注册