gpt4 book ai didi

android - 无法将我的位置叠加层添加到 osmdroid map

转载 作者:行者123 更新时间:2023-11-29 19:01:42 25 4
gpt4 key购买 nike

我正在尝试使用以下代码将我的 GPS 位置添加到 map 中:

MyLocationNewOverlay locationOverlay;
locationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(mContext), mapView);
locationOverlay.enableMyLocation();
mapView.getOverlays().add(locationOverlay);

但是,代码没有任何效果,也没有向 map 添加任何内容(例如没有图标、没有文本等)。请注意,缩放叠加层和手势叠加层工作得很好,但是当我将它们添加到 map View 时,MyLocationNewOverlay 叠加层没有任何效果。有任何想法吗?

更新:

这是我的 Activity 代码:

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) {
}
}

最佳答案

这个问题经常被问到。这是它不起作用的最常见原因

  • 您的设备甚至有 GPS 吗?
  • 您的设备是否启用了 GPS 服务?
  • osmdroid 默认只添加 GPS,您可能需要将网络位置服务器添加到覆盖层查询的传感器列表中
  • 您在外面并且有 GPS 信号吗?
  • 您是否拥有 list 中授予的权限?
  • 如果以 API23+ 为目标,您是否要求用户提供运行时权限?

如果您碰巧有自定义位置提供程序或需要自定义叠加层使用的位置提要,请尝试以下操作

GpsMyLocationProvider prov= new GpsMyLocationProvider(); 
prov.addLocationSource(LocationManager.NETWORK_PROVIDER);
MyLocationNewOverlay locationOverlay = new MyLocationNewOverlay(prov, mapView);
locationOverlay.enableMyLocation();
mMap.getOverlayManager().add(locationOverlay);

然后照常进行。

关于android - 无法将我的位置叠加层添加到 osmdroid map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48848801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com