定位(4)

1.Geocoding介绍

是google的所提供的一项服务,主要有一下两个方面的功能:

1)查询地址,传给geocoding一个地址,能查询出地址的经纬度

2)查询经纬度,传给geocoding一个经纬度,能查询出具体地址

 

如何使用:

1)创建一个GeoCoder对象;

2)调用该对象的getFromLocation()或是getFromLocationName()方法;

 

2.Android内置的Geocoder类

         方便的访问Geocoding服务

         在模拟器中无法使用。

 

3.Geocoder的替代

 

异步:不等待函数执行完毕没,立刻返回。

import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import android.app.Activity;
import android.location.Address;
import android.location.Geocoder;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button geocodingButton = null;
	private Button reverseGeocodingButton = null;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

//给geocodingButton绑定监听器
        geocodingButton = (Button)findViewById(R.id.getLocationButton);
        geocodingButton.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View arg0) {
				//执行一个异步任务
				new GeocodingTask().execute();
			}
        	
        });
//给reverseGeocodingButton绑定监听器
        reverseGeocodingButton = (Button)findViewById(R.id.getLocationNameButton);
        reverseGeocodingButton.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View arg0) {
				//执行异步任务
				new ReverseGeocodingTask().execute();
			}
        	
        });
    }
    
	//继承android内部异步任务类
    private class GeocodingTask extends AsyncTask<Integer,Integer,Integer>{

		@Override
		protected Integer doInBackground(Integer... arg0) {
			//创建Geocoder对象,执行相关查询,但是存在未知BUG,导致服务不可用
			Geocoder geocoder = new Geocoder(MainActivity.this);
			try {
				//根据给定的地址名称,查询符合该地址的经纬度,第一个参数即给定的地址名称,第二个参数表示返回的最大结果数
				List<Address> addresses = geocoder.getFromLocationName("SFO", 1);
				System.out.println(addresses.size());
			} catch (IOException e) {
				e.printStackTrace();
			}
			return null;
		}
    }
    
    private class ReverseGeocodingTask extends AsyncTask<Integer,Integer,Integer>{

		@Override
		protected Integer doInBackground(Integer... arg0) {
			Geocoder geocoder = new Geocoder(MainActivity.this);
			try {
				//根据给定的经纬度,查询符合条件的地址
				List<Address> addresses = geocoder.getFromLocation(40.711442,-73.961452, 1);
				//遍历结果
				for(Iterator<Address> it = addresses.iterator();it.hasNext();){
					Address address = it.next();
					System.out.println(address);
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			return null;
		}
    }
}

 


定位(4)_第1张图片
 

 点击上面两个按钮,打印出信息:



 

你可能感兴趣的:(定位)