android 怎么批量调用百度地图的地理编码功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 怎么批量调用百度地图的地理编码功能相关的知识,希望对你有一定的参考价值。

一、下载最新百度地图sdk,导入工程中

二、根据官方文档初始化地图,在main.xml中添加对应布局

<com.baidu.mapapi.map.MapView
    android:id="@+id/bmapView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true" />

//获取地图控件引用
mapView = (MapView) findViewById(R.id.bmapView);
baiduMap = mapView.getMap(); // 获取地图控制器

三、通过地理编码获取经纬度

p//        第一步,创建地理编码检索实例;
        mSearch = GeoCoder.newInstance();//        第二步,创建地理编码检索监听者;
        OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener()             public void onGetGeoCodeResult(GeoCodeResult result)                 if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR)                     //没有检索到结果
                else                     //获取地理编码结果
                    float latitude = (float) result.getLocation().latitude;                    float longitude = (float) result.getLocation().longitude;                    final LatLng point = new LatLng(latitude, longitude);                    //加载自定义marker
                    View popMarker = View.inflate(MainActivity.this, R.layout.pop, null);
                    Bitmap bitmap1 = getViewBitmap(popMarker);
                    BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(bitmap1);                    //构建MarkerOption,用于在地图上添加Marker
                    OverlayOptions option = new MarkerOptions()
                            .position(point)
                            .icon(bitmapDescriptor);                    //在地图上添加Marker,并显示
                    Marker marker = (Marker) baiduMap.addOverlay(option);

                
                        @Override
            public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result)                 if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR)                     //没有找到检索结果
                                //获取反向地理编码结果
            
        ;//        第三步,设置地理编码检索监听者;
        mSearch.setOnGetGeoCodeResultListener(listener);//        第四步,发起地理编码检索;
        mSearch.geocode(new GeoCodeOption()
                .city("北京")
                .address("海淀区上地十街10号"));//百度地图上少一个括号

将View转换成Bitmap的方法/**
 * 将View转换成Bitmap
 * @param addViewContent
 * @return
 */private Bitmap getViewBitmap(View addViewContent) 

    addViewContent.setDrawingCacheEnabled(true);

    addViewContent.measure(
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    addViewContent.layout(0, 0,
            addViewContent.getMeasuredWidth(),
            addViewContent.getMeasuredHeight());

    addViewContent.buildDrawingCache();
    Bitmap cacheBitmap = addViewContent.getDrawingCache();
    Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);    return bitmap;

Marker的自定义布局pop.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical" >
    <ImageView
        android:id="@+id/iv_title"
        android:layout_width="42dp"
        android:layout_height="42dp"
         />
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="42dp"
        android:padding="5dp"
        android:gravity="center"
        android:text="标题"
        android:textSize="16dp" /></LinearLayout>

参考技术A 在当时实习的项目经理(于老师)的指导下我才明白什么意思,代码也都是他写的,特此声明。
界面设计:

使用说明:在上面两个Text文本框分别输入纬度和纬度,第三个Text文本框会输出地址;
在上面两个Text文本框分别输入地址,第三个Text文本框会输出纬度和纬度;
点击"地理编码"后触发事件:

private void button2_Click(object sender, EventArgs e)

string url = "http://api.map.baidu.com/geocoder/v2/?ak=Y4NcP7YcxEkiwSuYedq5vW09&output=json&address=" + this.textBox2.Text + "&city=" + this.textBox1.Text;

WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url);
StreamReader sr = new StreamReader(stream);
string strLine = "";
while ((strLine = sr.ReadLine()) != null)

JsonObject js = JsonObject.Parse(strLine) as JsonObject;
if (js["status"].ToString()=="0")

string result = "经度:";
result += js["result"]["location"]["lat"];
result += ",纬度:" + js["result"]["location"]["lng"];
this.textBox4.Text = result;




sr.Close();

说明:使用Json格式传输数据,调用 Geocoding APIWeb服务API需要百度LBS开发平台申请秘钥,链接如下:http://developer.baidu.com/map/index.php?title=webapi/guide/webservice-geocoding
点击"逆地理编码"后触发事件:

private void button1_Click(object sender, EventArgs e)

string url = "http://api.map.baidu.com/geocoder/v2/?ak=Y4NcP7YcxEkiwSuYedq5vW09&output=json&location=" + this.textBox1.Text + "," + this.textBox2.Text + "&pois=0";

WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url);
StreamReader sr = new StreamReader(stream);
string strLine = "";
while ((strLine = sr.ReadLine()) != null)

JsonObject js = JsonObject.Parse(strLine) as JsonObject;
if (js["status"].ToString() == "0")

string result = "地址:" + js["result"]["formatted_address"];
this.textBox4.Text = result;


sr.Close();

调用百度地图API怎么获取坐标点的地理位置

我看了百度地图的API说明,但我不知道该如何实现这个功能,就是传入一个坐标点,返回该点对应的地理位置。
我知道可以通过getLocation之类的方法来获取到哪个市哪个街道多少门牌号。但我要的不是这个,而是要类似于“XX省XX市XX区XX学校”或者是“XX省XX市XX县XX高速路300米”之类的信息。不知该如何现实!

用getLocation()方法啊,很简单的
var a ;
var i=0;
var latList = new Array();
var longList = new Array();
latList[i] = 115.68596;
longList[i] = 34.49083;
i++;
try
var listMap = new BMap.Map("containerNone");
listMap.centerAndZoom(point,7);
listMap.enableScrollWheelZoom();
var points = [];
for (i in latList)
var point = new BMap.Point(latList[i], longList[i]);
points[i] = point;
;

var listGeo = new BMap.Geocoder();

for (i in points)
listGeo.getLocation(points[i], function(result) //从数组中取值,得到地理位置
if (result)
addrList.push(result.address);
displayAddress();

)

catch(e)
参考技术A 用带经纬度坐标的地图直接搜索,可以输入地名或坐标其中之一都能显示具体地理位置。

以上是关于android 怎么批量调用百度地图的地理编码功能的主要内容,如果未能解决你的问题,请参考以下文章

百度地图API调用

Android百度地图开发怎么网络获取商家信息

android开发 百度地图怎么获取线的经纬度

调用百度地图API怎么获取坐标点的地理位置

百度地图集成_POi搜索和正反地理编码

百度地图怎么获取城市的编码cityCode