package xiaohang.zhimeng;
import java.util.List;
import org.json.JSONObject;
import xiaohang.zhimeng.tools.MapUtility;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
public class GeocodingDemoActivity extends MapActivity {
Geocoder geocoder = null;//经纬度
MapView mapView = null;//地图
ProgressDialog progDialog = null;
List<Address> addressList = null;//查询的集合
//位置是否显示
@Override
protected boolean isLocationDisplayed() {
return false;
}
//路线是否显示
@Override
protected boolean isRouteDisplayed() {
return false;
}
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.geoMap);
mapView.setBuiltInZoomControls(true);//缩放
// 北京经纬度
// 经度:116.3946533203125
// 纬度:39.87601941962116
int lat = (int) (39.87601941962116 * 1E6);
int lng = (int) (116.3946533203125 * 1E6);
GeoPoint pt = new GeoPoint(lat, lng);//点
mapView.getController().setZoom(10);//缩放等级
mapView.getController().setCenter(pt);//北京经纬度居中
Button geoBtn = (Button) findViewById(R.id.geocodeBtn);
geoBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EditText loc = (EditText) findViewById(R.id.location);
String locationName = loc.getText().toString();
progDialog = ProgressDialog.show(GeocodingDemoActivity.this,
"Processing.....", "Finding Location", true, false);
findLocation(locationName);//开启线程
}
});
}
// 查找地点的线程
private void findLocation(final String locationName) {
Thread thrd = new Thread() {
@Override
public void run() {
System.out.println("线程Name是:"
+ Thread.currentThread().getName());
try {
// do backgrond work
JSONObject jo = MapUtility.getLocationInfo(locationName);//获得JSON
GeoPoint gp = MapUtility.getGeoPoint(jo);//查询结果的第一个点
Message message = uiCallback.obtainMessage();
message.obj = gp;
message.sendToTarget();
} catch (Exception e) {
e.printStackTrace();
}
}
};
thrd.start();
}
// ui thread callback handler
private Handler uiCallback = new Handler() {
public void handleMessage(android.os.Message msg) {
System.out.println("线程Name是:" + Thread.currentThread().getName());
progDialog.dismiss();//关闭进度条
GeoPoint pt = (GeoPoint) msg.obj;
if (pt != null) {
mapView.getController().setZoom(15);
mapView.getController().setCenter(pt);
} else {
Dialog foundNothingDlg = new AlertDialog.Builder(
GeocodingDemoActivity.this).setIcon(0)
.setTitle("Failed to Find Location")
.setPositiveButton("OK", null)
.setMessage("Location Not Found").create();
foundNothingDlg.show();
}
};
};
}