如何获取百度自定义覆盖物物的经纬度

匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。百度地图(1)
在很多APP中都会用到百度地图,以实现各种功能,本片文章介绍在百度地图中添加自定义覆盖物并添加其点击事件
public class NearByFragment extends Fragment {
private MapView mapV
private BaiduMap M
private boolean isFirstLoc = true;
private HttpU
private BitmapDisplayConfig displayC
private BitmapU
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = initView(inflater, container);
Mmap.setOnMarkerClickListener(new OnMarkerClickListener(){
public boolean onMarkerClick(Marker marker) {
Bundle extraInfo = marker.getExtraInfo();
final Grogshop shop = (Grogshop) extraInfo.getSerializable("Grogshop");
View v2 = LayoutInflater.from(getActivity()).inflate(R.layout.window2, null);
TextView shop_name = (TextView) v2.findViewById(R.id.shop_name);
TextView tv_distance = (TextView) v2.findViewById(R.id.distance);
TextView price_range = (TextView) v2.findViewById(R.id.price_range);
TextView worktime_window = (TextView) v2.findViewById(R.id.worktime_window);
ImageView view_img = (ImageView) v2.findViewById(R.id.view_img);
shop_name.setText(shop.getShopName());
bmputils.display(view_img, shop.getShopPhoto(), displayConfig);
final float distance_float = FunctionUtils.getDistance(shop, getActivity());
tv_distance.setText(distance_float + "km");
price_range.setText(shop.getPriceRange());
worktime_window.setText(shop.getBusinessTime());
v2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(getActivity(), NearByDetail.class);
intent.putExtra("Grogshop", shop);
intent.putExtra("distance_int", distance_float);
startActivity(intent);
getActivity().overridePendingTransition(R.anim.next_in_anim, R.anim.next_out_anim);
Mmap.hideInfoWindow();
FunctionUtils.PopView(v2);
int infoWindowYOffset = -30;
final InfoWindow info = new InfoWindow(v2, marker.getPosition(), infoWindowYOffset);
Mmap.showInfoWindow(info);
return true;
Mmap.setOnMapClickListener(new OnMapClickListener() {
public void onMapClick(LatLng arg0) {
Mmap.hideInfoWindow();
public boolean onMapPoiClick(MapPoi arg0) {
return false;
private void getoverlay() {
final BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_green);
utils.send(HttpMethod.POST, String.format(Constants.StringJson_shop, SPUtils.getString(getActivity(), "city", "")), new RequestCallBack&String&() {
public void onFailure(HttpException exception, String msg) {
exception.printStackTrace();
Log.i("NearByFragment", msg);
public void onSuccess(ResponseInfo&String& info) {
if (info.statusCode == 200) {
String json = info.
Log.e("NearByFragment", json);
JSONObject obj = new JSONObject(json);
String code = obj.getString("code");
String Message = obj.getString("message");
if (code.equals("000000")) {
List&Grogshop& list = JsonUtils.JSON1Str(json);
if (adapter == null) {
if (getActivity() == null || getActivity().isDestroyed()) {
adapter = new ShopAdapter(getActivity());
adapter.addData(list);
shop_list.setAdapter(adapter);
adapter.addData(list);
shop_list.setAdapter(adapter);
for (int i = 0; i & list.size(); i++) {
Grogshop shop = list.get(i);
Bundle bundle = new Bundle();
double longitude = shop.getLongitude();
double dimensions = shop.getDimensions();
bundle.putSerializable("Grogshop", shop);
LatLng location = new LatLng(dimensions, longitude);
op = new MarkerOptions().extraInfo(bundle).position(location).icon(bitmap);
MarkerOptions().extraInfo(bundle).position(location).icon(bitmap2);
Mmap.addOverlay(op).setZIndex(i);
} else if (code.equals("000011")) {
if (getActivity() == null || getActivity().isDestroyed()) {
Toast.makeText(getActivity(), Message, 0).show();
} catch (JSONException e) {
e.printStackTrace();
private View initView(LayoutInflater inflater, ViewGroup container) {
View view = inflater.inflate(R.layout.fragment_nearby, container, false);
utils = new HttpUtils(5000);
bmputils = new BitmapUtils(getActivity(), Constants.cachepath);
displayConfig = new BitmapDisplayConfig();
displayConfig.setBitmapConfig(Config.ARGB_8888);
AlphaAnimation animation = new AlphaAnimation(0.1f, 1.0f);
animation.setDuration(500);
displayConfig.setAnimation(animation);
displayConfig.setLoadingDrawable(getActivity().getResources().getDrawable(R.drawable.loading_not));
displayConfig.setLoadFailedDrawable(getActivity().getResources().getDrawable(R.drawable.loading_not));
mapView = (MapView) view.findViewById(R.id.bmapView);
mapView.showZoomControls(false);
Mmap = mapView.getMap();
Mmap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().zoom(15).build()));
if (isFirstLoc) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
getoverlay();
isFirstLoc = false;
public void onResume() {
super.onResume();
mapView.onResume();
public void onPause() {
super.onPause();
mapView.onPause();
public void onDestroy() {
super.onDestroy();
mapView.onDestroy();
*@author xuenan
*百度定位监听实现
public class MyLocationLister implements BDLocationListener{
private BaiduMap M
private boolean isFirstLoc = true;
public MyLocationLister(BaiduMap mapView,Context context){
this.context =
this.Mmap = mapV
public void onReceiveLocation(BDLocation location) {
final MyLocationData data = new MyLocationData.Builder()
.direction(location.getDirection())
.latitude(location.getLatitude())
.longitude(location.getLongitude())
.accuracy(location.getRadius())
if(data!=null){
Mmap.setMyLocationData(data);
} catch (NullPointerException e) {
e.printStackTrace();
String city = location.getCity();
SPUtils.putString(context,"latitude", String.valueOf(location.getLatitude()));
SPUtils.putString(context,"longitude", String.valueOf(location.getLongitude()));
SPUtils.putString(context,"city", String.valueOf(city));
SPUtils.putString(context, "AddrStr",location.getAddrStr());
if (isFirstLoc) {
isFirstLoc = false;
LatLng pt = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(pt);
Mmap.animateMapStatus(update);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:21710次
排名:千里之外
原创:39篇
(1)(1)(4)(14)(6)(1)(15)如何获取自定义覆盖物的经纬度?跪求_百度地图api吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:5,406贴子:
如何获取自定义覆盖物的经纬度?跪求收藏
自定义覆盖物的容器是div,现在有一个div单击事件,当我单击覆盖物的时候,弹出一个信息窗口,现在需要得到我点击的覆盖物的经纬度,该怎么办?div.onclick = function (e) {
//当点击覆盖物的时候,新建信息窗口
//把map.getCenter()换成当前标注的经纬度?
var event = e || window.
map.openInfoWindow(infowindow, mp.overlayPixelToPoint((new BMap.Pixel(event.clientX, event.clientY))));
}mp.overlayPixelToPoint((new BMap.Pixel(event.clientX, event.clientY)))这句话的意思是获取当前的像素坐标,我要把换成经纬度,怎么做?map.openInfoWindow(infowindow, new BMap.Point(X,Y));X,Y代表当前点击的覆盖物的经纬度,该怎么获取?
票牛教你如何买到热门、便宜、真实的演出门票!
怎么去除信息窗口的阴影效果和下面的小三角符号
咋就没人帮忙解决下呢?这问题太2了?
这吧没人了?
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或Android之3.5版的百度地图的定位、覆盖物实现以及覆盖物的点击事件
前段时间,在用到新版(3.5.0版)百度地图时,在地图覆盖物实现以及覆盖物点击事件的添加部分遇到点挫折,发现网上很多的资料写得都不够详细,所以我就想写一个有关从地图定位到地图覆盖物及其点击事件的实现的博文。
覆盖物及其点击事件:
自定义缩放控件的实现效果(注意图中的加减按钮):
实现此例程之前要做的的步骤:
1、申请Baidu API_KEY;vc3Ryb25nPiA8c3Ryb25nPjxlbT4yoaLPwtTYQmFpZHUgU0RLo6zS1LywQmFpZHUgQlMgU2FtcGxlo6zU2mxpYnPW0LW8yOtiYWlkdW1hcGFwaV92M181XzAuamFyus1sb2NTREtfNi4xMS5qYXLBvbj2sPw8L2VtPjwvc3Ryb25nPiA8c3Ryb25nPjxlbT4zoaLU2m1haW7Ev8K8z8LQwr2o0ru49mpuaUxpYnPOxLz+vNCjrLW8yOvE473i0bm6w7XEtcRCYWlkdSBzZGvW0HNvsPzW0LXEYXJtNjQtdjhhoaJhcm1lYWJpoaJhcm1lYWJpLXY3YaGieDg2oaJ4ODZfNjTV4ry4uPbOxLz+vNCjrMi7uvPU2kJhaWR1IEJT1tDV0rW9c2+/4mFybTY0LXY4YaGiYXJtZWFiaaGiYXJtZWFiaS12N2Ghom1pcHOhom1pcHM2NKGieDg2oaJ4ODZfNjSjrMjnufvE48/CtcTKx0JhaWR1IEJTIFNhbXBsZaOsv8nS1NaxvdPV0rj2yrLDtLmmxNy2vNPQtcRzYW1wbGWjrLDRy/y1xGxpYnPPwrXEy/nT0M7EvP6/vbG0tb3E47XEbGlic8S/wrzPwqOs1eLA77XEw7+49nNvsPy1xNf308O2vLK70rvR+aOstry1vL34yKW/ydLUyLexo83yzt7Su8qno6zSsr/J0tTU2mxpYnPOxLz+vNDPwtaxvdO1vMjryc/K9rXExMfQqc7EvP680Ly4uPbOxLz+vNChozwvZW0+PC9zdHJvbmc+PGJyIC8+DQo8c3Ryb25nPteio7rO0rXEam5pTGlic7D8tcS94bm5o7o8L3N0cm9uZz48YnIgLz4NCjxpbWcgYWx0PQ=="这里写图片描述" src="/uploadfile/Collfiles/1.png" title="\" /> 4、在AndroidManifest中添加权限:
5、申明你的API KEY
你还可以在Baidu地图官网上找到他们的API照着他们的步骤好好做一遍,把所有预备工作做好,然后直接看下面的Demo
public class BaiduMapActivity extends BaseActivity implements View.OnClickListener {
private MapView mMapV
private BaiduMap mBaiduM
private LocationClient mLocationClient =
public BDLocationListener mBDListener = new MyLocationListener();
private List bdMapClientL
private boolean isFirstLocate =
private Button mButtonA
private Button mButtonS
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_baidu_map);
* 缩放地图的按钮
mButtonAdd = (Button) findViewById(R.id.button_add);
mButtonSub = (Button) findViewById(R.id.button_sub);
mButtonAdd.setOnClickListener(this);
mButtonSub.setOnClickListener(this);
mMapView = (MapView) findViewById(R.id.mapView_client_raise);
mMapView.showZoomControls(false);//让百度地图默认的地图缩放控件不显示
mBaiduMap = mMapView.getMap();
mBaiduMap.setMyLocationEnabled(true);//使能百度地图的定位功能
mLocationClient = new LocationClient(getApplicationContext());
mLocationClient.registerLocationListener(mBDListener);//注册地图的监听器
initLocation();
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
final String info = (String) marker.getExtraInfo().get(info);
InfoWindow infoW
//动态生成一个Button对象,用户在地图中显示InfoWindow
final Button textInfo = new Button(getApplicationContext());
textInfo.setBackgroundResource(R.drawable.locate_popup_state);
textInfo.setPadding(10, 10, 10, 10);
textInfo.setTextColor(Color.BLACK);
textInfo.setTextSize(12);
textInfo.setText(info);
//得到点击的覆盖物的经纬度
LatLng ll = marker.getPosition();
textInfo.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(BaiduMapActivity.this, 你点击了+info, Toast.LENGTH_SHORT).show();
//将marker所在的经纬度的信息转化成屏幕上的坐标
Point p = mBaiduMap.getProjection().toScreenLocation(ll);
p.y -= 90;
LatLng llInfo = mBaiduMap.getProjection().fromScreenLocation(p);
//初始化infoWindow,最后那个参数表示显示的位置相对于覆盖物的竖直偏移量,这里也可以传入一个监听器
infoWindow = new InfoWindow(textInfo, llInfo, 0);
mBaiduMap.showInfoWindow(infoWindow);//显示此infoWindow
//让地图以备点击的覆盖物为中心
MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.setMapStatus(status);
//开始定位
mLocationClient.start();
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_add:
//放大地图
mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomIn());
case R.id.button_sub:
//缩小地图
mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomOut());
* 自定义一个百度地图的定位监听器,可监听定位类型,位置经纬度变化等一系列状态
private class MyLocationListener implements BDLocationListener {
public void onReceiveLocation(BDLocation bdLocation) {
latitude = bdLocation.getLatitude();//得到纬度
longitude = bdLocation.getLongitude();//得到经度
boolean isLocateFailed =//定位是否成功
if (isFirstLocate) {
if (bdLocation.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果
ToastUtils.showToast(getApplicationContext(), GPS定位);
} else if (bdLocation.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果
ToastUtils.showToast(getApplicationContext(), 网络定位);
} else if (bdLocation.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
ToastUtils.showToast(getApplicationContext(), 离线定位);
} else if (bdLocation.getLocType() == BDLocation.TypeServerError
|| bdLocation.getLocType() == BDLocation.TypeNetWorkException
|| bdLocation.getLocType() == BDLocation.TypeCriteriaException) {
isLocateFailed =
* 如果定位不成功,显示定位失败的dialog
if (isLocateFailed) {
simpleDialog();
initMapDataList();
addOverlay();
isFirstLocate =
* 添加覆盖物的方法
private void addOverlay() {
Marker marker =
LatLng point =
MarkerOptions option =
BitmapDescriptor bitmap =BitmapDescriptorFactory.fromResource(R.mipmap.customer_location);;
for (BDMapData data : bdMapClientList) {
point = new LatLng(data.getLatitude(), data.getLongitude());
option = new MarkerOptions().position(point).icon(bitmap);
marker = (Marker) mBaiduMap.addOverlay(option);
//Bundle用于通信
Bundle bundle = new Bundle();
bundle.putSerializable(info, data.getName()+
+纬度:+data.getLatitude()+
经度:+data.getLongitude());
marker.setExtraInfo(bundle);//将bundle值传入marker中,给baiduMap设置监听时可以得到它
//将地图移动到最后一个标志点
MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(point);
mBaiduMap.setMapStatus(status);
* BaiduAPI上的例程,初始化定位
private void initLocation() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType(bd09ll);//可选,默认gcj02,设置返回的定位结果坐标系
int span = 1000;
option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于&在北京天安门附近&
option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可选,默认false,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
mLocationClient.setLocOption(option);
//初始化每个覆盖物对应的信息
private void initMapDataList() {
bdMapClientList = new ArrayList&&();
//让所有覆盖物的经纬度与你自己的经纬度相近,以便打开地图就能看到那些覆盖物
bdMapClientList.add(new BDMapData(中兴创维, latitude - 0.0656, longitude - 0.00354));
bdMapClientList.add(new BDMapData(领卓科技, latitude + 0.024, longitude - 0.0105));
bdMapClientList.add(new BDMapData(蓝翔驾校, latitude - 0.00052, longitude - 0.01086));
bdMapClientList.add(new BDMapData(优衣库折扣店, latitude + 0.0124, longitude + 0.00184));
* 定位失败时显示的dialog的初始化方法
public void simpleDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(BaiduMapActivity.this);
builder.setMessage(当前网络不可用,请检查网络设置)
.setNeutralButton(确定, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
AlertDialog dialog = builder.create();
dialog.setCanceledOnTouchOutside(true);
dialog.show();
用于存储覆盖物信息的类
public class BDMapData {
priv//经度
public BDMapData(String name, double latitude, double longitude) {
this.name =
this.latitude =
this.longitude =
public String getName() {
public void setName(String name) {
this.name =
public double getLatitude() {
public void setLatitude(double latitude) {
this.latitude =
public double getLongitude() {
public void setLongitude(double longitude) {
this.longitude =
布局文件activity_baidu_map:
不想贴源码了。。。
drawable文件夹下内容:
item_bg.xml
add_state.xml
sub_state.xml:
locate_popup.xml
white:#ffffff
grey:#d0d0d0
mipmap中的图片
customer_location.png:
add_group.png:
add_group_press.png:
btn_reduction_group.png:
btn_reduction_group_press.png:
btn_back_normal.png:
这里只是实现了BaiduMap的最基本的几个功能,它还有其它许多种功能,但都没这个功能应用得频繁,像什么美团之类的应用里就用到了覆盖物,至于Baidu SDK别的很多功能,有了解的朋友可以写个博客给大家展示一下。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

我要回帖

更多关于 android 自定义覆盖物 的文章

 

随机推荐