Ошибка GetMap () и addLayerToMap() при добавлении Geojson

#java #android #google-maps

#java #Android #google-карты

Вопрос:

Я пытаюсь добавить файл GeoJSON. Я использую пример кода из Google https://developers.google.com/maps/documentation/android-sdk/utility/geojson Но я получаю следующие ошибки.

GetMap()

Не удается разрешить метод ‘GetMap()’

addLayerToMap()

Не удается разрешить символ ‘addLayerToMap’

Я читал, что мне нужно изменить getmap с помощью getMapAsync, но это ничего не изменило.

 package com.example.testnavbar;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolylineOptions;
import com.google.maps.android.data.geojson.GeoJsonFeature;
import com.google.maps.android.data.geojson.GeoJsonLayer;
import com.google.maps.android.data.geojson.GeoJsonLineString;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.List;

import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;


public class HomeFragment extends Fragment implements OnMapReadyCallback {

    private final static String mLogTag = "GeoJson";

    GoogleMap mGoogleMap;
    MapView mMapView;
    View mView;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mView = inflater.inflate( R.layout.fragment_home, container, false );
        return mView;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated( view, savedInstanceState );

        mMapView = (MapView) mView.findViewById( R.id.map );
        if (mMapView != null){
            mMapView.onCreate( null );
            mMapView.onResume();
            mMapView.getMapAsync( this );
        }
    }


    GeoJsonLayer layer = new GeoJsonLayer(getMap(), R.raw.picnicsites,
            getApplicationContext());

    layer.addLayerToMap();


    @Override
    public void onMapReady(GoogleMap googleMap) {
        MapsInitializer.initialize(getContext());

        mGoogleMap = googleMap;

        googleMap.setMapType( GoogleMap.MAP_TYPE_SATELLITE );

        googleMap.addMarker( new MarkerOptions()
                .position(new LatLng( 35.126411, 33.429859 ) )
                .title( "Cyprus" )
                .snippet( "Center of island" )
                .icon( BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));

        CameraPosition Liberty = CameraPosition.builder()
                .target(new LatLng( 36.126411, 33.429859 ))
                .zoom( 8f )
                .bearing( 0 )
                .tilt( 0 )
                .build();

        googleMap.moveCamera( CameraUpdateFactory.newCameraPosition( Liberty ) );

    }
}
  

Ответ №1:

Кажется, утверждение строк:

 GeoJsonLayer layer = new GeoJsonLayer(getMap(), R.raw.picnicsites,
        getApplicationContext());

layer.addLayerToMap();
  

неверно — они должны быть внутри onMapReady(GoogleMap googleMap) (и new GeoJsonLayer(getMap()... следует изменить на GeoJsonLayer(mGoogleMap... ) вот так:

 @Override
public void onMapReady(GoogleMap googleMap) {
    MapsInitializer.initialize(getContext());

    mGoogleMap = googleMap;

    // move them here:
    GeoJsonLayer layer = new GeoJsonLayer(mGoogleMap, R.raw.picnicsites,
        getApplicationContext());

    layer.addLayerToMap();

    googleMap.setMapType( GoogleMap.MAP_TYPE_SATELLITE );

    googleMap.addMarker( new MarkerOptions()
            .position(new LatLng( 35.126411, 33.429859 ) )
            .title( "Cyprus" )
            .snippet( "Center of island" )
            .icon( BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));

    CameraPosition Liberty = CameraPosition.builder()
            .target(new LatLng( 36.126411, 33.429859 ))
            .zoom( 8f )
            .bearing( 0 )
            .tilt( 0 )
            .build();

    googleMap.moveCamera( CameraUpdateFactory.newCameraPosition( Liberty ) );

}
  

а также удалить

 import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
  

строка.

Комментарии:

1. Спасибо, если я удалю статический файл импорта com.mapbox.mapboxsdk.Mapbox.getApplicationContext; У меня проблема с getApplicationContext(). Во-вторых, теперь у меня проблема с GeoJsonLayer: необработанные исключения: java.io.IOException, org.json.JSONException

2. @Vassilis 1) используйте HomeFragment.this.getActivity().getApplicationContext() вместо этого только getApplicationContext() 2) проверьте R.raw.picnicsites структуру файла, например, с помощью этого сервиса.