在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:BryantTileMap开源软件地址:https://gitee.com/YangsBryant/BryantTileMap开源软件介绍:BryantTileMapandroid使用谷歌地图(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 |
请发表评论