android osmdroid 加载离线地图map格式以及地图网格绘制

2023-12-30 05:50

本文主要是介绍android osmdroid 加载离线地图map格式以及地图网格绘制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

越来越深入了解osmdroid开源地图,越发现强大。继上次记载离线地图文章之后android osmdroid 加载常用离线地图格式(开源的在线地图)。再讲支持map地图格式的数据。还有怎么绘制地图的网格,绘制网络分为两种,一种是直接在地图上绘制,监听缩放等级。还有一种是利用Fragment加一层进行绘制。

osmdroid 仓库地址:http://jcenter.bintray.com/org/osmdroid/osmdroid-android/  这里面有示例apk,还有源码以及文档。

github官网:https://github.com/osmdroid/osmdroid

mapsforge相关库的仓库地址:http://jcenter.bintray.com/org/mapsforge/

map地图格式文件下载:http://ftp-stud.hs-esslingen.de/pub/Mirrors/download.mapsforge.org/maps/

1,先看实现的界面

网格实现



map地图格式



2,地图网格相关代码

直接加载版本,增加缩放监听即可

package com.osmdroid.sample;import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;import org.osmdroid.events.MapListener;
import org.osmdroid.events.ScrollEvent;
import org.osmdroid.events.ZoomEvent;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.FolderOverlay;
import org.osmdroid.views.overlay.gridlines.LatLonGridlineOverlay;public class DirectGridActivity extends AppCompatActivity implements View.OnClickListener {FolderOverlay activeLatLonGrid;private MapView mMapView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_fragment);initView();}private void initView() {mMapView = (MapView)findViewById(R.id.mymapview);LatLonGridlineOverlay.setDefaults();mMapView.setMaxZoomLevel(20);mMapView.setMinZoomLevel(6);mMapView.getController().setZoom(12);mMapView.setTilesScaledToDpi(true);mMapView.getController().setCenter(new GeoPoint(23.12645, 113.365575));mMapView.setUseDataConnection(true);mMapView.setMultiTouchControls(true);// 触控放大缩小mMapView.getOverlayManager().getTilesOverlay().setEnabled(true);mMapView.setMapListener(mapListener);LatLonGridlineOverlay.fontSizeDp=16;LatLonGridlineOverlay.fontColor= Color.argb(255,0,255,0);LatLonGridlineOverlay.backgroundColor=Color.BLACK;LatLonGridlineOverlay.lineColor=LatLonGridlineOverlay.fontColor;updateGridlines();}MapListener mapListener = new MapListener() {@Overridepublic boolean onScroll(ScrollEvent scrollEvent) {updateGridlines();return false;}@Overridepublic boolean onZoom(ZoomEvent zoomEvent) {updateGridlines();return false;}};protected void updateGridlines(){if (mMapView==null)return; //happens during unit tests with rapid recycling of the fragmentif (activeLatLonGrid != null) {mMapView.getOverlayManager().remove(activeLatLonGrid);activeLatLonGrid.onDetach(mMapView);}LatLonGridlineOverlay.backgroundColor= Color.BLACK;LatLonGridlineOverlay.fontColor= Color.BLUE;LatLonGridlineOverlay.lineColor= Color.BLUE;activeLatLonGrid = LatLonGridlineOverlay.getLatLonGrid(this, mMapView);mMapView.getOverlays().add(activeLatLonGrid);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button:break;}}
}

使用Fragment绘制格网

package com.osmdroid.sample;import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;import com.osmdroid.sample.util.SampleGridlines;import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;public class GridFragmentActivity extends AppCompatActivity  {private SampleGridlines mSampleGridlines = null;private MapView mapView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_fragment);initView();}private void initView() {mapView = (MapView)findViewById(R.id.mymapview);//        mapView.setTileSource(TileSourceFactory.MAPNIK);mapView.setDrawingCacheEnabled(true);mapView.setMaxZoomLevel(20);mapView.setMinZoomLevel(6);mapView.getController().setZoom(12);mapView.getController().setCenter(new GeoPoint(23.12645, 113.365575));mapView.setUseDataConnection(true);mapView.setMultiTouchControls(true);// 触控放大缩小//是否显示地图数据源mapView.getOverlayManager().getTilesOverlay().setEnabled(false);FragmentManager fm = this.getSupportFragmentManager();if (fm.findFragmentByTag("SampleGridlines") == null) {mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);mSampleGridlines = new SampleGridlines();fm.beginTransaction().add(R.id.samples_container, mSampleGridlines, "SampleGridlines").commit();}}}

这个类也是osmdroid里面示例代码来的。我稍微修改了一下。

package com.osmdroid.sample.util;import android.graphics.Color;import com.osmdroid.sample.util.MapViewBaseSampleFragment;import org.osmdroid.events.MapListener;
import org.osmdroid.events.ScrollEvent;
import org.osmdroid.events.ZoomEvent;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.overlay.FolderOverlay;
import org.osmdroid.views.overlay.gridlines.LatLonGridlineOverlay;/*** An example on how to use the lat/lon gridline overlay.** basically, listen for map motion/zoom events and remove the old overlay, then add the new one.* you can also override the color scheme and font sizes for the labels and lines*/
public class SampleGridlines extends MapViewBaseSampleFragment implements MapListener {FolderOverlay activeLatLonGrid;@Overridepublic String getSampleTitle() {return "Lat/Lon Gridlines";}@Overrideprotected void addOverlays() {super.addOverlays();LatLonGridlineOverlay.setDefaults();mMapView.setMaxZoomLevel(20);mMapView.setMinZoomLevel(6);mMapView.getController().setZoom(12);mMapView.getController().setCenter(new GeoPoint(23.12645, 113.365575));mMapView.setTilesScaledToDpi(true);mMapView.setMapListener(this);LatLonGridlineOverlay.fontSizeDp=16;LatLonGridlineOverlay.fontColor= Color.argb(255,0,255,0);LatLonGridlineOverlay.backgroundColor=Color.BLACK;LatLonGridlineOverlay.lineColor=LatLonGridlineOverlay.fontColor;updateGridlines();}@Overridepublic boolean onScroll(ScrollEvent scrollEvent) {updateGridlines();return false;}@Overridepublic boolean onZoom(ZoomEvent zoomEvent) {updateGridlines();return false;}protected void updateGridlines(){if (mMapView==null)return; //happens during unit tests with rapid recycling of the fragmentif (activeLatLonGrid != null) {mMapView.getOverlayManager().remove(activeLatLonGrid);activeLatLonGrid.onDetach(mMapView);}LatLonGridlineOverlay.backgroundColor= Color.BLACK;LatLonGridlineOverlay.fontColor= Color.BLUE;LatLonGridlineOverlay.lineColor= Color.BLUE;activeLatLonGrid = LatLonGridlineOverlay.getLatLonGrid(getActivity(), mMapView);mMapView.getOverlays().add(activeLatLonGrid);}@Overridepublic void onDestroyView(){if (activeLatLonGrid!=null)activeLatLonGrid.onDetach(mMapView);activeLatLonGrid=null;super.onDestroyView();}}

还有这个类的父类我就不贴出来。感兴趣下载示例代码以及apk对照。很多东西多看几眼就明白了。接下来说加载map格式地图

3,map与mapsforge

相关的库

    compile(name: 'osmdroid-android-5.6.3', ext: 'aar')compile files('libs/mapsforge-map-android-0.6.1.jar')compile files('libs/mapsforge-map-0.6.1.jar')compile files('libs/mapsforge-core-0.6.1.jar')compile files('libs/mapsforge-map-reader-0.6.1.jar')


还有这三个类


在osmdroid 示例代码也是可以找到的,或者jar包。

            //加载map地图格式if(fileName.contains(".map")){File[] mapfile = new File[1];mapfile[0] = exitFile;XmlRenderTheme theme = null;try {theme = new AssetsRenderTheme(context, "renderthemes/","rendertheme-v4.xml");AndroidGraphicFactory.createInstance(context.getApplication());}catch (Exception ex){ex.printStackTrace();return;}MapsForgeTileProvider forge = new MapsForgeTileProvider(new SimpleRegisterReceiver(context),MapsForgeTileSource.createFromFiles(mapfile,theme, "rendertheme-v4"),null);mapView.setTileProvider(forge);return;}
里面涉及到一个assets目录下建一个文件夹renderthemes,把rendertheme-v4.xml拷贝进去,相当于一个读取默认样式的。

最后嘱咐加上权限,联网以及读取目录的。

4,附上几张图,多了解一下





资源下载:后面上传之后再更新。

本博客源码下载:http://download.csdn.net/detail/qq_16064871/9763983



这篇关于android osmdroid 加载离线地图map格式以及地图网格绘制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/551895

相关文章

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题

《Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题》:本文主要介绍Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录一、前言二、系统架构检测三、卸载旧版 Go四、下载并安装正确版本五、配置环境变量六、验证安装七、常见