У меня есть map
, который отображает объекты из файла GeoJson
. Я пытаюсь извлечь все points
и имена из всех объектов и сохранить их в списке массивов, чтобы я мог использовать их с searchBar.
Пока что я могу получить все имена, но у меня есть Понятия не имею, как получить coordinates.
Я понимаю, что mapBox
имеет объект feature.geometry
, но как мне использовать его для получения всех координат из объекта, отображенного на карте?
public ArrayList<Double> longitude;
public ArrayList<Double> latitude;
@Override
public void onMapReady(@NonNull final MapboxMap mapboxMap) {
SearchActivity.this.mapboxMap = mapboxMap;
mapboxMap.setStyle(Style.MAPBOX_STREETS, style -> {
mapboxMap.addOnMapClickListener(SearchActivity.this);
addGeoJsonSourceToMap(style);
// Create FillLayer with GeoJSON source and add the FillLayer to the map
style.addLayer(new FillLayer(geoJsonLayerId, geoJsonSourceId)
.withProperties(fillOpacity(0.5f)));
GeoJsonSource source = style.getSourceAs(geoJsonSourceId);
new Handler().postDelayed(() -> {
if (source != null){
List<Feature> features = source.querySourceFeatures(Expression.all());
//fetch all points
FeatureCollection featureCollection = FeatureCollection.fromFeatures(features);
List<Point> pointList = TurfMeta.coordAll(featureCollection, true);
for (Point singlePoint : pointList) {
List<Double> coordinateListForSinglePoint = singlePoint.coordinates();
Double lng = coordinateListForSinglePoint.get(0);
Double lat = coordinateListForSinglePoint.get(1);
longitude.add(lng);
latitude.add(lat);
for (int i = 0; i < features.size(); i++){
Feature feature = features.get(i);
Log.d(TAG, feature.toString());
// Ensure the feature has properties defined
if (feature.properties() != null) {
for (Map.Entry<String, JsonElement> entry : feature.properties().entrySet()) {
// Log all the properties
if (entry.getKey().equals("name")) {
if (!arrayList2.contains(entry.getValue().toString())) {
arrayList2.add(entry.getValue().toString().replace("\"", ""));
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, arrayList2);
search.setAdapter(adapter);
search.setThreshold(1);
search.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(SearchActivity.this, parent.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
}