3

我正在使用 Android 的地理编码器来允许在我的基于地图的应用程序中搜索位置。地理编码运行良好,应用程序成功地将 MapView 重新定位在地理编码结果上。问题是我不知道移动到新位置时要使用什么缩放级别。参数可以是一条街道,location_query也可以是一个国家——我怎么知道放大多远才能显示结果位置?也就是说,我用什么代替???

public void goToPlace(String location_query) {

    List<Address> addresses;
    Geocoder gc = new Geocoder(_ctx);

    addresses = gc.getFromLocationName(location_query, 1);
    if (addresses != null) {
        Address a = addresses.get(0);
        int lat = (int) (a.getLatitude() * 1E6);
        int lon = (int) (a.getLongitude() * 1E6);
        mapController.animateTo(new GeoPoint(lat, lon));
        mapController.setZoom(???);
    }
}
4

3 回答 3

3

我的想法是使用方法getAddressLine来选择合适的缩放级别。正如文档所说:

返回由给定索引编号的地址行(从 0 开始),如果不存在这样的行,则返回 null。

因此,对于一个国家/地区,它仅返回 1 条线路地址,2 条城市线路,3 条街道线路。对于每种情况,您可以使用不同的缩放级别。

于 2011-10-10T08:54:06.133 回答
2

Android 地理编码 API 仅提供纬度和经度。另一方面,Web 地理编码 API 提供缩放地图所需的纬度、经度和视口。要点是,在 Google 决定扩展其 Android API 之前,您需要使用 Web API 来获取丢失的视口缩放数据。

幸运的是,使用 Web API 并不难,这要归功于 GeocoderPlus 库,它为您完成所有 Web API 请求和 JSON 解析,并且只返回 Java 对象作为结果。它有一个类似于原生 Geocoder 的界面,并且可以 JAR 格式包含到您的 Android 应用程序中。

查看下面的博客文章以了解使用情况: http: //bricolsoftconsulting.com/perfect-geocoding-zoom-part-2/

于 2011-11-08T03:32:22.193 回答
0

你可以做 setZoom(18) 或类似的事情,因为你只有一个点要显示。

如果您有多个点,那么您需要的是zoomToSpan。您需要做的是找到最小和最大 lat/lng 对将 then 之间的差异传递给上述函数以获得最佳缩放级别。

于 2011-04-26T14:57:50.667 回答