以下是一个使用Mapbox Android SDK来从GeoJson文件中过滤并只显示具有特定属性的点的示例代码:
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.6.1'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0'
import com.mapbox.geojson.Feature;
import com.mapbox.geojson.FeatureCollection;
import com.mapbox.geojson.Point;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.plugins.annotation.Circle;
import com.mapbox.mapboxsdk.plugins.annotation.CircleManager;
import com.mapbox.mapboxsdk.plugins.annotation.CircleOptions;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private MapView mapView;
private CircleManager circleManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Mapbox.getInstance(this, "YOUR_MAPBOX_ACCESS_TOKEN");
setContentView(R.layout.activity_main);
mapView = findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(MapboxMap mapboxMap) {
circleManager = new CircleManager(mapView, mapboxMap, mapboxMap.getStyle());
loadGeoJsonData();
}
});
}
private void loadGeoJsonData() {
try {
InputStream inputStream = getAssets().open("your_geojson_file.geojson");
FeatureCollection featureCollection = FeatureCollection.fromJson(inputStream);
List filteredFeatures = new ArrayList<>();
// 过滤具有特定属性的点
for (Feature feature : featureCollection.features()) {
if (feature.properties() != null && feature.properties().has("your_attribute")) {
// 添加具有特定属性的点到过滤后的列表中
filteredFeatures.add(feature);
}
}
// 在地图上显示过滤后的点
for (Feature filteredFeature : filteredFeatures) {
Point point = (Point) filteredFeature.geometry();
CircleOptions circleOptions = new CircleOptions()
.withLatLng(new LatLng(point.latitude(), point.longitude()))
.withCircleColor(ColorUtils.colorToRgbaString(Color.BLUE))
.withCircleRadius(5f);
circleManager.create(circleOptions);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onStart() {
super.onStart();
mapView.onStart();
}
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
@Override
public void onStop() {
super.onStop();
mapView.onStop();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}
请确保将上述代码中的YOUR_MAPBOX_ACCESS_TOKEN替换为您自己的Mapbox访问令牌,并将your_geojson_file.geojson替换为您自己的GeoJson文件名。此外,您可以根据需要修改过滤条件和在地图上显示点的样式。
希望对您有所帮助