使用 Google 静态地图检索经度/纬度的问题

Posted

技术标签:

【中文标题】使用 Google 静态地图检索经度/纬度的问题【英文标题】:Issue retrieving longitude/latitude using Google Static Maps 【发布时间】:2014-11-19 00:31:25 【问题描述】:

我遇到了一个问题,我需要从传递给检索 Google 静态地图的 AsyncTask 的地址中获取经度/纬度。

此 AsyncTask 可以获取一组坐标并创建地图,还可以获取使用 Google Places API 检索到的地址。

我遇到的问题是我不知道如何检索传入的地址的坐标。有谁知道我可以获得 Long/Lat 的方法吗?我想出如何做到这一点的唯一方法是使用另一个 AsyncTask。不过,我宁愿不提出 2 个请求。

创建静态地图 类 CreateStaticMapAsyncTask 扩展 AsyncTask

    private static final String STATIC_MAPS_API_BASE = "https://maps.googleapis.com/maps/api/staticmap";
    private static final String STATIC_MAPS_API_SIZE = "300x300";

    @Override
    protected void onPreExecute() 
        addTask(); // adds one to task count.
        super.onPreExecute();

    

    @Override
    protected Bitmap doInBackground(String... params) 
        // TODO Auto-generated method stub
        locationString = params[0];
        Log.e("LOCATION STRING", locationString);
        Bitmap bmp = null;
        StringBuilder sb = new StringBuilder(STATIC_MAPS_API_BASE);
        try 
            sb.append("?center=").append(
                    URLEncoder.encode(locationString, "UTF-8"));
         catch (UnsupportedEncodingException e1) 
            // TODO Auto-generated catch block
            e1.printStackTrace();
        
        sb.append("&size=" + STATIC_MAPS_API_SIZE);
        sb.append("&key=" + API_KEY);
        String url = new String(sb.toString());
        Log.e("URL", sb.toString());

        HttpClient httpclient = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);

        InputStream in = null;
        try 
            in = httpclient.execute(request).getEntity().getContent();
            bmp = BitmapFactory.decodeStream(in);
            in.close();
         catch (Exception e) 
            e.printStackTrace();
        
        return bmp;

    

    protected void onPostExecute(Bitmap bmp) 
        super.onPostExecute(bmp);
        if (bmp != null) 
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
            data = stream.toByteArray();
            removeTask();
            // allTasksComplete();

        
    

【问题讨论】:

【参考方案1】:

您需要 Geocoder 类。

处理地理编码和反向地理编码的类。地理编码是 转换街道地址或其他描述的过程 位置转换为(纬度,经度)坐标。

如果您查看the example,您会看到Geocoder 在后台线程中使用。由于您已经有一个AsyncTask,您可以将代码添加到doInBackground() 本身。该示例需要修改,因为您需要地址的纬度和经度,而不是相反。

您将需要getFromLocationName() 方法:

返回已知描述命名的地址数组 location,可以是地名,例如“Dalvik, Iceland”, 地址,例如“1600 Amphitheatre Parkway, Mountain View, CA”, 机场代码如“SFO”等。返回的地址将是 针对提供给此类的构造函数的语言环境进行本地化。

然后从Address对象中,可以得到经纬度。

【讨论】:

以上是关于使用 Google 静态地图检索经度/纬度的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用数据库中的多个纬度和经度值在 Google 地图上标记路线

从谷歌静态地图中的像素坐标获取经度/纬度

从用户地图上的 4 个角检索纬度和经度

使用 Bing 或 Google Maps API 获取用户的位置(纬度、经度)

如何使用从服务中检索到的纬度和经度并在地图上显示它们?

如何获得静态谷歌地图的边界?