как поставить несколько маркеров на MapBox в android через geoJson?

Я пытаюсь нанести около 40 маркеров на карту, разбросанную по большой территории. Я нашел код для этого, но он группирует соседние маркеры, но я хочу, чтобы он отображал все маркеры такими, какие они есть, независимо от уровней масштабирования.

Это коды, которые я пробовал.

  1. Mapbox github: - Работает нормально, но создает кластеры из ближайших маркеров.

  2. Этот код не работает для меня, поскольку Android не может разрешать методы _1 _, _ 2 _, _ 3 _, _ 4_ и coordinates.getLongitude()

      public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
    
      private MapView mapView;
    
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
    
          Mapbox.getInstance(this, getString(R.string.mapbox_access_token));
    
          setContentView(R.layout.activity_main);
    
          mapView = findViewById(R.id.mapView);
    
          mapView.onCreate(savedInstanceState);
          mapView.getMapAsync(this);
    
      }
    
      @Override
      public void onMapReady(MapboxMap mapboxMap) {
          this.mapboxMap = mapboxMap;
    
          try{
              Uri uriMap = Uri.parse("https://dl.dropbox.com/s/9jln7v48lp3lb7e/data.geojson?dl=0");
              String geoJsonString = getStringFromFile(uriMap,MainActivity.this);
    
              GeoJsonSource source = new GeoJsonSource("geojson", geoJsonString);
              mapboxMap.addSource(source);
              mapboxMap.addLayer(new LineLayer("geojson", "geojson"));
    
              FeatureCollection featureCollection = FeatureCollection.fromJson(geoJsonString);
    
              List<Feature> features = featureCollection.getFeatures();
    
              for (Feature f : features) {
                  if (f.getGeometry() instanceof Point) {
                      Position coordinates = (Position)
                              f.getGeometry().getCoordinates();
                      mapView.addMarker(
                              new MarkerViewOptions().position(new
                                      LatLng(coordinates.getLatitude(),
                                      coordinates.getLongitude()))
                      );
                  }
              }
    
          }catch(Exception e){
              Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
          }
    
      }
    
      private static String convertStreamToString(InputStream is) throws Exception {
    
          BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    
          StringBuilder sb = new StringBuilder();
          String line = null;
          while ((line = reader.readLine()) != null) {
              sb.append(line).append("\n");
          }
          reader.close();
          return sb.toString();
      }
    
      public static String getStringFromFile(Uri fileUri, Context context) throws Exception {
          InputStream fin = context.getContentResolver().openInputStream(fileUri);
    
          String ret = convertStreamToString(fin);
    
          fin.close();
          return ret;
      }
    }
    

P.S Было бы здорово, если бы я смог обойтись без каких-либо библиотек.


person Ishan hrx    schedule 07.09.2018    source источник


Ответы (1)


Вы не используете созданный вами линейный слой, он отображает geojson напрямую, когда вы вызываете source.setGeoJson(featureCollection).

Чтобы нарисовать маркеры прямо на карте, вам нужно вызвать метод addmarker в экземпляре карты, а не в экземпляре вида карты. В вашем случае mapboxMap.addMarker

Что касается неразрешенных методов, вы, вероятно, не импортируете правильные пакеты: import com.mapbox.geojson.Feature; import com.mapbox.geojson.FeatureCollection;

person bradm6s    schedule 09.09.2018