package com.wise.wawc;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import cn.sharesdk.framework.ShareSDK;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.ItemizedOverlay;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Overlay;
import com.baidu.mapapi.map.OverlayItem;
import com.baidu.mapapi.search.MKAddrInfo;
import com.baidu.mapapi.search.MKBusLineResult;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPoiInfo;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKSearchListener;
import com.baidu.mapapi.search.MKShareUrlResult;
import com.baidu.mapapi.search.MKSuggestionResult;
import com.baidu.mapapi.search.MKTransitRouteResult;
import com.baidu.mapapi.search.MKWalkingRouteResult;
import com.baidu.mapapi.utils.DistanceUtil;
import com.baidu.platform.comapi.basestruct.GeoPoint;
import com.wise.data.AdressData;
import com.wise.data.CarData;
import com.wise.extend.AdressAdapter;
import com.wise.extend.AdressAdapter.OnCollectListener;
import com.wise.pubclas.Constant;
import com.wise.pubclas.GetSystem;
import com.wise.pubclas.NetThread;
import com.wise.pubclas.Variable;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
* 搜索结果
*
* @author honesty
*/
public class SearchMapActivity extends Activity {
private static final String TAG = "SearchMapActivity";
private final int getIsCollect = 1;
private final int get4s = 2;
MapView mMapView = null;
MapController mMapController = null;
List<Overlay> overlays;
MKSearch mkSearch;
List<AdressData> adressDatas = new ArrayList<AdressData>();
ListView lv_activity_search_map;
AdressAdapter adressAdapter;
OverlayCar overlayCar;
GeoPoint point;// 当前位置
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WawcApplication app = (WawcApplication)this.getApplication();
if (app.mBMapManager == null) {
app.mBMapManager = new BMapManager(getApplicationContext());
app.mBMapManager.init(WawcApplication.strKey,null);
}
setContentView(R.layout.activity_search_map);
ShareSDK.initSDK(this);
lv_activity_search_map = (ListView) findViewById(R.id.lv_activity_search_map);
lv_activity_search_map.setOnItemClickListener(onItemClickListener);
adressAdapter = new AdressAdapter(SearchMapActivity.this, adressDatas,
SearchMapActivity.this);
lv_activity_search_map.setAdapter(adressAdapter);
adressAdapter.setOnCollectListener(new OnCollectListener() {
@Override
public void OnCollect(int index) {
adressDatas.get(index).setIs_collect(true);
adressAdapter.notifyDataSetChanged();
}
@Override
public void OnShare(int index) {
AdressData adressData = adressDatas.get(index);
String url = "http://api.map.baidu.com/geocoder?location="
+ adressData.getLat() + "," + adressData.getLon()
+ "&coord_type=bd09ll&output=html";
StringBuffer sb = new StringBuffer();
sb.append("【地点】");
sb.append(adressData.getName());
sb.append("," + adressData.getAdress());
sb.append("," + adressData.getPhone());
sb.append("," + url);
GetSystem.share(SearchMapActivity.this, sb.toString(), "",
(float) adressData.getLat(),
(float) adressData.getLon(),"地点",url);
}
});
ImageView iv_activity_search_map_back = (ImageView) findViewById(R.id.iv_activity_search_map_back);
iv_activity_search_map_back.setOnClickListener(onClickListener);
TextView tv_activity_search_map_title = (TextView) findViewById(R.id.tv_activity_search_map_title);
mMapView = (MapView) findViewById(R.id.mv_search_map);
mMapView.setBuiltInZoomControls(true);
mMapController = mMapView.getController();
point = new GeoPoint((int) (Variable.Lat * 1E6),(int) (Variable.Lon * 1E6));
mMapController.setCenter(point);// 设置地图中心点
mMapController.setZoom(12);// 设置地图zoom级别
overlays = mMapView.getOverlays();
Intent intent = getIntent();
String keyWord = intent.getStringExtra("keyWord");
tv_activity_search_map_title.setText(keyWord);
if (keyWord.equals(getResources().getString(R.string.four_s))) {
// 4S店数据去自己服务器读取
if (Variable.carDatas != null || Variable.carDatas.size() > 0) {
for (CarData carData : Variable.carDatas) {
if (carData.isCheck()) {
String car_brand = carData.getCar_brand();
SharedPreferences preferences = getSharedPreferences(
Constant.sharedPreferencesName,
Context.MODE_PRIVATE);
String City = preferences.getString(
Constant.LocationCity, "深圳");
try {
String url = Constant.BaseUrl + "base/dealer?city="
+ URLEncoder.encode(City, "UTF-8")
+ "&brand=" + URLEncoder.encode(car_brand, "UTF-8")
+ "&lon=" + Variable.Lon + "&lat="
+ Variable.Lat + "&cust_id="
+ Variable.cust_id;
new Thread(new NetThread.GetDataThread(handler,
url, get4s)).start();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
break;
}
}
}
} else {
// 搜索关键字
Log.d(TAG, keyWord + "Variable.Lat = " + Variable.Lat + " , Variable.Lon = " + Variable.Lon);
mkSearch = new MKSearch();
mkSearch.init(app.mBMapManager, mkSearchListener);
mkSearch.poiSearchNearBy(keyWord, point, 50000);
}
// 显示自己位置
Drawable mark = getResources().getDrawable(R.drawable.body_icon_outset);
OverlayMe overlayMe = new OverlayMe(mark, mMapView);
overlays.add(overlayMe);
OverlayItem item = new OverlayItem(point, "item2", "item2");
item.setAnchor(OverlayItem.ALING_CENTER);
overlayMe.addItem(item);
Drawable mark1 = getResources().getDrawable(R.drawable.body_icon_location2);
overlayCar = new OverlayCar(mark1, mMapView);
overlays.add(overlayCar);
mMapView.refresh();
}
OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.iv_activity_search_map_back:
finish();
break;
default:
break;
}
}
};
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case getIsCollect:
System.out.println(msg.obj.toString());
jsonCollect(msg.obj.toString());
adressAdapter.notifyDataSetChanged();
break;
case get4s:
jsonDealAdress(msg.obj.toString());
adressAdapter.notifyDataSetChanged();
break;
}
}
};
private void jsonDealAdress(String result) {
try {
JSONArray jsonArray = new JSONArray(result);
for (int i = 0; i < jsonArray.length(); i++) {//TODO
JSONObject jsonObject = jsonArray.getJSONObject(i);
AdressData adressData = new AdressData();
adressData.setAdress(jsonObject.getString("address"));
adressData.setName(jsonObject.getString("name"));
adressData.setPhone(jsonObject.getString("tel"));
adressData.setLat(jsonObject.getDouble("lat"));
adressData.setLon(jsonObject.getDouble("lon"));
adressData.setDistance(jsonObject.getInt("distance"));
if (jsonObject.getString("is_collect").equals("1")) {
// 收藏
adressData.setIs_collect(true);
} else {
// 未收藏
adressData.setIs_collect(false);
}
adressDatas.add(adressData);
GeoPoint point = new GeoPoint((int) (adressData.getLat() * 1E6),(int) (adressData.getLon() * 1E6));
OverlayItem item = new OverlayItem(point, "item2", "item2");
overlayCar.addItem(item);
}
mMapView.refresh();
} catch (JSONException e) {
e.printStackTrace();
}
}
OnItemClickListener onItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
GeoPoint point = new GeoPoint(
(int) (adressDatas.get(arg2).getLat() * 1e6),
(int) (adressDatas.get(arg2).getLon() * 1e6));
mMapController.setCenter(point);// 设置地图中心点
}
};
/**
* 解析返回的数据
*
* @param result
*/
private void jsonCollect(String result) {
try {
JSONArray jsonArray = new JSONArray(result);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
for (int j = 0; j < adressDatas.size(); j++) {
if (adressDatas.get(j).getName().equals(name)) {
adressDatas.get(j).setIs_collect(true);
break;
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
MKSearchListener mkSearchListener = new MKSearchListener() {
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
Log.d(TAG, "onGetWalkingRouteResult");
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
Log.d(TAG, "onGetTransitRouteResult");
}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
Log.d(TAG, "onGetSuggestionResult");
}
@Override
public void onGetShareUrlResult(MKShareUrlResult arg0, int arg1,int arg2) {
Log.d(TAG, "onGetShareUrlResult");
}
@Override
public void onGetPoiResult(MKPoiResult res, int type, int error) {
Log.d(TAG, "onGetPoiResult: error = " + error + " , " + "type = " + type);
if (error == MKEvent.ERROR_RESULT_NOT_FOUND) {
Toast.makeText(SearchMapActivity.this,
R.string.search_result_not_found, Toast.LENGTH_SHORT)
.show();
return;
} else if (error != 0 || res == null) {
Toast.makeText(SearchMapActivity.this, R.string.search_error,
Toast.LENGTH_SHORT).show();
return;
}
String str = "";// 用户判断是否已经收藏
for (MKPoiInfo mkPoiInfo : res.getAllPoi()) {
int distance = (int) DistanceUtil.getDistance(point,mkPoiInfo.pt);
AdressData adressData = new AdressData();
adressData.setName(mkPoiInfo.name);
adressData.setAdress(mkPoiInfo.address);
adressData.setPhone(mkPoiInfo.phoneNum);
adressData.setLat(mkPoiInfo.pt.getLatitudeE6() / 1e6);
adressData.setLon(mkPoiInfo.pt.getLongitudeE6() / 1e6);
adressData.setDistance(distance);
adressDatas.add(adressData);
str = str + mkPoiInfo.name + ",";
}
Log.d(TAG, "str = " + str);
Collections.sort(adressDatas, new Comparator());// 排序
adressAdapter.notifyDataSetChanged();
for (int i = 0; i < adressDatas.size(); i++) {
GeoPoint point1 = new GeoPoint((int) (adressDatas.get(i)
.getLat() * 1E6),
(int) (adressDatas.get(i).getLon() * 1E6));
OverlayItem item = new OverlayItem(point1, "item2", "item2");
overlayCar.addItem(item);
}
mMapView.refresh();
// 判断是否收藏
String url;
try {
url = Constant.BaseUrl + "favorite/is_collect?auth_code="
+ Variable.auth_code + "&names="
+ URLEncoder.encode(str, "UTF-8") + "&cust_id="
+ Variable.cust_id;
new Thread(new NetThread.GetDataThread(handler, url,
getIsCollect)).start();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
@Override
public void onGetPoiDetailSearchResult(int arg0, int arg1) {
Log.d(TAG, "onGetPoiDetailSearchResult");
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
Log.d(TAG, "onGetDrivingRouteResult");
}
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
Log.d(TAG, "onGetBusDetailResult");
}
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
Log.d(TAG, "onGetAddrResult");
}
};
class OverlayCar extends ItemizedOverlay<OverlayItem> {
public OverlayCar(Drawable arg0, MapView arg1) {
super(arg0, arg1);
}
@Override
protected boolean onTap(int arg0) {
System.out.println("item onTap:" + arg0);
if (arg0 != 0) {
lv_activity_search_map.setSelection(arg0 - 1);
}
return super.onTap(arg0);
}
}
class OverlayMe extends ItemizedOverlay<OverlayItem>{
public OverlayMe(Drawable arg0, MapView arg1) {
super(arg0, arg1);
}
}
class Comparator implements java.util.Comparator<AdressData> {
@Override
public int compare(AdressData lhs, AdressData rhs) {
int m1 = lhs.getDistance();
int m2 = rhs.getDistance();
int result = 0;
if (m1 > m2) {
result = 1;
}
if (m1 < m2) {
result = -1;
}
return result;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.destroy();
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
}