#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
структуру файла, например, с помощью этого сервиса.