在我的应用程序中,我希望通过GPS和/或网络获得纬度和经度值。我的代码工作但有时它给出准确的值,有时它没有给出准确的值,有时它会给出距离准确位置10或20米的值。 代码:
mlocListener = new MyLocationListener(getApplicationContext());
/* Use the LocationManager class to obtain GPS locations */
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
10000, 0, mlocListener);
} else if (mlocManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
mlocManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 10000, 0, mlocListener);
}
Location gpsLocation = mlocManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location netLocation = mlocManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (gpsLocation != null) {
mlocListener.latitude = gpsLocation.getLatitude();
mlocListener.longitude = gpsLocation.getLongitude();
double lat = (double) (gpsLocation.getLatitude());
double lng = (double) (gpsLocation.getLongitude());
Toast.makeText(this, "Location attributes using GPS Provider",
Toast.LENGTH_LONG).show();
} else if (netLocation != null) {
mlocListener.latitude = netLocation.getLatitude();
mlocListener.longitude = netLocation.getLongitude();
double lat = (double) (netLocation.getLatitude());
double lng = (double) (netLocation.getLongitude());
Toast.makeText(this, "Location attributes using NETWORK Provider",
Toast.LENGTH_SHORT).show();
}
答案 0 :(得分:2)
使用loc.getAccuracy()方法检查您收到的位置的准确性级别。如果该值小于10(或小于该值),则可以考虑它,否则等待位置Lister获取另一个位置。
getLastKnownLocation是你最后知道的位置,不要只使用getAccuracy来检查时间。
如果只需要准确的位置,最好不要使用getLastKnownLocation。
答案 1 :(得分:0)
通常GPS精确到3米,但如果它的10到20米,GPS就可以实现。
民用标准GPS接收器可提供少量精确度 米。在实践中,收到的卫星的数量和几何形状 大大影响准确性,在日常使用中,准确度 可以预期大约20米
。
此外,如果您从网络提供商处获取当前位置,则可能会出现更加不准确的位置。
答案 2 :(得分:0)
如果您期望获得最高准确度,我会说您解雇网络提供商,因为它受到与电话运营商等相关的其他因素的影响。
locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
使用手机内置GPS接收器(时间成本高)可以获得您的位置,但它可以为您提供最大的准确度。