如何从 Google Maps android 中的当前位置不断检测附近的标记位置?

Posted

技术标签:

【中文标题】如何从 Google Maps android 中的当前位置不断检测附近的标记位置?【英文标题】:How to constantly detect nearby marker locations from current location in Google Maps android? 【发布时间】:2015-11-23 22:06:59 【问题描述】:

我试图在谷歌地图的左上角显示TextView,通知用户他们是否与特定标记点位置有 x 距离,即“您靠近位置 A”,但仅显示 @987654322 @如果在范围内。如果它们超出范围,TextView 将消失。

我了解 Google Places API 会向您显示所有附近的位置,但我只想在用户距离我 x 距离时显示我在地图上的标记的附近位置。

我怎样才能做到这一点?我还需要使用 Google Places API 吗?

我的班级.java:

private GoogleMap mMap;

private LatLng currLocation;

private static final LatLng POINTA = new LatLng(32.820193, -117.232568);
private static final LatLng POINTB = new LatLng(32.829129, -117.232204);
private static final LatLng POINTC = new LatLng(32.821114, -117.231534);
private static final LatLng POINTD = new LatLng(32.825157, -117.232003);

// Array to store hotspot coordinates
private ArrayList<LatLng> markerCoords = new ArrayList<LatLng>();
private static final int POINTS = 4;

@Override
protected void onCreate(Bundle savedInstanceState)

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);

    setUpMapIfNeeded();


@Override
public boolean onCreateOptionsMenu(Menu menu)

    // Create MenuInflater object to insert ActionBar buttons
    MenuInflater inflater = getMenuInflater();

    // Display the ActionBar buttons from .xml
    inflater.inflate(R.menu.menu_map, menu);

    return true;


@Override
protected void onResume()

    super.onResume();
    setUpMapIfNeeded();



private void setUpMapIfNeeded()

    if (mMap == null)
    
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();

        // Check if we were successful in obtaining the map.
        if (mMap != null)
        
            markerCoords.add(POINTA);
            markerCoords.add(POINTB);
            markerCoords.add(POINTC);
            markerCoords.add(POINTD);

            setUpMap();
        
    

private void setUpMap()

    // Set My Location blue dot
    mMap.setMyLocationEnabled(true);

    LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String provider = locationManager.getBestProvider(criteria, true);
    Location myLocation = locationManager.getLastKnownLocation(provider);

    if (myLocation != null)
    
        double latitude = myLocation.getLatitude();
        double longitude = myLocation.getLongitude();
        currLocation = new LatLng(latitude, longitude);
    

    for (int i = 0; i < POINTS; i++)
    
        mMap.addMarker(new MarkerOptions()
                .position(markerCoords.get(i))
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.post_it_marker)));
    

map.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_ >

    <fragment
        xmlns:map="http://schemas.android.com/apk/res-auto"
        android:layout_
        android:layout_
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        map:cameraTargetLat="32.881416"
        map:cameraTargetLng="-117.237428"
        map:cameraZoom="15"
        map:mapType="normal" />
</RelativeLayout>

有人能指出我正确的方向吗?谢谢

【问题讨论】:

您好,您是否解决了这个问题,因为我面临同样的挑战? 【参考方案1】:

简答location.distanceTo(anotherLocation)

我建议在 setupMap 中添加额外的侦听器,以简单的方式获取所有位置更改。

mMap.setMyLocationEnabled(true);
mMap.setOnMyLocationChangeListener(this);

然后在此侦听器中,您只需获取当前位置与目标之间的距离。距离以米为单位。

@Override
public void onMyLocationChange(Location location) 
    Location target = new Location("target");
    for(LatLng point : new LatLng[]POINTA, POINTB, POINTC, POINTD) 
        target.setLatitude(point.latitude);
        target.setLongitude(point.longitude);
        if(location.distanceTo(target) < METERS_100) 
            // bingo!
        
    

当然,你应该让你的活动implements GoogleMap.OnMyLocationChangeListener

【讨论】:

我收到一个关于 this 的错误,指出“setOnMyLocationChangeListener 不能应用于此” @Pangu 加油,用 android studio 很容易解决。只需让您的活动实现 GoogleMap.OnMyLocationChangeListener。我更新了我的答案 @pengrad...我很抱歉我是 android 新手 :( ....我会试试这个并很快让你知道! @Pangu 是的,让我们关闭这个帖子:) 这是直线距离,在谷歌地图上 - 路线距离

以上是关于如何从 Google Maps android 中的当前位置不断检测附近的标记位置?的主要内容,如果未能解决你的问题,请参考以下文章

Android Google Maps v2 从资产中的图像加载 OverlayTile

如何启用 google maps android api 以实现平滑的两指缩放?

在 Android google maps api v2 for 4.0 中,显示从当前位置到给定纬度的路线

将路线的 JSON 导入到 Google Maps Android 活动中

java Android - google maps v2 - 从字符串/ coor加载地址的任务。

java Android - google maps v2 - 从字符串/ coor加载地址的任务。