【问题标题】:android - eclipse: display google maps using coordinates obtained using gpsandroid - eclipse:使用使用 gps 获得的坐标显示谷歌地图
【发布时间】:2012-03-01 05:02:30
【问题描述】:

我正在尝试创建一个应用程序,该应用程序将通过 gps 获取用户位置,在谷歌地图中显示用户位置,然后在一定时间/移动后更新。

我目前有一个应用程序,它将通过 gps 获取用户位置并每 10 米/10,000 毫秒更新一次,但目前它所做的只是显示坐标是什么。我已经将它设置为连接到谷歌地图,但现在它只是将地图设置为我自己手动输入的一些坐标。

如何获取它,以便地图根据通过 gps 获得的坐标显示位置?

任何帮助将不胜感激,我对这一切都很陌生!

编辑:这是我的代码!

package com.android.basicmap;

import com.google.android.maps.MapActivity;
import android.os.Bundle;
import com.google.android.maps.MapView;
import com.google.android.maps.MapController;
import com.google.android.maps.GeoPoint;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;

public class BasicMapActivity extends MapActivity {

private MapView mapView;
private MapController mapController;

private LocationManager locationManager;
private LocationListener locationListener;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  

    locationListener = new GPSLocationListener();

    locationManager.requestLocationUpdates(
      LocationManager.GPS_PROVIDER, 
      0, 
      0, 
      locationListener);

    mapView = (MapView) findViewById(R.id.mapView);
    mapView.setStreetView(true);
    mapView.setBuiltInZoomControls(true);

    mapController = mapView.getController();
    mapController.setZoom(16);
}

@Override
protected boolean isRouteDisplayed() {
  return false;
}

private class GPSLocationListener implements LocationListener 
{
  @Override
  public void onLocationChanged(Location location) {
    if (location != null) {
      GeoPoint point = new GeoPoint(
          (int) (location.getLatitude() * 1E6), 
          (int) (location.getLongitude() * 1E6));

      Toast.makeText(getBaseContext(), 
          "Latitude: " + location.getLatitude() + 
          " Longitude: " + location.getLongitude(), 
          Toast.LENGTH_SHORT).show();

      mapController.animateTo(point);
      mapController.setZoom(16);
      mapView.invalidate();
    }
  }


}

}

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow!如果您包含一些相关代码sn-ps,您将有更好的机会回答您的问题。例如,您提到您有位置更新工作,但地图更新部分没有工作。包含 Map 类中的 relevant sn-ps 可能是个好主意。

标签: android eclipse google-maps gps


【解决方案1】:

这是一个完整的教程:http://www.codeproject.com/Articles/112044/GPSLocator-App-to-Find-Current-Nearest-Location-us

但是来吧,我发现通过输入“android 如何在 google map 上显示 gps 位置”,请在发布这些简单问题之前更彻底地 google 并阅读教程 :)

【讨论】:

  • 本教程正是我正在寻找的,遗憾的是我曾多次尝试完成它,但我无法让它发挥作用!不过还是感谢您发布它。
  • 不工作时显示什么?让我们帮助您完成 :) 另外,如果答案令人满意,请考虑将其标记为已接受 - 通过单击左侧的小复选标记。
  • 我已经完成了教程的第一部分:添加地图和缩放控件,下一部分“添加 gps 位置”给我带来了很多错误!我已经更新了我原来的代码发帖向您展示到目前为止我在教程中的进度,也许您可​​以看到我哪里出错了!非常感谢
  • 考虑发布错误,这将有助于发现问题
  • 我在私有类 GPSLocationListener 中遇到错误:此行有多个标记 - TESTActivity.GPSLocationListener 类型必须实现继承的抽象方法 LocationListener.onProviderDisabled(String) - TESTActivity.GPSLocationListener 类型必须实现继承的抽象方法 LocationListener.onStatusChanged(String, int, Bundle) - TESTActivity.GPSLocationListener 类型必须实现继承的抽象方法 LocationListener.onProviderEnabled(String)
【解决方案2】:

假设您使用的是MapView,最简单的做法是将MyLocationOverlay 的实例添加到地图中,因为Android 会为您显示用户的位置。

map=(MapView)findViewById(R.id.whatever_your_mapview_id_is);
map.getOverlays().add(new MyLocationOverlay(this, map));

如果出于某种原因您想自己执行此操作而不是使用内置工具,您可以创建自己的ItemizedOverlay 来显示该点,并将您自己的自定义叠加层的实例添加到MapView

【讨论】:

    【解决方案3】:

    如果要显示用户的当前位置,最好使用 MyLocationOverlay。但是,您可以选择:

    map.animateTo(GeoPoint);
    

    【讨论】:

      【解决方案4】:

      假设你已经定义了你的 mapview 和 mapcontroller

      为此,首先您需要像这样在 OnCreate 方法中订阅位置更新:下面的代码请求每 1000 毫秒或 10 分钟更新一次

      LocationManager lm;
      lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10f, this);
      

      在你下方是我在地图上更新位置的方式

      @Override
      GeoPoint p,P2, p3;
      double lat=53,  double lng=4;
          public void onLocationChanged(Location location) {
              Log.v(tag, "Location Changed");
      
              lat= (int) (location.getLatitude());
              lng= (int) (location.getLongitude());
      
              sb = new StringBuilder(512);
      
              noOfFixes++;
      
              p = new GeoPoint(
                      (int) (location.getLatitude()*1E6), 
                    (int) (location.getLongitude()*1E6));
              mapController.animateTo(p);
              mapController.setCenter(p);
      
              Toast.makeText(this, "Lat= " + lat + " Long= " + lng, Toast.LENGTH_SHORT).show();
      
      
      
      
          }
      

      【讨论】:

      • 我已尽我所能使用您的代码,但仍然无法正常工作!我已经编辑了我的帖子以包含我的代码,我不知道这是否会让您更好地了解我哪里出错了!非常感谢您的帮助。
      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 2015-02-05
      相关资源
      最近更新 更多