添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

1、自定义InfoWindow

重写InfoWindow的getInfoWindow()方法,返回一个View,如果这个View的根布局没有设置background,那么高德会给你外面套一层框框:

如果设置了background,哪怕是一个透明的颜色,就能达到我们想要的效果:

由于图片是拿另一个手机拍的,有点歪歪的。

2、设置地图缩放等级

高德地图默认显示的区域是很大的,比如我要显示比较详细的街道信息,就要设置一个较大的缩放等级:

aMap.moveCamera(CameraUpdateFactory.zoomTo(15));

但是,问题来了,有时候设置了没有起作用 抓狂

好吧,那我设置一个监听,设置没有成功就重新设置:

private float zoom = 16;
aMap.moveCamera(CameraUpdateFactory.zoomTo(zoom));
aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
    @Override
    public void onCameraChange(CameraPosition cameraPosition) {
    @Override
    public void onCameraChangeFinish(CameraPosition cameraPosition) {
        if (cameraPosition.zoom != zoom) {
            aMap.moveCamera(CameraUpdateFactory.zoomTo(zoom));

现在另外一个问题来了,这样设置之后,地图就不能缩放了,因为每次手动缩放之后,就会重新设置到zoom这个等级,好吧,那我们加一个标志,只对第一次加载的时候重新设置zoom:

private float zoom = 16;
private boolean isLoaded;
aMap.moveCamera(CameraUpdateFactory.zoomTo(zoom));
    aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
    @Override
    public void onCameraChange(CameraPosition cameraPosition) {
    @Override
    public void onCameraChangeFinish(CameraPosition cameraPosition) {
        if (!isLoaded && cameraPosition.zoom != zoom) {
            aMap.moveCamera(CameraUpdateFactory.zoomTo(zoom));
        isLoaded = true;

但是。。。。。。。理论上来说,没得问题了,实际上你会发现有时候还是没有作用再见

分析原因,发现地图会加载两次,第一次加载的是默认地图(可能并不是你指定的经纬度),经过了一次回调,然后第二次加载的时候,不会再进入回调里面的设置代码了,因为isLoaded已经置true了,知道了原因修改就简单了,把isLoaded置true的代码放在括号里面就行了:

@Override
public void onCameraChangeFinish(CameraPosition cameraPosition) {
    if (!isLoaded && cameraPosition.zoom != zoom) {
        aMap.moveCamera(CameraUpdateFactory.zoomTo(zoom));
        isLoaded = true;

3、不能正常定位

自动定位到非洲的海洋里面去了骂人

看log日志也没有异常,增加一个定位监听:

aMap.setOnMyLocationChangeListener(new AMap.OnMyLocationChangeListener() {
    @Override
    public void onMyLocationChange(Location location) {
        Log.e("map", location.toString());

然后在log中发现异常:

10-10 09:41:47.290 27722-27722/com.ht.test E/map: latitude=0.0#longitude=0.0#province=#city=#district=#cityCode=#adCode=#address=#country=#road=#poiName=#street=#streetNum=#aoiName=#poiid=#floor=#errorCode=12#errorInfo=缺少定位权限 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看错误码说明,错误详细信息:定位权限被禁用,请授予应用定位权限#1201 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看错误码说明,错误详细信息:定位权限被禁用,请授予应用定位权限#1201#locationDetail=定位权限被禁用,请授予应用定位权限#1201#locationType=0

原来是没有定位权限,Android 6.0以后,定位权限需要动态申请,java代码申请权限即可。

然后,还是不行,看log:

10-10 09:37:02.020 22915-22915/com.ht.test E/map: latitude=0.0#longitude=0.0#province=#city=#district=#cityCode=#adCode=#address=#country=#road=#poiName=#street=#streetNum=#aoiName=#poiid=#floor=#errorCode=7#errorInfo=KEY错误 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看错误码说明,错误详细信息:auth fail:INVALID_USER_SCODE#SHA1AndPackage#C4:2B:3E:6E:3C:CE:83:63:6A:30:5A:B7:BD:70:65:34:13:04:74:78:com.ht.test#gsid#3ce427c57a5fd872c4cb4ef864a9c4d7#csid#e2fb592fe470496487546e65bc51eaf6#0701 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看错误码说明,错误详细信息:auth fail:INVALID_USER_SCODE#SHA1AndPackage#C4:2B:3E:6E:3C:CE:83:63:6A:30:5A:B7:BD:70:65:34:13:04:74:78:com.ht.test#gsid#3ce427c57a5fd872c4cb4ef864a9c4d7#csid#e2fb592fe470496487546e65bc51eaf6#0701#locationDetail=auth fail:INVALID_USER_SCODE#SHA1AndPackage#C4:2B:3E:6E:3C:CE:83:63:6A:30:5A:B7:BD:70:65:34:13:04:74:78:com.ht.test#gsid#3ce427c57a5fd872c4cb4ef864a9c4d7#csid#e2fb592fe470496487546e65bc51eaf6#0701#locationType=0

额,key错误,把高德后台申请到的key填到manifest中即可。

4、显示多点,并且视图刚好把所有点包起来

MultiPointOverlayOptions overlayOptions = new MultiPointOverlayOptions();
overlayOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.map_light));//点的图片
overlayOptions.anchor(0.5f,0.5f); //设置锚点
MultiPointOverlay multiPointOverlay = mBinding.mapView.getMap().addMultiPointOverlay(overlayOptions);
List<MultiPointItem> list = new ArrayList<MultiPointItem>();
LatLngBounds.Builder latLngBounds = LatLngBounds.builder();
for(BeanLight bean : beanLights) {
    //创建MultiPointItem存放,海量点中某单个点的位置及其他信息
    MultiPointItem multiPointItem = new MultiPointItem(new LatLng(Double.valueOf(bean
            .latitude), Double.valueOf(bean.longitude)));
    multiPointItem.setCustomerId(bean.lightCode);
    list.add(multiPointItem);
    latLngBounds.include(new LatLng(Double.valueOf(bean
            .latitude), Double.valueOf(bean.longitude)));
multiPointOverlay.setItems(list);//将规范化的点集交给海量点管理对象设置,待加载完毕即可看到海量点信息
mBinding.mapView.getMap().moveCamera(CameraUpdateFactory.newLatLngBounds
        (latLngBounds.build(), 50));

BeanLight代码:

public class BeanLight extends BeanBase {
    public String lightCode;
    public String longitude;
    public String latitude;

5、通过屏幕某点坐标获取该点定位

通过aMap.getProjection().fromScreenLocation(x, y)方法可以通过屏幕某点坐标获取该点的经纬度,高德解释如下:

根据转入的屏幕位置返回一个地图位置(经纬度)。

但是他这里所说的屏幕并不包括系统状态栏的高度,所以和view.getLocationOnScreen()方法配合使用时,会有一个高度差。比如:

public LatLng getMapCenterPoint(View view) {
    Projection projection = aMap.getProjection();
    int[] location = new int[2];
    view.getLocationOnScreen(location);
    LatLng pt = projection.fromScreenLocation(new Point(location[0],
            location[1]));
    return pt;

通过这个方法获取该view在地图上的经纬度,结果老是有误差,通过根view在屏幕上的坐标可以消除该误差:

public LatLng getMapCenterPoint(View rootView, View view) {
    Projection projection = aMap.getProjection();
    int[] rootLocation = new int[2];
    rootView.getLocationOnScreen(rootLocation);
    int[] location = new int[2];
    view.getLocationOnScreen(location);
    LatLng pt = projection.fromScreenLocation(new Point(location[0],
            location[1] - rootLocation[1]));
    return pt;
                    1、自定义InfoWindow重写InfoWindow的getInfoWindow()方法,返回一个View,如果这个View的根布局没有设置background,那么高德会给你外面套一层框框:如果设置了background,哪怕是一个透明的颜色,就能达到我们想要的效果:由于图片是拿另一个手机拍的,有点歪歪的。2、设置地图缩放等级高德地图默认显示的区域是很大的,比...
				
本文主要实现根据城市名和分类名爬取对应的POI数据 首先,需要在高德地图开放平台上注册账号,并且申请web服务的AK密钥。注册账号登陆后点击右上角的控制台 ->应用管理 -> 创建应用 -> 添加新key,注意选择web 服务,就得到了一个可以使用web服务的key密钥。一定是Web服务噢。 然后将密钥复制下来,在后面的代码中使用。 具体代码如下。 获取的POI数据包括经纬度、名字、地址、所属行政区等属性。其中transCoordinateSystem.py包含转换坐标的函数,可以根据需要选取不同的函数以获取所需数据。 若运行程序提示缺乏某些库,则添加相应库即可。 #!/usr/bin/en
想要使用高德地图的服务就必须拥有一个key,每个应用有唯一的key,不能一个key供多个应用使用; 官网获取key的教程:官方教程(此教程中的获取 SHA1我觉得不好理解,当时也是困惑了好久,所以我自己整理了一个文章,如果官方的获取 SHA1方法对你没帮助,那你就看看这篇文章吧:发布版sha1与调试版sha1获取(基于AndroidStudio))
JedisDataException: ERR invalid longitude,latitude pair 0.589246,85.149780 经纬度超出了redis定义的范围, 具体的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001 规定如下: 有效的经度从-180度到180度。 有效的纬度从-85.05112878度到85.05112878度。 当坐标位...
使用高德地图,获取定位的过程中,出现以下问题: ErrorCode:12, errorInfo:缺少定位权限 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/  查看错误码说明,错误详细信息:获取到的基站为空,并且获取WIFI权限被禁用,请在安全软件中打开应用的定位权限#1203。 进入设置中查...
getLocation:fail [geolocation:12]缺少定位权限 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/ 查看错误码说明,错误详细信息: 定位服务没有开启,请在设置中打开定位服务开关#1206 at pages/traffic/traffic.vue:36 当时我就纳闷,获取定位权限不是已经给了吗,然后社区看看,文档,百度都看了一圈,安卓确实要配置一些信息,http.
百度地图WEB服务-逆地理编码使用心得 上一篇博文写了我开发项目中最长用的正地理编码接口的博文,这次想总结一下逆地理编码的使用情况,当我们请求百度地图WEB服务中接口得到的返回数据时会发现所有对地理位置的描述都是以经纬度坐标的形式返回,但当我们处理这些返回信息时,我们需要根据这些坐标得到实际的结构化的地理位置信息,这时就需要使用百度地图开发平台提供的逆地理编码服务。 解决方法: 在mongodb中存储GeoJSON的格式是先存经度后存纬度,经度它的范围在±180以内,而维度在±90以内,所以出现这种问题直接找是不是经纬度顺序存储反了即可。(上面的存储顺序是正确的大家不必纠结) 另外在做地图类的程序时一定会遇到坐标系的转换,在mongodb中存储的...
&lt;view class="index-top-left incursor" bindtap="get_user_address"&gt; &lt;span style="font-size:14px;color:#333333;"&gt;{{userCity}}&lt;/span&gt; &lt;/vie
ArcMap是一款地理信息系统软件,由Esri公司开发。它提供了多种功能,包括数据编辑、地图分析、空间建模等。使用ArcMap可以对多种数据进行处理和分析,包括地形、卫星影像、社会经济统计数据等。 高德地图是一款互联网地图应用软件,由阿里巴巴旗下的高德软件开发。它提供了地图、搜索、导航、公交、酒店等多种功能,现已成为国内最大的在线地图和导航服务提供商之一。 将ArcMap与高德地图结合起来使用,可以极大地拓宽地图应用的范围和功能。比如,可以将高德地图的道路信息和ArcMap中的地图数据进行融合,得到更准确的路况信息;可以通过高德地图进行地理搜索和位置定位,然后在ArcMap中进行空间分析和建模,以便更好地制定规划和决策。此外,ArcMap还可以通过插件的形式集成高德地图的API,将高德地图的功能直接嵌入ArcMap中,增强软件的功能和易用性。 综上所述,结合ArcMap和高德地图的优点可以扩展地图应用的功能和覆盖范围,提高地图应用的效率和准确性。
我要是传List<Object>呢? [code=java] User user1=new User("yayun", 7);//实例化对象 User user2=new User("feifei", 9); list.add(user1); list.add(user2); Intent intent=new Intent(); intent.setClass(MainActivity.this, LoginActivity.class); Bundle bundle=new Bundle(); bundle.putSerializable("list",(Serializable)list);//序列化,要注意转化(Serializable) intent.putExtras(bundle);//发送数据 startActivity(intent);//启动intent [/code] [code=java] Intent intent = this.getIntent(); list = (List<User>) intent.getSerializableExtra("list");//获取list方式 User user1=list.get(0); User user2=list.get(1); [/code] 我这么写会报警告 uni-app广告总结 初学者学徒: 可以可以,这下我就有底气了,老板老是让用原生穿山甲 uni-app广告总结 ˡº̶ᵛᵉ̶HHANGᵧ̶ₒᵤ̶: 开通增强,一天二三十 uni-app广告总结 初学者学徒: 这个基础的收一个没有是正常的吗,浏览和点击都有,但还是0.00 Fragment之java.lang.IllegalArgumentException: No view found for id异常 芳信白泽: 有用,还得是你