自定义数据格式的矢量地图实现

Update

项目已重构至2.0,启用了新的数据结构和代码结构。基本弥补了初版的大部分功能缺失。还有部分功能未实现,比如指南针、区域的绘制方式等。
其实代码早就写的差不多了,只是最近在准备期末复习,加上智商下线,所以一直忘了更新博客╮(╯_╰)╭。具体的项目地址在此

2017/06/28

背景

面试失利后,最近在专攻工程设计项目,指望着能通过它咸鱼翻身去名企。项目中需要一种可以自由控制并显示自定义的矢量路径和兴趣点的地图模块,仔细查了查发现并没有现成的轮子可以用,便想着自己定义一种数据格式进行解析和渲染。但真正实践起来,才发现难度颇大,先在这里记录下自己的思路和方法。

预期功能

  • 实现矢量路径的显示,不同道路的绘制样式不同。
  • 可以显示建筑点,可以区分不同建筑或类别,建筑点可以被点击,并返回对应的消息
  • 可以在特定的路径和建筑点上显示标签代表其名称。
  • 可以使用手势进行操作,整体的显示效果类似于主流的几个地图App。
  • 在单机上实现地图导航的功能。

技术原理实现

看了不少源码和资料,比如android-pathviewsvg-android,里面的实现方式和项目构架思路都令我受益匪浅。在想了很久以后,根据本人项目的实际情况总结了一下我自己不成熟的想法。


数据结构

数据存储格式

  1. 最好是和原有的SVG的XML文档格式兼容,方便以后的解析和渲染,于是我选择了从SVG转换而来的VectorDrawable XML格式作为数据格式基础。

    这是一个VectorDrawable格式的例子。

    <vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="960dp"
        android:height="480dp"
        android:viewportWidth="960.0"
        android:viewportHeight="480.0">
    <path
        android:pathData="M570.1,440.2l-29.2,-29c-7.1,-8.5 -6.2,-36.7 -6,-40.7H425c0.1,3.9 1.1,32.2 -6,40.7l-29.2,29c-1.2,1.4 -1.7,2.5 -1.6,3.4h-0.1c0.8,7.7 6.7,6.3 13.6,6.3H558c6.7,0 12.4,1.3 13.5,-5.6 0.6,-1 0.3,-2.3 -1.4,-4.1z"
        android:fillAlpha="1"
        android:strokeColor="#B4BEC8"
        android:fillColor="#B4BEC8"
        android:strokeWidth="2"/>
    <path
        android:pathData="M727.5,355.1c0,8.5 -6.6,15.4 -14.7,15.4h-465.5c-8.1,0 -14.7,-6.9 -14.7,-15.4V45.4c0,-8.5 6.6,-15.4 14.7,-15.4h465.5c8.1,0 14.7,6.9 14.7,15.4v309.7z"
        android:fillAlpha="1"
        android:strokeColor="#C8D2DC"
        android:fillColor="#C8D2DC"
        android:strokeWidth="2"/>
    <path
        android:pathData="M489,343.7c-0,-4.2 3.4,-6.3 3.6,-6.4 -2,-2.9 -5,-3.3 -6.1,-3.3 -2.6,-0.3 -5.1,1.5 -6.4,1.5s-3.4,-1.5 -5.5,-1.4c-2.8,0 -5.4,1.6 -6.9,4.2 -2.9,5.1 -0.8,12.7 2.1,16.8 1.4,2 3.1,4.3 5.3,4.2 2.1,-0.1 2.9,-1.4 5.5,-1.4 2.6,0 3.3,1.4 5.5,1.3 2.3,-0 3.7,-2.1 5.1,-4.1 1.6,-2.3 2.3,-4.6 2.3,-4.7 -0.1,-0 -4.4,-1.7 -4.5,-6.8M484.8,331.3c1.2,-1.4 2,-3.4 1.7,-5.3 -1.7,0.1 -3.7,1.1 -4.9,2.5 -1.1,1.2 -2,3.2 -1.8,5.2 1.9,0.1 3.8,-0.9 4.9,-2.4"
        android:fillAlpha="1"
        android:strokeColor="#C8D2DC"
        android:fillColor="#fff"
        <
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值