当前位置: 首页 > 面试题库 >

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

卞成荫
2023-03-14
问题内容

我正在尝试TextView在Google地图的左上角显示a
,以告知用户距特定标记点位置的x距离,即“您靠近位置A”,但仅显示TextViewif在范围内。如果它们超出范围,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_width="match_parent"
    android:layout_height="match_parent" >

    <fragment
        xmlns:map="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        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>

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


问题答案:

简短答案 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



 类似资料:
  • 问题内容: 我正在编写一个脚本,其中将业务量以纬度和经度加载到mySQL数据库中。然后,我向该脚本提供一个(最终用户的)经度纬度,并且该脚本必须计算从提供的经度/经度到它从数据库中获得的条目的EACH的距离,并按从最远到最远的顺序对其进行排序。 实际上,我实际上只需要大约10或20个“最近”的结果,但是除了从数据库中获取所有结果并对每个结果运行函数然后进行数组排序之外,我什么也想不做。 这是我已经

  • 此函数应显示列表的内容,列表左侧用“[q]”标记当前元素。不幸的是,只显示普通数据。为什么? 为了完整起见,我来介绍一下初始化列表的函数:

  • 我试图通过使用谷歌地图的api来获取我发送的位置的附近位置。下面是url(https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362 日志e(“Res”,response.body()。getStatus()); 我是不是用正确的方式进行改造? 我的客户。爪哇: Near

  • 问题内容: 我想从RichTextArea获取光标位置或位置。我不知道如何在没有任何鼠标事件的情况下获取当前光标位置。例如,TextArea具有方法getCursorPos(),但是RichTextArea没有诸如TextArea这样的方法。有人知道吗 请帮我… 提前致谢… 问题答案: 如果要在RichTextArea中的光标位置插入某些内容,可以使用格式化程序来完成: 要使用JavaScript

  • 我有如下结构的数据库。如何在5公里内location_id。有纬度和经度的数字已经在数据库表中。请参阅我的数据库结构图像。 以下是数据库结构图像: 我已经从这个链接搜索如何找到最近的位置使用纬度和经度从sql数据库?我不明白密码。 SELECT id,(3959*acos(cos(弧度(37))*cos(弧度(lat ) ) * cos(弧度(lng)-弧度(-122))sin(弧度(37))*s

  • 我正在通过Places使用GoogleAppClient和Places API。GeoDataApi。getAutocompletePredictions()获取地址/地点自动完成建议(https://developers.google.com/places/android/autocomplete). 该方法需要一个GoogleAppClient对象、一个自动完成的字符串和一个LatLngBou