001
package
com.lbsproject;
002
003
import
java.util.ArrayList;
004
005
import
android.content.Context;
006
import
android.graphics.Canvas;
007
import
android.graphics.Color;
008
import
android.graphics.Paint;
009
import
android.graphics.Point;
010
import
android.graphics.drawable.Drawable;
011
import
android.location.Criteria;
012
import
android.location.Location;
013
import
android.location.LocationManager;
014
import
android.os.Bundle;
015
import
android.util.Log;
016
import
android.view.Menu;
017
import
android.view.MenuItem;
018
import
android.view.MotionEvent;
019
import
android.view.View;
020
import
android.widget.Button;
021
import
android.widget.EditText;
022
import
android.widget.Toast;
023
024
import
com.baidu.mapapi.BMapManager;
025
import
com.baidu.mapapi.GeoPoint;
026
import
com.baidu.mapapi.LocationListener;
027
import
com.baidu.mapapi.MKAddrInfo;
028
import
com.baidu.mapapi.MKDrivingRouteResult;
029
import
com.baidu.mapapi.MKPoiResult;
030
import
com.baidu.mapapi.MKSearch;
031
import
com.baidu.mapapi.MKSearchListener;
032
import
com.baidu.mapapi.MKTransitRouteResult;
033
import
com.baidu.mapapi.MKWalkingRouteResult;
034
import
com.baidu.mapapi.MapActivity;
035
import
com.baidu.mapapi.MapController;
036
import
com.baidu.mapapi.MapView;
037
import
com.baidu.mapapi.MyLocationOverlay;
038
import
com.baidu.mapapi.Overlay;
039
import
com.baidu.mapapi.PoiOverlay;
040
import
com.baidu.mapapi.Projection;
041
import
com.lbsproject.LBSProjectActivity.GetOverlay;
042
043
public
class
LBSProjectActivity
extends
MapActivity {
044
protected
static
final
String TAG =
null
;
045
private
BMapManager mapManager;
046
private
MapView mapView;
047
private
MapController mapController;
048
private
MKSearch mSearch =
null
;
049
private
GeoPoint geoPoint =
new
GeoPoint(
122084095
,
37422006
);;
050
LocationListener mLocationListener =
null
;
051
MyLocationOverlay mLocationOverlay =
null
;
052
private
EditText editCity;
053
private
EditText editGeoCodeKey;
054
private
EditText areaText;
055
private
GetOverlay getOverlay;
056
057
@Override
058
public
void
onCreate(Bundle savedInstanceState) {
059
super
.onCreate(savedInstanceState);
060
setContentView(R.layout.main);
061
062
getInitLoc();
063
mapManager =
new
BMapManager(getApplication());
064
065
066
mapManager.init(
"2150650BE0DCF874994B845CEC7B60A0518E6AFE"
,
null
);
067
super
.initMapActivity(mapManager);
068
mapView = (MapView) findViewById(R.id.mapView);
069
mapView.setBuiltInZoomControls(
true
);
070
mapView.setDrawOverlayWhenZooming(
true
);
071
072
073
mLocationOverlay =
new
MyLocationOverlay(
this
, mapView);
074
mapView.getOverlays().add(mLocationOverlay);
075
getOverlay =
new
GetOverlay();
076
mapView.getOverlays().add(getOverlay);
077
078
gotoLocate();
079
080
Button buttonGetPos = (Button) findViewById(R.id.buttonGetPos);
081
buttonGetPos.setOnClickListener(
new
View.OnClickListener() {
082
083
public
void
onClick(View v) {
084
getInitLoc();
085
gotoLocate();
086
}
087
});
088
089
editCity = (EditText) findViewById(R.id.editTextCity);
090
editGeoCodeKey = (EditText) findViewById(R.id.editTextAera);
091
Button buttonSearchCity = (Button) findViewById(R.id.buttonSearchCity);
092
buttonSearchCity.setOnClickListener(
new
View.OnClickListener() {
093
094
@Override
095
public
void
onClick(View v) {
096
097
mSearch.geocode(editGeoCodeKey.getText().toString(), editCity
098
.getText().toString());
099
100
101
}
102
});
103
areaText = (EditText) findViewById(R.id.searchKeywords);
104
Button buttonSearchArea = (Button) findViewById(R.id.buttonSearchArea);
105
buttonSearchArea.setOnClickListener(
new
View.OnClickListener() {
106
107
@Override
108
public
void
onClick(View v) {
109
110
111
mSearch.poiSearchNearBy(areaText.getText().toString(),
112
geoPoint,
5000
);
113
114
}
115
});
116
117
118
mLocationListener =
new
LocationListener() {
119
public
void
onLocationChanged(Location location) {
120
if
(location !=
null
) {
121
Log.i(TAG,
""
+ location.getLatitude());
122
Log.i(TAG,
""
+ location.getLongitude());
123
geoPoint =
new
GeoPoint(
124
(
int
) (location.getLatitude() * 1e6),
125
(
int
) (location.getLongitude() * 1e6));
126
gotoLocate();
127
}
128
}
129
130
};
131
132
mSearch =
new
MKSearch();
133
mSearch.init(mapManager,
new
MKSearchListener() {
134
public
void
onGetAddrResult(MKAddrInfo res,
int
error) {
135
if
(error !=
0
) {
136
String str = String.format(
"错误号:%d"
, error);
137
Toast.makeText(LBSProjectActivity.
this
, str,
138
Toast.LENGTH_LONG).show();
139
return
;
140
}
141
142
mapView.getController().animateTo(res.geoPt);
143
144
145
146
147
148
geoPoint = res.geoPt;
149
150
151
152
Drawable marker = getResources().getDrawable(
153
R.drawable.iconmarka);
154
marker.setBounds(
0
,
0
, marker.getIntrinsicWidth(),
155
marker.getIntrinsicHeight());
156
mapView.getOverlays().clear();
157
mapView.getOverlays().add(getOverlay);
158
mapView.getOverlays().add(
159
new
OverItemT(marker, LBSProjectActivity.
this
,
160
res.geoPt, res.strAddr));
161
}
162
163
public
void
onGetPoiResult(MKPoiResult res,
int
type,
int
error) {
164
if
(res ==
null
) {
165
Log.d(
"onGetPoiResult"
,
"the onGetPoiResult res is "
+ type
166
+
"__"
+ error);
167
}
else
168
Log.d(
"onGetPoiResult"
,
169
"the onGetPoiResult res is "
170
+ res.getCurrentNumPois() +
"__"
171
+ res.getNumPages() +
"__"
172
+ res.getNumPois() +
"__"
+ type +
"__"
173
+ error);
174
175
176
if
(error !=
0
|| res ==
null
) {
177
Log.d(
"onGetPoiResult"
,
"the onGetPoiResult res 0 "
);
178
Toast.makeText(LBSProjectActivity.
this
,
"抱歉,未找到结果"
,
179
Toast.LENGTH_LONG).show();
180
return
;
181
}
182
183
ArrayList<MKPoiResult> poiResult = res.getMultiPoiResult();
184
if
(poiResult !=
null
)
185
Log.d(
"onGetPoiResult"
,
"the onGetPoiResult res 1__"
186
+ poiResult.size());
187
188
if
(res.getCurrentNumPois() >
0
) {
189
Log.d(
"onGetPoiResult"
,
"the onGetPoiResult res 2"
);
190
191
PoiOverlay poiOverlay =
new
PoiOverlay(
192
LBSProjectActivity.
this
, mapView);
193
poiOverlay.setData(res.getAllPoi());
194
mapView.getOverlays().clear();
195
mapView.getOverlays().add(getOverlay);
196
mapView.getOverlays().add(poiOverlay);
197
mapView.invalidate();
198
mapView.getController().animateTo(res.getPoi(
0
).pt);
199
}
else
if
(res.getCityListNum() >
0
) {
200
Log.d(
"onGetPoiResult"
,
"the onGetPoiResult res 3"
);
201
String strInfo =
"在"
;
202
for
(
int
i =
0
; i < res.getCityListNum(); i++) {
203
strInfo += res.getCityListInfo(i).city;
204
strInfo +=
","
;
205
}
206
strInfo +=
"找到结果"
;
207
Toast.makeText(LBSProjectActivity.
this
, strInfo,
208
Toast.LENGTH_LONG).show();
209
}
210
211
Log.d(
"onGetPoiResult"
,
"the onGetPoiResult res 4"
);
212
213
}
214
215
public
void
onGetDrivingRouteResult(MKDrivingRouteResult res,
216
int
error) {
217
}
218
219
public
void
onGetTransitRouteResult(MKTransitRouteResult res,
220
int
error) {
221
}
222
223
public
void
onGetWalkingRouteResult(MKWalkingRouteResult res,
224
int
error) {
225
}
226
227
});
228
229
}
230
231
private
void
gotoLocate() {
232
Drawable marker = getResources().getDrawable(R.drawable.iconmarka);
233
marker.setBounds(
0
,
0
, marker.getIntrinsicWidth(),
234
marker.getIntrinsicHeight());
235
mapView.getOverlays().clear();
236
mapView.getOverlays().add(getOverlay);
237
mapView.getOverlays().add(
238
new
OverItemT(marker, LBSProjectActivity.
this
, geoPoint,
""
));
239
240
mapView.getController().animateTo(geoPoint);
241
mapController = mapView.getController();
242
243
mapController.setCenter(geoPoint);
244
245
mapController.setZoom(
16
);
246
}
247
248
private
void
getInitLoc() {
249
try
{
250
251
LocationManager locationManager;
252
String context = Context.LOCATION_SERVICE;
253
locationManager = (LocationManager) getSystemService(context);
254
255
256
Criteria criteria =
new
Criteria();
257
criteria.setAccuracy(Criteria.ACCURACY_FINE);
258
criteria.setAltitudeRequired(
false
);
259
criteria.setBearingRequired(
false
);
260
criteria.setCostAllowed(
true
);
261
criteria.setPowerRequirement(Criteria.POWER_LOW);
262
String provider = locationManager.getBestProvider(criteria,
true
);
263
Location location = locationManager.getLastKnownLocation(provider);
264
geoPoint =
new
GeoPoint((
int
) (location.getLatitude() * 1e6),
265
(
int
) (location.getLongitude() * 1e6));
266
}
catch
(Exception e) {
267
268
}
269
}
270
271
@Override
272
protected
boolean
isRouteDisplayed() {
273
return
false
;
274
}
275
276
@Override
277
protected
void
onDestroy() {
278
if
(mapManager !=
null
) {
279
280
mapManager.destroy();
281
mapManager =
null
;
282
}
283
super
.onDestroy();
284
}
285
286
@Override
287
protected
void
onPause() {
288
if
(mapManager !=
null
) {
289
290
mapManager.getLocationManager().removeUpdates(mLocationListener);
291
mLocationOverlay.disableMyLocation();
292
mLocationOverlay.disableCompass();
293
mapManager.stop();
294
}
295
super
.onPause();
296
}
297
298
@Override
299
protected
void
onResume() {
300
if
(mapManager !=
null
) {
301
302
303
mapManager.getLocationManager().requestLocationUpdates(
304
mLocationListener);
305
mLocationOverlay.enableMyLocation();
306
mLocationOverlay.enableCompass();
307
mapManager.start();
308
}
309
super
.onResume();
310
}
311
312
/**
313
* * 实现MKSearchListener接口,用于实现异步搜索服务 * @author liufeng
314
*/
315
public
class
MySearchListener
implements
MKSearchListener {
316
317
public
void
onGetAddrResult(MKAddrInfo result,
int
iError) {
318
}
319
320
public
void
onGetDrivingRouteResult(MKDrivingRouteResult result,
321
int
iError) {
322
}
323
324
/**
325
* * POI搜索结果(范围检索、城市POI检索、周边检索) * * @param result 搜索结果 * @param type
326
* 返回结果类型(11,12,21:poi列表 7:城市列表) * @param iError 错误号(0表示正确返回)
327
*/
328
@Override
329
public
void
onGetPoiResult(MKPoiResult result,
int
type,
int
iError) {
330
if
(result ==
null
) {
331
return
;
332
}
333
334
PoiOverlay poioverlay =
new
PoiOverlay(LBSProjectActivity.
this
,
335
mapView);
336
337
poioverlay.setData(result.getAllPoi());
338
339
mapView.getOverlays().add(poioverlay);
340
}
341
342
343
public
void
onGetTransitRouteResult(MKTransitRouteResult result,
344
int
iError) {
345
}
346
347
348
public
void
onGetWalkingRouteResult(MKWalkingRouteResult result,
349
int
iError) {
350
}
351
}
352
353
class
GetOverlay
extends
Overlay {
354
GeoPoint geo;
355
356
@Override
357
public
void
draw(Canvas canvas, MapView gmapView,
boolean
arg2) {
358
super
.draw(canvas, mapView, arg2);
359
if
(geo ==
null
) {
360
return
;
361
}
362
Log.i(
"11111111111111111111"
, arg2 +
"-------draw--"
);
363
}
364
365
@Override
366
public
boolean
onTap(GeoPoint geo, MapView arg1) {
367
geoPoint = geo;
368
Drawable marker = getResources().getDrawable(R.drawable.iconmarka);
369
marker.setBounds(
0
,
0
, marker.getIntrinsicWidth(),
370
marker.getIntrinsicHeight());
371
mapView.getOverlays().clear();
372
mapView.getOverlays().add(getOverlay);
373
mapView.getOverlays()
374
.add(
new
OverItemT(marker, LBSProjectActivity.
this
,
375
geoPoint,
""
));
376
Log.i(
"11111111111111111111"
, geo.getLongitudeE6() / 1E6
377
+
"----------"
+ geo.getLatitudeE6() / 1E6);
378
return
super
.onTap(geo, arg1);
379
}
380
381
}
382
383
private
static
final
int
TOOLBAR0 =
0
;
384
private
static
final
int
TOOLBAR1 =
1
;
385
private
static
final
int
TOOLBAR2 =
2
;
386
private
static
final
int
TOOLBAR3 =
3
;
387
388
public
boolean
onCreateOptionsMenu(Menu menu) {
389
menu.add(
0
, TOOLBAR0,
1
,
"KTV"
).setIcon(
390
android.R.drawable.ic_btn_speak_now);
391
menu.add(
0
, TOOLBAR1,
2
,
"学校"
).setIcon(
392
android.R.drawable.ic_menu_myplaces);
393
menu.add(
0
, TOOLBAR2,
3
,
"餐厅"
).setIcon(
394
android.R.drawable.ic_menu_my_calendar);
395
menu.add(
0
, TOOLBAR3,
4
,
"公园"
).setIcon(
396
android.R.drawable.ic_menu_gallery);
397
return
super
.onCreateOptionsMenu(menu);
398
}
399
400
@Override
401
public
boolean
onOptionsItemSelected(MenuItem item) {
402
switch
(item.getItemId()) {
403
case
0
:
404
mSearch.poiSearchNearBy(
"KTV"
, geoPoint,
5000
);
405
break
;
406
case
1
:
407
mSearch.poiSearchNearBy(
"学校"
, geoPoint,
5000
);
408
break
;
409
case
2
:
410
mSearch.poiSearchNearBy(
"餐厅"
, geoPoint,
5000
);
411
break
;
412
case
3
:
413
mSearch.poiSearchNearBy(
"公园"
, geoPoint,
5000
);
414
break
;
415
}
416
417
return
super
.onOptionsItemSelected(item);
418
}
419
420
}