• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

BryantTileMap: android使用谷歌地图(Android uses Google Maps),利用高德地图加载瓦 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

BryantTileMap

开源软件地址:

https://gitee.com/YangsBryant/BryantTileMap

开源软件介绍:

BryantTileMap

android使用谷歌地图(Android uses Google Maps),利用高德地图加载谷歌瓦片图层(Loading Google tile layer with Gaud map)

谷歌瓦片图层

输入图片说明

自定义瓦片图层

输入图片说明

使用方式

对接高德地图,利用核心代码加载谷歌瓦片图层

BryantTileMap的优点

1.解决android端需要翻墙才能使用谷歌地图

2.可以使用高德的任何API

BryantTileMap的缺点

1.谷歌地图分辨率稍有模糊

2.谷歌地图的热点标注比高德地图少很多

3.加载谷歌瓦片图层略慢,并且可以看到底层

关于网络安全配置

请在AndroidManifest.xml的application节点下添加android:networkSecurityConfig="@xml/network_security_config"否则无法访问谷歌瓦片图层

关于MCodeCheck.apk

可以获取SHA1序列号,很多第三平台会用到软件下载地址

主要代码

public class MainActivity extends AppCompatActivity {    @BindView(R.id.mapView)    MapView mapView;    private AMap aMap;    private MarkerOptions markerOptions;    private String tileUrl = "http://mt2.google.cn/vt/";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        mapView.onCreate(savedInstanceState);// 此方法必须重写        aMap = mapView.getMap();        aMap.getUiSettings().setZoomControlsEnabled(false);// 缩放按钮是否显示        aMap.getUiSettings().setRotateGesturesEnabled(false);// 倾斜手势是否可用        aMap.moveCamera(CameraUpdateFactory.zoomTo(16));//缩放级别        aMap.showMapText(false);//不显示位置名称,因为谷歌瓦片图层已经有热点标注        aMap.getUiSettings().setLogoBottomMargin(50);//设置LOGO底部的距离        aMap.getUiSettings().setLogoLeftMargin(50);//设置LOGO左边的距离        //设置自定义瓦片中心点        double[] central = getCentralLatLng(new LatLng(**, **),new LatLng(**,**));        LatLng latLng = new LatLng(central[0], central[1]);        aMap.moveCamera(CameraUpdateFactory.changeLatLng(latLng));        //创建Marker        markerOptions = new MarkerOptions();        View markerView = LayoutInflater.from(this).inflate(R.layout.marker_layout, mapView, false);        markerOptions.icon(BitmapDescriptorFactory.fromView(markerView));//Marker图标        //添加Marker标注        markerOptions.position(latLng);        aMap.addMarker(markerOptions);        aMap.animateCamera(CameraUpdateFactory.changeLatLng(latLng), 500, null);        //地图点击事件        aMap.setOnMapClickListener(latLng12 -> {            //清除地图Marker点(会把瓦片层也清除)            aMap.clear();            //重新设置瓦片层            aMap.addTileOverlay(tileOverlayOptions);            aMap.addTileOverlay(tileOverlayOptions2);            //添加Marker标注            LatLng latLng1 = new LatLng(latLng12.latitude, latLng12.longitude);            markerOptions.position(latLng1);            aMap.addMarker(markerOptions);            aMap.animateCamera(CameraUpdateFactory.changeLatLng(latLng1), 500, null);        });        //添加谷歌瓦片到地图        aMap.addTileOverlay(tileOverlayOptions);        //添加自定义瓦片到地图        aMap.addTileOverlay(tileOverlayOptions2);    }    //谷歌瓦片图    TileOverlayOptions tileOverlayOptions =            new TileOverlayOptions().tileProvider(new UrlTileProvider(256, 256) {                // x横坐标 ,y纵坐标,zoom缩放比                @Override                public URL getTileUrl(int x, int y, int zoom) {                    try {                        /*谷歌瓦片图层地址                        lyrs参数:                        m:路线图                        t:地形图​                        p:带标签的地形图                        ​s:卫星图                        y:带标签的卫星图​                        h:标签层(路名、地名等)*/                        String url = tileUrl + "lyrs=y@167000000&hl=zh-CN&gl=cn&x=" + x + "&y=" + y + "&z=" + zoom +                                                  "&s=Galil.png";                        return new URL(url);                    } catch (Exception e) {                        e.printStackTrace();                    }                    return null;                }            });    //自定义瓦片图    TileOverlayOptions tileOverlayOptions2 =            new TileOverlayOptions().tileProvider(new UrlTileProvider(256, 256) {                // x横坐标 ,y纵坐标,zoom缩放比                @Override                public URL getTileUrl(int x, int y, int zoom) {                    try {                        //获取自定义瓦片图中心的经纬度                        double[] central = getCentralLatLng(new LatLng(**, **),new LatLng(**,**));                        //判断瓦片图中心的经纬度是否是在屏幕内的经纬,从而获取id                        if(getLat().contains(new LatLng(central[0],central[1]))){                            //Y轴矫正公式                            int y2 = (int) (Math.pow(2, zoom) - y - 1);                            //自定义瓦片图的地址                            String url = "https://******/"                                    + 瓦片id + "/" + zoom + "/" + x + "/" + y2 + ".png";                            return new URL(url);                        }                    } catch (Exception e) {                        e.printStackTrace();                    }                    return null;                }            });    //由东南角和西北角求中心点    public double[] getCentralLatLng(LatLng maxLatLng,LatLng minLatLng){        double latMax = maxLatLng.latitude - minLatLng.latitude;        double lonMax = maxLatLng.longitude - minLatLng.longitude;        return new double[]{minLatLng.latitude+latMax/2,minLatLng.longitude+lonMax/2};    }    //获取屏幕矩形区域的经纬度范围    public LatLngBounds getLat(){        VisibleRegion visibleRegion = aMap.getProjection().getVisibleRegion();        return visibleRegion.latLngBounds;    }}

布局文件

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/map"    tools:context=".MainActivity"    android:name="com.google.android.gms.maps.SupportMapFragment" >    <com.amap.api.maps.MapView        android:id="@+id/mapView"        android:layout_width="match_parent"        android:layout_height="match_parent"        /></androidx.constraintlayout.widget.ConstraintLayout>

联系QQ:961606042


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap