获取某一位置的经纬度信息

阅读更多

在移动App程序中,有些情况下需要获取某一位置的经纬度信息。例如 当GPS定位不准确的时候,可以通过手工选取位置信息来修正一些错误信息。 特别对于一些找朋友类应用的时候,明明人在A地结果地图上显示的结果却在B地,误差有1KM,让人无法接受。

而使用谷嘀位置选择器就可以手工在地图上选择位置了,并且可以把所选位置的经纬度信息复制出来,选择好位置后,点击程序界面右下方?按钮傍边的复制按钮即可;而对于第三方开发者来说,可以直接调用谷嘀位置选择器来让用户选择位置,完成后把用户选择的经纬度信息返回给第三方App。

谷嘀位置选择器App的主界面,如右图 图中标记的信息都是可以有第三方App定制的信息,如何定制下面会介绍;

谷嘀位置选择

 

先来看看如何调用该程序来选择位置:
1. 第三方App通过Intent (goodev.intent.action.PICK_LOCATION) 来调用谷嘀位置选择器,然后在Intent中设置一些附加数据(通过函数 intent.putExtra(key, value)) 来定制谷嘀位置选择器的界面。

可定制元素的KEY如下:

  • TITLE:自定义选择界面的标题;
  • ENABLE_SEARCH:是否启用位置搜索,如果为false则隐藏搜索按钮和位置输入框,默认为true;
  • SEARCH_HINT:自定义搜索位置输入框中的输入提示内容;
  • SEARCH_TEXT:自定义搜索按钮的文本内容;
  • OK_TEXT:自定义完成按钮的文本内容;
  • LOCATION_TEXT:自定义显示用户所选位置前面的位置标签的文本;
  • ZOOM_LEVEL:自定义地图的默认放大缩小级别(int型数字 范围为1-21);
  • HELP_TEXT:自定义帮助界面的文本内容(用户点击界面右下角的?按钮打开帮助界面);
  • LATITUDE:自定义默认选择位置的纬度坐标信息,该值为字符串,内容为纬度数值*1000000,例如 如果想设置默认位置为 (12.343,123.21) 则这个字符串为“12343000”;
  • LONGITUDE:自定义默认经度信息,字符串 同上;

用户选择后返回的内容有3个,他们的KEY分别为:

  • LATITUDE:内容为纬度坐标值*1000000, int型;
  • LONGITUDE:内容为经度坐标值*1000000, int型;
  • ADDRESS:返回的内容为android.location.Address 对象,如果没法获取位置(例如 无法访问网络),则返回NULL。

为了简化调用该程序,我们还提供了一个开发者集成库,下载goodevLocationPickCn.jar这个文件(或者下载源代码:Utils.java ),然后通过如下代码来调用即可:

帮助
1
2
3
4
5
6
Intent intent = new Intent( "goodev.intent.action.PICK_LOCATION" );
intent.putExtra( "title" , "Pick a address!" );
intent.putExtra( "search" , true );
intent.putExtra( "latitude" , "12210000" );
intent.putExtra( "longitude" , "22210000" );
Utils.pickLocationOrShowDownloadDialog( this ,intent, 200 );

如果用户手机中还没有安装谷嘀位置选择器则会弹出一个对话框告诉用户需要安装,可以通过网络下载安装也可以通过电子市场安装。如下图:

下载对话框

当用户完成后,需要在onActivityResult函数中处理用户选择的结果,示例代码如下:

帮助
1
2
3
4
5
6
7
8
9
@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data) {
     super .onActivityResult(requestCode, resultCode, data);
     if (requestCode == 200 && resultCode == Activity.RESULT_OK) {
         Address address = data.getParcelableExtra( "address" ); //注意:这个可能为null
         int latitudeE6 = data.getIntExtra(Utils.LATITUDE, 0 );
         int longitudeE6 = data.getIntExtra(Utils.LONGITUDE, 0 );
     }
}
看不到图片的 点击这里: http://yunfeng.sinaapp.com/?p=332 

你可能感兴趣的:(android)