Как получить список точек / координат из представленной карты Mapbox - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть 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) {

                                            }
                                        });
                                    }
                                }
                            }

1 Ответ

0 голосов
/ 07 февраля 2020

Я бы использовал https://docs.mapbox.com/android/java/overview/turf/. Порт Mapbox http://turfjs.org/docs включает TurfMeta.coordAll(). Этот метод возвращает список Point объектов для заданной c геометрии (Point, LineString и т. Д. c.). Вы также можете передать в метод Feature или FeatureCollection.

FeatureCollection параметр: https://github.com/mapbox/mapbox-java/blob/master/services-turf/src/main/java/com/mapbox/turf/TurfMeta.java#L264

Feature параметр: https://github.com/mapbox/mapbox-java/blob/master/services-turf/src/main/java/com/mapbox/turf/TurfMeta.java#L245

          List<Feature> features = source.querySourceFeatures(Expression.all());

          FeatureCollection featureCollection = FeatureCollection.fromFeatures(features);

          List<Point> pointList = TurfMeta.coordAll(featureCollection, true);

          for (Point singlePoint : pointList) {
            List<Double> coordinateListForSinglePoint = singlePoint.coordinates();
            Double longitude = coordinateListForSinglePoint.get(0);
            Double latitude = coordinateListForSinglePoint.get(1);
          }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...