【发布时间】:2018-02-18 05:34:31
【问题描述】:
我正在尝试使用以下代码将我的 GPS 位置添加到地图中:
MyLocationNewOverlay locationOverlay;
locationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(mContext), mapView);
locationOverlay.enableMyLocation();
mapView.getOverlays().add(locationOverlay);
但是,代码没有任何作用,也没有向地图添加任何内容(例如,没有图标、没有文本等)。请注意,缩放叠加和手势叠加可以完美运行,但是当我将 MyLocationNewOverlay 叠加添加到地图视图时,它们不起作用。有任何想法吗?
更新:
这是我活动的代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener, LocationListener {
private static final int STORAGE_REQUEST = 100;
private static final int LOCATION_REQUEST = 101;
private static final String TAG = "MainActivity";
private Context mContext;
private MapView mMap;
private EditText latitude;
private EditText longitude;
private Button searchLocation;
IMapController mapController;
private MyLocationNewOverlay locationOverlay;
ArrayList<OverlayItem> items = new ArrayList<>();
/**
* Compass overlay
*/
private CompassOverlay mCompassOverlay;
private RotationGestureOverlay mRotationOverlay;
private ScaleBarOverlay mScaleBarOverlay;
private MyLocationNewOverlay mMyLocationOverlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getApplicationContext();
Configuration.getInstance().load(mContext, PreferenceManager.getDefaultSharedPreferences(mContext));
Configuration.getInstance().setUserAgentValue("Dalvik");
setContentView(R.layout.activity_main);
//Check Permissions
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, STORAGE_REQUEST);
}
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST);
}
mMap = findViewById(R.id.mapView);
mMap.setTileSource(TileSourceFactory.MAPNIK);
mMap.setBuiltInZoomControls(true);
mMap.setMultiTouchControls(true);
latitude = findViewById(R.id.latitude);
longitude = findViewById(R.id.longitude);
searchLocation = findViewById(R.id.searchLocation);
searchLocation.setOnClickListener(this);
mapController = mMap.getController();
mapController.setZoom(9.0f);
//Add my location
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
final LocationManager locMgr = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
final String provider = locMgr.getBestProvider(criteria, true);
locMgr.requestLocationUpdates(provider, 1000, 100, this);
Location loc = locMgr.getLastKnownLocation(provider);
Log.d(TAG, "onCreate: " + loc.getLatitude() + ", " + loc.getLongitude());
//Start on Iran
GeoPoint iran = new GeoPoint(32.4279, 53.6880);
mapController.setCenter(iran);
//Add my location overlay
mMyLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(mContext), mMap);
mMyLocationOverlay.enableMyLocation();
mMap.getOverlays().add(mMyLocationOverlay);
//Add compass overlay
mCompassOverlay = new CompassOverlay(mContext, mMap);
mCompassOverlay.enableCompass();
mCompassOverlay.setEnabled(true);
mMap.getOverlays().add(mCompassOverlay);
//Add rotation gesture overlay
mRotationOverlay = new RotationGestureOverlay(mMap);
mRotationOverlay.setEnabled(true);
mMap.setMultiTouchControls(true);
mMap.getOverlays().add(mRotationOverlay);
//Add map scale bar overlay
mScaleBarOverlay = new ScaleBarOverlay(mMap);
mScaleBarOverlay.setCentred(true);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
mScaleBarOverlay.setScaleBarOffset(dm.widthPixels / 2, 30);
mMap.getOverlays().add(mScaleBarOverlay);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//Check and decide
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(mContext, R.string.permission_not_granted_please_allow, Toast.LENGTH_LONG).show();
}
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.searchLocation) {
double lat = Double.valueOf(latitude.getText().toString());
double lng = Double.valueOf(longitude.getText().toString());
GeoPoint geoPoint = new GeoPoint(lat, lng);
mapController.setCenter(geoPoint);
}
}
@Override
protected void onPause() {
super.onPause();
mMyLocationOverlay.setEnabled(false);
mMap.onPause();
}
@Override
protected void onResume() {
super.onResume();
mMyLocationOverlay.setEnabled(true);
mMap.onResume();
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}
【问题讨论】:
标签: android openstreetmap osmdroid