丹东淘宝做网站上海旅游必去景点推荐
web/
2025/10/5 4:16:34/
文章来源:
丹东淘宝做网站,上海旅游必去景点推荐,团建活动策划,网络优化网站建设接触了百度地图开发平台半个月了#xff0c;这2天试着模仿了微信给好友发送位置功能#xff0c;对百度地图的操作能力又上了一个台阶我在实现这个功能的时候#xff0c;遇到一些困难#xff0c;可能也是别人将会遇到的困难#xff0c;特在此列出1、在微信发送功能中#…接触了百度地图开发平台半个月了这2天试着模仿了微信给好友发送位置功能对百度地图的操作能力又上了一个台阶我在实现这个功能的时候遇到一些困难可能也是别人将会遇到的困难特在此列出1、在微信发送功能中不管用户如何拖拽地图总有个覆盖物固定了MapView中央怎么实现其实这很容易实现只要MapView的布局文件中将一个ImageView覆盖在MapView的中央就能够实现不管用户如何拖拽地图覆盖物(ImageView)总固定总MapView中央2、如何获取MapView中央的地理坐标也即是屏幕覆盖物处的坐标要获取MapView中央的地理坐标首先先获取覆盖物在屏幕上的物理坐标这里得区别一下地理坐标(经纬度)和物理坐标(xy轴)可以通过来获取物理坐标这个物理坐标是不变的而物理坐标对应的地理坐标却是随着用户拖拽地图而改变所以当我们需要地理坐标时可以通过currentLatLng mBaiduMap.getProjection().fromScreenLocation(mCenterPoint);获取。3、如何获取该地理坐标周围的所有poi信息(也就是周围建筑物的信息)而不只是某个类型的兴趣点为了实现这个功能真是费了我好大劲因为我之前一直以为用周边搜索实现的有人提示我可以通过循环轴线搜索实现不同关键字搜索但这样子确实很难实现跟微信那样的效果。通过查看API发现可以通过反地理编码解决这个问题至于什么事反地理编码可以到百度地图官网了解通过调用它可以返回一个该地理坐标附近建筑信息的一个列表4、当用户拖拽地图如何让列表更新到目前中心地理位置的周边信息这个困难其实也不难实现只是重写mBaiduMap.setOnMapTouchListener(touchListener);触摸事件在触摸监听器的回调函数中将MapView中央的物理坐标转换成对应的地理坐标再通过反地理编码获取周边信息道理同问题35、当点击listview某一项时如何将项地理位置显示在MapView也就是屏幕中央很简单通过listview的适配器获取item的位置信息包括经纬度然后用动画跳转到屏幕中央位置即可。我认为上面5个问题是实现这个功能的关键所在下面是效果图上面是一个MapVIew覆盖物固定在其中央地图左下角的白色正方形是回到定位点的按钮因为没找到好看的图片就留着空白了下面是一个listView显示地图指示地点周围的一些位置信息贴一下实现该功能的核心代码Activity类package com.vr.souhuodong.UI.Sou;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Intent;import android.graphics.Point;import android.net.Uri;import android.os.Bundle;import android.view.MotionEvent;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ImageView;import android.widget.ListView;import android.widget.ProgressBar;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BaiduMap.OnMapTouchListener;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MarkerOptions;import com.baidu.mapapi.map.MyLocationConfiguration;import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.map.OverlayOptions;import com.baidu.mapapi.model.LatLng;import com.baidu.mapapi.search.core.PoiInfo;import com.baidu.mapapi.search.core.SearchResult;import com.baidu.mapapi.search.geocode.GeoCodeResult;import com.baidu.mapapi.search.geocode.GeoCoder;import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;import com.vr.souhuodong.R;import com.vr.souhuodong.UI.Adapter.PlaceListAdapter;public class ChoosePlaceActivity extends Activity {MapView mMapView;BaiduMap mBaiduMap;ProgressBar mLoadBar;ImageView mSelectImg;// 定位LocationClient mLocationClient null;MyBDLocationListner mListner null;BitmapDescriptor mCurrentMarker null;// 当前经纬度double mLantitude;double mLongtitude;LatLng mLoactionLatLng;// 设置第一次定位标志boolean isFirstLoc true;// MapView中央对于的屏幕坐标Point mCenterPoint null;// 地理编码GeoCoder mGeoCoder null;// 位置列表ListView mListView;PlaceListAdapter mAdapter;List mInfoList;PoiInfo mCurentInfo;Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_chooseplace);initView();}/*** 初始化界面*/private void initView() {// TODO Auto-generated method stub// 初始化地图mMapView (MapView) findViewById(R.id.chooseplace_bmapView);mMapView.showZoomControls(false);mBaiduMap mMapView.getMap();MapStatusUpdate msu MapStatusUpdateFactory.zoomTo(17.0f);mBaiduMap.setMapStatus(msu);mBaiduMap.setOnMapTouchListener(touchListener);// 初始化POI信息列表mInfoList new ArrayList();// 初始化当前MapView中心屏幕坐标初始化当前地理坐标mCenterPoint mBaiduMap.getMapStatus().targetScreen;mLoactionLatLng mBaiduMap.getMapStatus().target;// 定位mBaiduMap.setMyLocationEnabled(true);mLocationClient new LocationClient(this);mListner new MyBDLocationListner();mLocationClient.registerLocationListener(mListner);LocationClientOption option new LocationClientOption();option.setOpenGps(true);// 打开gpsoption.setCoorType(bd09ll); // 设置坐标类型option.setScanSpan(1000);mLocationClient.setLocOption(option);mLocationClient.start();// 地理编码mGeoCoder GeoCoder.newInstance();mGeoCoder.setOnGetGeoCodeResultListener(GeoListener);// 周边位置列表mListView (ListView) findViewById(R.id.place_list);mLoadBar (ProgressBar) findViewById(R.id.place_progressBar);mListView.setOnItemClickListener(itemClickListener);mAdapter new PlaceListAdapter(getLayoutInflater(), mInfoList);mListView.setAdapter(mAdapter);mSelectImg new ImageView(this);}public void turnBack(View view) {// 实现动画跳转MapStatusUpdate u MapStatusUpdateFactory.newLatLng(mLoactionLatLng);mBaiduMap.animateMapStatus(u);mBaiduMap.clear();// 发起反地理编码检索mGeoCoder.reverseGeoCode((new ReverseGeoCodeOption()).location(mLoactionLatLng));}Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();mLocationClient.stop();mGeoCoder.destroy();}// 定位监听器private class MyBDLocationListner implements BDLocationListener {Overridepublic void onReceiveLocation(BDLocation location) {// TODO Auto-generated method stub// map view 销毁后不在处理新接收的位置if (location null || mMapView null)return;MyLocationData data new MyLocationData.Builder()//// .direction(mCurrentX)//.accuracy(location.getRadius())//.latitude(location.getLatitude())//.longitude(location.getLongitude())//.build();mBaiduMap.setMyLocationData(data);// 设置自定义图标MyLocationConfiguration config new MyLocationConfiguration(LocationMode.NORMAL, true, null);mBaiduMap.setMyLocationConfigeration(config);mLantitude location.getLatitude();mLongtitude location.getLongitude();LatLng currentLatLng new LatLng(mLantitude, mLongtitude);mLoactionLatLng new LatLng(mLantitude, mLongtitude);// 是否第一次定位if (isFirstLoc) {isFirstLoc false;// 实现动画跳转MapStatusUpdate u MapStatusUpdateFactory.newLatLng(currentLatLng);mBaiduMap.animateMapStatus(u);mGeoCoder.reverseGeoCode((new ReverseGeoCodeOption()).location(currentLatLng));return;}}}// 地理编码监听器OnGetGeoCoderResultListener GeoListener new OnGetGeoCoderResultListener() {public void onGetGeoCodeResult(GeoCodeResult result) {if (result null || result.error ! SearchResult.ERRORNO.NO_ERROR) {// 没有检索到结果}// 获取地理编码结果}Overridepublic void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {if (result null || result.error ! SearchResult.ERRORNO.NO_ERROR) {// 没有找到检索结果}// 获取反向地理编码结果else {// 当前位置信息mCurentInfo new PoiInfo();mCurentInfo.address result.getAddress();mCurentInfo.location result.getLocation();mCurentInfo.name [位置];mInfoList.clear();mInfoList.add(mCurentInfo);// 将周边信息加入表if (result.getPoiList() ! null) {mInfoList.addAll(result.getPoiList());}// 通知适配数据已改变mAdapter.notifyDataSetChanged();mLoadBar.setVisibility(View.GONE);}}};// 地图触摸事件监听器OnMapTouchListener touchListener new OnMapTouchListener() {Overridepublic void onTouch(MotionEvent event) {// TODO Auto-generated method stubif (event.getAction() MotionEvent.ACTION_UP) {if (mCenterPoint null) {return;}// 获取当前MapView中心屏幕坐标对应的地理坐标LatLng currentLatLng;currentLatLng mBaiduMap.getProjection().fromScreenLocation(mCenterPoint);System.out.println(---- mCenterPoint.x);System.out.println(---- currentLatLng.latitude);// 发起反地理编码检索mGeoCoder.reverseGeoCode((new ReverseGeoCodeOption()).location(currentLatLng));mLoadBar.setVisibility(View.VISIBLE);}}};// listView选项点击事件监听器OnItemClickListener itemClickListener new OnItemClickListener() {Overridepublic void onItemClick(AdapterView parent, View view, int position,long id) {// TODO Auto-generated method stub// 通知是适配器第position个item被选择了mAdapter.setNotifyTip(position);BitmapDescriptor mSelectIco BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);mBaiduMap.clear();PoiInfo info (PoiInfo) mAdapter.getItem(position);LatLng la info.location;// 动画跳转MapStatusUpdate u MapStatusUpdateFactory.newLatLng(la);mBaiduMap.animateMapStatus(u);// 添加覆盖物OverlayOptions ooA new MarkerOptions().position(la).icon(mSelectIco).anchor(0.5f, 0.5f);mBaiduMap.addOverlay(ooA);// 选中项打勾mSelectImg.setBackgroundResource(R.drawable.greywhite);mSelectImg (ImageView) view.findViewById(R.id.place_select);mSelectImg.setBackgroundResource(R.drawable.ic_select);// Uri mUri Uri.parse(geo:39.940409,116.355257);// Intent mIntent new Intent(Intent.ACTION_VIEW,mUri);// startActivity(mIntent);}};}自定义的listView适配器package com.vr.souhuodong.UI.Adapter;import java.util.List;import android.R.integer;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.baidu.mapapi.search.core.PoiInfo;import com.vr.souhuodong.R;public class PlaceListAdapter extends BaseAdapter {List mList;LayoutInflater mInflater;int notifyTip ;private class MyViewHolder {TextView placeName;TextView placeAddree;ImageView placeSelected;}public PlaceListAdapter(LayoutInflater mInflater , List mList) {super();this.mList mList;this.mInflater mInflater;notifyTip -1 ;}/*** 设置第几个item被选择* param notifyTip*/public void setNotifyTip(int notifyTip) {this.notifyTip notifyTip;}Overridepublic int getCount() {// TODO Auto-generated method stubreturn mList.size();}Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn mList.get(position);}Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubMyViewHolder holder;if (convertView null) {System.out.println(----aa-);convertView mInflater.inflate(com.vr.souhuodong.R.layout.listitem_place, parent, false);holder new MyViewHolder();holder.placeName (TextView) convertView.findViewById(com.vr.souhuodong.R.id.place_name);holder.placeAddree (TextView) convertView.findViewById(com.vr.souhuodong.R.id.place_adress);holder.placeSelected (ImageView) convertView.findViewById(com.vr.souhuodong.R.id.place_select);holder.placeName.setText(mList.get(position).name);holder.placeAddree.setText(mList.get(position).address);holder.placeSelected.setBackgroundResource(R.drawable.greywhite);convertView.setTag(holder);} else {holder (MyViewHolder) convertView.getTag();}holder.placeName.setText(mList.get(position).name);holder.placeAddree.setText(mList.get(position).address);//根据重新加载的时候第position条item是否是当前所选择的选择加载不同的图片if(notifyTip position ){holder.placeSelected.setBackgroundResource(R.drawable.ic_select);}else {holder.placeSelected.setBackgroundResource(R.drawable.greywhite);}return convertView;}// class MyItemClickListener implements OnClickListener {//// ImageView mImg;// public MyItemClickListener(ImageView mImg) {// this.mImg mImg;// }// Override// public void onClick(View v) {// // TODO Auto-generated method stub// mImg.setBackgroundResource(R.drawable.ic_select);// }//// }}总结以上所述是小编给大家介绍的利用百度地图Android sdk高仿微信发送位置功能希望对大家有所帮助如果大家有任何疑问请给我留言小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87157.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!