高德地图覆盖物 覆盖物不动,但是map移动,最后获取覆盖物现在位置代码

01:12 提问
百度地图SDK for android
地图移动,marker不动,如何实现
要做的效果是:滴滴打车中的效果,即移动地图,marker始终在地图中央,并且地铁停止移动后,检测到结果然后显示出来如何实现,
按赞数排序
它这种形式的就不是marker了。
百度地图的marker是跟随者地图的移动而移动的。所以你就不能用marker来实现了。
我的思路是:你可以在地图可视区域上面添加一个view,用来显示图标。用framelayout来实现。
然后在通过获取地图中心点来做逻辑处理、
可以参考:
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!
其他相关推荐后使用快捷导航没有帐号?
暂时没有人问过相似的问题,你可以做第一个提问题的人
查看: 11101|回复: 15
请问如何在地图框固定位置显示一个不随地图移动的marker?
十分感谢。想在地图的中心位置显示一个marker,但是拖动地图的时候不随地图移动,只停留在地图框的中心就可以。
var cr=new BMap.CopyrightControl({anchor:BMAP_ANCHOR_TOP_LEFT,offset:new BMap.Size(150,100)});
map.addControl(cr);
cr.addCopyright({id:1,content:&&img src='./images/baidu.png' style='width:20' /&&});
统一回复各位~
& & & & var map = new BMap.Map(&allmap&);
& & & & var point = new BMap.Point(116.404, 39.915);
& & & & map.centerAndZoom(point, 15);
& & & & var marker = new BMap.Marker(point);&&// 创建标注
& & & & map.addOverlay(marker);& && && && && &// 将标注添加到地图中
& & & & map.addEventListener('ondragging', function(){
&&& & & & & & & & marker.setPosition(map.getCenter());
&&& & & & });
直接自己画一个上去不就行了啊。。。。
强烈关注!
这个问题有点自相矛盾啊。首先说不让marker移动,但是又说地图移动的时候,还要marker停留在地图中心,那不还是得移动吗?建议:地图移动的时候,实时改变marker的经纬度坐标为地图中心点坐标。
我的做法是在百度地图的状态改变监听器中不停的修改Dot的位置,不知道有没有更高明的做法。
楼主参考下,有更好的方法也请赐教~mBaiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener(){
& & & & & & & & & & & & @Override
& & & & & & & & & & & & public void onMapStatusChange(MapStatus arg0) {
& & & & & & & & & & & & & & & & // TODO Auto-generated method stub
& & & & & & & & & & & & & & & & //将屏幕中心240,240位置的点转换为的经纬度ll
& && && && && && && && && && && && && && && && && && & LatLng ll = mBaiduMap.getProjection()
& && && && && && && && && && && && && && && && && && && && && && && && && && & .fromScreenLocation(new Point(240,300));
& && && && && && && && && && && && && && && && && &&&//重新设置中心的位置,centerMarker为已经添加到地图的Dot
& & & & & & & && && && && && && && & centerDot.setCenter(ll);
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & & & & & @Override
& & & & & & & & & & & & public void onMapStatusChangeFinish(MapStatus arg0) {
& & & & & & & & & & & & & & & & // TODO Auto-generated method stub
& & & & & & & & & & & & }
& & & & & & & & & & & & @Override
& & & & & & & & & & & & public void onMapStatusChangeStart(MapStatus arg0) {
& & & & & & & & & & & & & & & & // TODO Auto-generated method stub
& & & & & & & & & & & & }
& & & & & & & & });
& && &&&//initMyLocation();
& & & & }复制代码
我现在也想地图移动的时候,实时改变marker的经纬度坐标为地图中心点坐标。可以不知道怎么做 我是用在网页上的 是用的百度api js版本的&&
我现在也在做这个功能,请问楼主实现了吗?
本帖最后由 ahgo2005 于
21:32 编辑
统一回复各位~
& && &&&var map = new BMap.Map(&allmap&);
& && &&&var point = new BMap.Point(116.404, 39.915);
多谢版主!更新下,版主的是移动时就开始定位到地图中心,移动结束后,位置就变了.下次开始移动时,才回到中心.
下面的是移动结束后更新marker点位置
var map = new BMap.Map(&allmap&);
& && &&&var point = new BMap.Point(116.404, 39.915);
& && &&&map.centerAndZoom(point, 15);
& && &&&var marker = new BMap.Marker(point);&&// 创建标注
& && &&&map.addOverlay(marker);& && && && && &// 将标注添加到地图中
& && &&&map.addEventListener('dragend', function(){& & //移动结束后定位
& && && && && && &marker.setPosition(map.getCenter());
& && && & });
美图上外卖就是这么定位的,口碑上的实时移动还在摸索...
顺便问下版主,addEventListener能监听哪些事件...api里面没找到
多谢版主!更新下,版主的是移动时就开始定位到地图中心,移动结束后,位置就变了.下次开始移动时,才回到中心. ...
类参考里面有啊
我的做法是在百度地图的状态改变监听器中不停的修改Dot的位置,不知道有没有更高明的做法。
楼主参考下,有 ...
这是android代码吧,我想要一个javascript的,不知道怎么实现
统一回复各位~
& & & & var map = new BMap.Map(&allmap&);
& & & & var point = new BMap.Point(116.404, 39.915);
这个方法在页面上显示会出现明显的卡顿现象,并没有微信里面的那种很流畅的效果,有改进方法吗?
这个需求跟control比较像,固定在页面上。所以我刚实现了一个自定义的control。
这个需求跟control比较像,固定在页面上。所以我刚实现了一个自定义的control。 ...
确实是,control的特点就是固定不动的。如果您原因分享出来就更好了~
确实是,control的特点就是固定不动的。如果您原因分享出来就更好了~
看例子就可以了。
后来我决定直接用自带的Copyright那个控件,就显示几个字嘛
Powered byAndroid 之 高德地图学习 三 覆盖物 - CSDN博客
Android 之 高德地图学习 三 覆盖物
自己做的笔记,没有深层的东西,请大神绕行~
Android真是个好东西啊,既可以打发时间还可以来充实自己,想当初 以为地图和语音(科大)要多么多么NB才能搞呢,现在看来....没有那么复杂,全是当初‘见识’少啊,现在能比当初稍微强那么一丢丢~
好了,开始吧~
同样看官方文档是怎么解释覆盖物的:
所有叠加或覆盖到地图的内容,统称为地图覆盖物。如标记、矢量图形元素(包括:折线、多边形和圆)等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们也会随地图移动。
其实啊,这个地图我们看上去是一张图片,实际上它是分了好多个图层的,就想ps里的图层一样,每个图层都可以编辑。具体高德用了几个层 我还真不知道 因为我没看到官方的标注但是百度地图是这样的
覆盖物的层级压盖关系,具体如下(从下至上的顺序):
1、基础底图(包括底图、底图道路、卫星图等);
2、地形图图层(GroundOverlay);
3、热力图图层(HeatMap);
4、实时路况图图层(BaiduMap.setTrafficEnabled(true););
5、百度城市热力图(BaiduMap.setBaiduHeatMapEnabled(true););
6、底图标注(指的是底图上面自带的那些POI元素);
7、几何图形图层(点、折线、弧线、圆、多边形);
8、标注图层(Marker),文字绘制图层(Text);
9、指南针图层(当地图发生旋转和视角变化时,默认出现在左上角的指南针);
10、定位图层(BaiduMap.setMyLocationEnabled(true););
11、弹出窗图层(InfoWindow);
12、自定义View(MapView.addView(View););
好了,了解完了继续看官方文档,大体上看文档上有 折线、多边形、圆、图片覆盖、标记(Marker)、弧形。
这里我们只说两个,一个是折线一个是Marker ,折线呢是一个简单基础的例子,Marker呢是我们要重点掌握的,用的频率比较多,剩余的呢都大同小异啦。
首先我们看折线(Polyline):
折线的关键类为 Polyline,在地图上定义了一组相连的线段。Polyline
对象由一组经纬度坐标组成,并以有序序列形式建立一系列的线段。
我们先去看类关于折线呢有两个类:
要玩&Polyline&得知道怎么添加吧,这个看官方文档或者Demo或者是类都可以得出:
Polyline polyline&AMap.addPolyline(PolylineOptions line);这个方法就是添加Polyline啦&
大家可能有疑问,为什么还有返回类型呢,其实啊PolylineOptions这个类可以理解成Polyline的宏观设置看其部分方法就可以看出都是大体的设定,比如
(boolean&isDottedLine)
(boolean&useTexture)
(boolean&isVisible)
(float&width)
(float&zIndex)
Polyline 这个类呢可以想成是微观的设置(部分方法):
像什么颜色啦,
(int&color)
(boolean&isDottedLine)
(boolean&geodesic)
(java.util.List&&&points)
(boolean&visible)
(float&width)
(float&zIndex)
好了直接看看代码吧
PolylineOptions line = new PolylineOptions();
//初始化折线的参数
&span style=&white-space:pre&&
&/span&line.add(new LatLng(43.828, 7.621));
line.add(new LatLng(39.9525));
line.color(Color.GRAY);
line.setDottedLine(true);
line.geodesic(true);
&span style=&white-space:pre&&
&/span&//添加折线
Polyline addPolyline = aMap.addPolyline(line);
addPolyline.setWidth(50f);//可以以后动态设置宽度
OK,说的很啰嗦 但终究折线是说完了。
其他的覆盖物都是大同小异的,下面去看主要的Marker
同样两个相关类:
官方介绍很详细(其实一直都很详细),直接看吧:
添加默认标记
标记显示地图上的单一位置。它可以使用一个标准的图标,也可以由开发者自定义图标。您可以通过 AMap.addMarker(markerOptions) 方法将一个标记添加到地图上。
标记的属性如下:
好了看下官方Demo如何添加的,和polyline是一样的AMap.addxxx();aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f)
.position(Constants.CHENGDU).title(&成都市&)
.snippet(&成都市:30.4.064855&).draggable(true));
这样Marker就可以显示出来了。
要注意的是想让Marker能够拖拽的话一定要有draggable(true)
然后就是为Marker添加监听了:
&span style=&white-space:pre&&
&/span&aMap.setOnMarkerDragListener(this);// 设置marker可拖拽事件监听器
aMap.setOnMapLoadedListener(this);// 设置amap加载成功事件监听器
aMap.setOnMarkerClickListener(this);// 设置点击marker事件监听器
aMap.setOnInfoWindowClickListener(this);// 设置点击infoWindow事件监听器
aMap.setInfoWindowAdapter(this);// 设置自定义InfoWindow样式
然后实现监听接口的方法:
接口和方法如何对应直接看名字就能看出来了。
/** 当用户点击地图时回调的接口。此接口必须在主线程中调用。 */
public boolean onMarkerClick(Marker arg0) {
System.out.println(&onMarkerClick&);
/** 提供了一个给默认信息窗口定制内容的方法。 */
public View getInfoContents(Marker arg0) {
System.out.println(&getInfoContents&);
/** 提供了一个个性化定制信息窗口的marker 对象。 */
public View getInfoWindow(Marker arg0) {
System.out.println(&getInfoWindow&);
/** 当marker 的信息窗口被点击时,回调此方法。 */
public void onInfoWindowClick(Marker arg0) {
System.out.println(&onInfoWindowClick&);
/** 当地图载入成功后回调此方法。 */
public void onMapLoaded() {
System.out.println(&onMapLoaded&);
/** 在marker拖动过程当中回调此方法 */
public void onMarkerDrag(Marker marker) {
System.out.println(&onMarkerDrag&);
String curDes = marker.getTitle() + &拖动时当前位置:(lat,lng)\n(&
+ marker.getPosition().latitude + &,&
+ marker.getPosition().longitude + &)&;
System.out.println(curDes);
/** 在marker拖动完成后回调此方法。 */
public void onMarkerDragEnd(Marker arg0) {
System.out.println(&onMarkerDragEnd&);
/** 当marker开始被拖动时回调此方法。 */
public void onMarkerDragStart(Marker arg0) {
System.out.println(&onMarkerDragStart&);
行吧,就这么着吧,纯粹是写着玩的看到这了基本都入门了,搜索服务 &poi啥的官方比较详细。导航有时间再看吧
本文已收录于以下专栏:
相关文章推荐
为高德地图添加覆盖物,然后为其添加
1 添加MarkOption标记“`
MarkerOptions
mark = new MarkerOptions();
LatLng lat=new LatLng(39....
效果截图:
package com.rf.
import com.amap.mapapi.core.GeoP
import com.amap.mapa...
共享单车轨迹界面如:小黄车和摩拜单车界面布局采用的是高德地图,并且每个轨迹线段都是有对应的地图纹理
首先,我们在高德地图开发环境下进行地图线段纹理开发需要明确几个前提:
线段添加纹理根据官方文档是在...
高德地图——标记
之前讲了百度地图定位和地图基本操作,这篇博客讲一下,怎么去给地图添加覆盖物,并当点击覆盖物的时候显示详细信息。
要给地图添加覆盖物,首先需要覆盖物的经纬度,如果还要实现点击事件,显示详细的信息,还需...
pc开发的时候没有这个问题
前面粗心没看到高德的图片覆盖物切片加载方式,以为只有一种,就是直接加载一个大图片。今天仔细找了一下,发现高德也有跟百度类似的本地切片加载方法:TileOverlay 。
    在这里 &&&
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)map.getOverlays()可以获取所有覆盖物,如何定位到我所需要的_百度地图api吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:5,801贴子:
map.getOverlays()可以获取所有覆盖物,如何定位到我所需要的收藏
map.getOverlays()可以获取所有覆盖物,但是如何定位到我所需要的覆盖物所有覆盖物:[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Polygon],[object Marker]这么多覆盖物对象,有没有什么id或者name能区分出来哪个是哪个?说句实话,百度地图api真垃圾!要什么没什么。那个api文档跟坨屎似的,要例子没例子。
零基础入门到精通,就在营销中心!
请问解决了吗?
我也想知道 啊
var arrayOverlays = map.getOverlays();
for (var i = 0; i & arrayOverlays. i++) {
if ( (arrayOverlays[i].point.lng ==104.111 && arrayOverlays[i].point.lat ==33.001) {
findObj = arrayOverlays[i];
return findO
lz最后解决了么
function deletePoint(name){var allOverlay = map.getOverlays();for (var i = 0; i & allOverlay. i++){if(allOverlay[i].getLabel().content == name){map.panTo(allOverlay[i].getPosition()); //map.removeOverlay(allOverlay[i]);}}alert(&暂无该用户的位置信息&);}我也遇到此类问题,提示“对象不支持getLabel属性或方法”请大神指点
真是很垃圾!!!!我的坐标点根本就没有label,让我怎么根据label删除!!!!而且label还不能隐藏!!!你特么就不能给我个id啊!!!!!!!!!
把每个覆盖物都放到数组不就好了
登录百度帐号推荐应用高德地图添加覆盖物监听函数 - CSDN博客
高德地图添加覆盖物监听函数
A.为高德地图添加覆盖物,然后为其添加监听事件,demo源码中的设置监听事件的代码是这么写的:
&span style=&font-size:18&&&strong&aMap.setOnMarkerClickListener(this);然后地下还配了一个关于监听的函数onMarkerClick();&/strong&&/span&
B.但是编译器报错,编译器修改意见是这么修改的:
&span style=&font-size:18&&&strong&aMap.setOnMarkerClickListener((OnMarkerClickListener) this);&/strong&&/span&
C.编译运行之后程序崩溃,错误代码如下:
D.发现就是那句错了,于是我就自己想了个办法,
E.aMap.setOnMarkerClickListener((OnMarkerClickListener) this);反正也是将this改成了OnMarkerClickListener类型的数据,我何不就new一个OnMarkerClickListener呢?
F.于是我将代码改成
&span style=&font-size:18&&&strong&aMap.setOnMarkerClickListener(new OnMarkerClickListener(){
}&/strong&&/span&
G.编译器自动就弹出应该重写onMarkerClick()方法,我就把demo中的原方法内容加入到onMarkerClick中便是:
&span style=&font-size:18&&&strong&aMap.setOnMarkerClickListener(new OnMarkerClickListener(){
public boolean onMarkerClick(final Marker marker) {
if (marker.equals(markerA)) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, MarkerA.class);
startActivity(intent);
}&/strong&&/span&
本文已收录于以下专栏:
相关文章推荐
示例代码部分:
&meta name=&viewport& content=&initial-scale=1.0, user-scalable=no, width=d
坐标转换service:
一.适用对象:
苦苦纠结于如何将GPS、mapbar、baidu坐标转换为高德坐标系的开发者们。
二.转换方法:
1.      首先当然还是需要人手一个的百...
摘要:如何从GPS转到谷歌?如何从百度转到高德?这些都是小case。我们还提供,如何将基站cell_id转换为GPS坐标?
-----------------------------------...
加载当前位置
LBS获取自定义坐标
高德地图的web开发必须先到开发者专区注册开发者,申请到一个key值,才可以引入。
下面贴出本人自己写的demo:
HTML页面:
div id=&container& style=&wid...
一、先上代码:
html代码:
var postData = {};
postData['rsearch'] =
postData['uid...
在使用load(url)加载页面的时候,如果是调用了外部的js文件如高德地图,可能会和项目里的jquery冲突,此时可以将此放在jquery前面先加载。
&meta name=&viewport& content=&initial-scale=1.0, user-scalable=no, width=device-w
首先我们想要的效果可能是这样的:
这条路线是由4000多个经纬度的点之间的折线两两连接而得到的,,画折线并不会改变地图的缩放比例,貌似直接修改地图的缩放比例也是做不到的,(这一点我不太确定,我...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 高德覆盖物重叠 的文章

 

随机推荐