private MapView mapView; private AMap aMap; private EditText mCityET; private EditText mSeacherET; private Button mSeacherBtn; private RouteSearch routeSearch; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //定义了一个地图view mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState);// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。 //初始化地图控制器对象 if (aMap == null) { aMap = mapView.getMap(); } LanDian(); initRun() ; } private void LanDian() { MyLocationStyle myLocationStyle; myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。 myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style //aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。 aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE); myLocationStyle.showMyLocation(true); } private void initRun() { mCityET = (EditText) findViewById(R.id.mCityET); mCityET.setOnClickListener(this); mSeacherET = (EditText) findViewById(R.id.mSeacherET); mSeacherET.setOnClickListener(this); mSeacherBtn = (Button) findViewById(R.id.mSeacherBtn); mSeacherBtn.setOnClickListener(this); AMap.OnMarkerClickListener onMarkerClickListener = new AMap.OnMarkerClickListener() { private RouteSearch routeSearch; @Override public boolean onMarkerClick(Marker marker) { Toast.makeText(MainActivity.this, marker.getTitle() + "--" + marker.getPosition().latitude + "," + marker.getPosition().longitude, Toast.LENGTH_SHORT).show(); routeSearch = new RouteSearch(MainActivity.this); routeSearch.setRouteSearchListener(new RouteSearch.OnRouteSearchListener() { @Override public void onBusRouteSearched(BusRouteResult busRouteResult, int i) { } @Override public void onDriveRouteSearched(DriveRouteResult result, int errorCode) { aMap.clear();// 清理地图上的所有覆盖物 if (errorCode == AMapException.CODE_AMAP_SUCCESS) { if (result != null && result.getPaths() != null) { if (result.getPaths().size() > 0) { final DrivePath drivePath = result.getPaths() .get(0); DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay( MainActivity.this, aMap, drivePath, result.getStartPos(), result.getTargetPos(), null); drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示 drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true drivingRouteOverlay.removeFromMap(); drivingRouteOverlay.addToMap(); drivingRouteOverlay.zoomToSpan(); } else if (result != null && result.getPaths() == null) { ToastUtil.show(MainActivity.this, R.string.no_result); } } else { ToastUtil.show(MainActivity.this, R.string.no_result); } } else { ToastUtil.showerror(MainActivity.this, errorCode); } } @Override public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) { } @Override public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) { } }); Location myLocation = aMap.getMyLocation(); double latitude = myLocation.getLatitude(); double longitude = myLocation.getLongitude(); LatLng position = marker.getPosition(); double latitude1 = position.latitude; double longitude1 = position.longitude; LatLonPoint point = new LatLonPoint(latitude, longitude); LatLonPoint point1 = new LatLonPoint(latitude1, longitude1); RouteSearch.FromAndTo fat = new RouteSearch.FromAndTo(point, point1); RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fat, RouteSearch.DRIVING_MULTI_STRATEGY_FASTEST_SHORTEST_AVOID_CONGESTION, null, null, ""); routeSearch.calculateDriveRouteAsyn(query); return false; } }; aMap.setOnMarkerClickListener(onMarkerClickListener); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图 mapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图 mapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制 mapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态 mapView.onSaveInstanceState(outState); } @Override public void onClick(View view) { switch (view .getId()) { case R.id.mSeacherBtn: submit(); break; } } private void submit() { // validate String mCityETString = mCityET.getText().toString().trim(); if (TextUtils.isEmpty(mCityETString)) { Toast.makeText(this, "mCityETString不能为空", Toast.LENGTH_SHORT).show(); return; } String mSeacherETString = mSeacherET.getText().toString().trim(); if (TextUtils.isEmpty(mSeacherETString)) { Toast.makeText(this, "mSeacherETString不能为空", Toast.LENGTH_SHORT).show(); return; } // TODO validate success, do something PoiSearch.Query query = new PoiSearch.Query(mSeacherETString,"",mCityETString); query.setPageSize(10); query.setPageNum(1); PoiSearch search = new PoiSearch(this,query); search.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() { @Override public void onPoiSearched(PoiResult poiResult, int i) { ArrayList<PoiItem> pois = poiResult.getPois(); for (PoiItem item:pois){ Log.e("TAG",item.getTitle()+"\n"+item.getCityName()+"\n"+item.getAdName()+"\n"+item.getSnippet()); LatLonPoint latLonPoint = item.getLatLonPoint(); LatLng latLng = new LatLng(latLonPoint.getLatitude(),latLonPoint.getLongitude()); final Marker marker = aMap.addMarker(new MarkerOptions().position(latLng).title(item.getTitle()).snippet(item.getSnippet())); } } @Override public void onPoiItemSearched(PoiItem poiItem, int i) { } }); search.searchPOIAsyn(); }
//xml文件 <LinearLayout android:weightSum="10" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="50dp"> <EditText android:id="@+id/mCityET" android:layout_width="0dp" android:layout_weight="2" android:layout_height="match_parent" /> <EditText android:id="@+id/mSeacherET" android:layout_width="0dp" android:layout_weight="6" android:layout_height="match_parent" /> <Button android:text="搜索" android:id="@+id/mSeacherBtn" android:layout_width="0dp" android:layout_weight="2" android:layout_height="match_parent" /> </LinearLayout> <com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"/>