Android 矢量室内地图开发实例

矢量室内地图开发

因为公司项目的需要,需要开发一套室内地图,并实现路线的规划功能。因为之前没做过这方面的开发,相关的资料也比较少,所以只能一个人去摸索。刚开始我是使用一般的位图去当作的地图,但是这个也让我在后面吃了不少的苦头。

我们知道地图一般都会有缩放和拖拽等功能,正当我把一样利用位图开发的地图样例时,我发现了不少的问题:
1、位图缩放会失真;
2、图片加载比较慢;
3、会导致客户端内存溢出
。。。

因为这些问题,我不得不放弃这种方法。要解决上面的问题只能使用矢量图进行开发了,于是我使用了HTML5进行了矢量图的开发,不仅解决了地图缩放失真等问题,还同时适用于Android、iOS等,个人感觉效果还是相当的好,下面我来介绍一下此种方法:

一、矢量地图

因为是矢量地图,那肯定得要有矢量图的数据,那么可能就得去了解一下SVG,在这里我就不进行介绍了,大家想学习的可以到网上搜索到很多相关的介绍,下面是地图规定的一种格式:


/**
 * Created by Administrator on 2015/11/5.
 */
$.fn.vectorMap('addMap', 'us_aea_en',
  {
    "insets":
    [
      {"width": 220, "top": 440, "height": 146.9158157558812, "bbox": [{"y": -8441281.712315228, "x": -5263934.893342895}, {"y": -6227992.545028123, "x": -1949631.2950683108}], "left": 0},
      {"width": 80, "top": 460, "height": 129.05725678001465, "bbox": [{"y": -4207380.690946597, "x": -5958501.652314129}, {"y": -3658201.4570359783, "x": -5618076.48127754}], "left": 245},
      {"width": 900.0, "top": 0, "height": 550.2150229714246, "bbox": [{"y": -5490839.2352678, "x": -2029243.6460439637}, {"y": -2690044.485299302, "x": 2552083.9617675776}], "left": 0}
    ],
    "paths": {
      "BH-中国建设银行":{"path":"M567.065,977.503h56.717v120.192h-56.717V977.503z" , "name":"中国建设银行"},
      "BH-煌上煌":{"path":"M726.819,646.031h103.775v49.061H726.819V646.031z" , "name":"煌上煌"},
      "BH-佰汇服务中心":{"path":"M746.113,458.64v46.49v3.559v46.49h80.856v-46.49v-3.559v-46.49H746.113z" , "name":"佰汇服务中心"},
      "BH-01":{"path":"M746.113,365.117h84.245v96.714h-84.245V365.117z" , "name":"none"},
      "BH-九疑米粉":{"path":"M598.614,599.228v46.803v2.258v46.802h131.719v-46.802v-2.258v-46.803H598.614z" , "name":"九疑米粉"},
      "BH-02":{"path":"M598.614,552.426h131.719v49.061H598.614V552.426z" , "name":"none"},
      "BH-中国福利彩票":{"path":"M598.614,505.624h79.599v49.061h-79.599V505.624z" , "name":"中国福利彩票"},
      "BH-03":{"path":"M598.614,459.134h79.599v49.061h-79.599V459.134z" , "name":"none"},
      "BH-04":{"path":"M598.614,402.612h79.599v59.22h-79.599V402.612z" , "name":"none"},
      "BH-黑龙茶":{"path":"M621.338,977.503h56.716v120.192h-56.716V977.503z" , "name":"黑龙茶"},
      "BH-蒸美味":{"path":"M675.61,841.39h72.875v256.305H675.61V841.39z" , "name":"蒸美味"},
      "BH-集信饮食":{"path":"M828.102,921.006h60.87v176.689h-60.87V921.006z" , "name":"集信饮食"},
      "BH-衣生衣世":{"path":"M828.102,841.39h60.87v81.99h-60.87V841.39z" , "name":"衣生衣世"},
      "BH-佰汇公寓酒店":{"path":"M886.33,549.978h61.136v142.816H886.33V549.978z" , "name":"佰汇公寓酒店"},
      "BH-水果美容体":{"path":"M889.937,505.13h74.252v47.925h-74.252V505.13z" , "name":"水果美容体"},
      "BH-纤艺美甲":{"path":"M889.937,460.764h74.252v47.924h-74.252V460.764z" , "name":"纤艺美甲"},
     },
    "height":1200.333,//地图的高
    "projection":
    {
      "type": "aea",
      "centralMeridian": -100.0
    }, "width": 2384.0//地图宽
  });

二、设置地图的缩放量

zoomMin:0.5,
zoomMax:8,

三、设置地图背景颜色

backgroundColor:'#FFF',

四、设置店铺文字的随地图缩放

onViewportChange: function(e, scale, transX, transY){
     console.log('viewportChange', scale, transX, transY);
     var old = parseInt($("text").css("fontSize"));
     console.log("字体大小:" + old);
     if( scale < 2.5 || scale == 2.5 ){
      $("text").hide(); 

     }
     else if(scale > 2.5 && scale < 3.5 || scale == 3.5){
      $("text").css("fontSize", 9);
      $("text").show();
     }
     else if(scale > 3.5 && scale < 4.5 || scale == 4.5){
      $("text").css("fontSize", 10);
      $("text").show();
     }
     else if(scale > 4.5 && scale < 5.5 || scale == 5.5){
      $("text").css("fontSize", 14);
      $("text").show();
     }
     else{
      $("text").css("fontSize", 16);
      $("text").show();
     }
    },

五、点击商铺触发的方法

onMarkerOver: function(event, index){
     console.log('marker-over', index);
    },
    onMarkerOut: function(event, index){
     console.log('marker-out', index);
    },
    onMarkerClick: function(event, index){
     console.log('marker-click', index);
    },
    onMarkerSelected: function(event, index, isSelected, selectedMarkers){
     console.log('marker-select', index, isSelected, selectedMarkers);
     if (window.localStorage) {
      window.localStorage.setItem(
       'jvectormap-selected-markers-BH-1',
       JSON.stringify(selectedMarkers)
      );
     }
    },

六、效果图

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android下如何使用百度地图sdk

    可以使用该套 SDK开发适用于Android系统移动设备的地图应用,通过调用地图SDK接口,您可以轻松访问百度地图服务和数据,构建功能丰富.交互性强的LBS(地图类)应用程序. 百度地图Android SDK提供的所有服务是免费的,接口使用无次数限制.您需申请密钥(key)后,才可使用百度地图Android SDK.任何非营利性产品请直接使用.这弦外之音就是盈利的产品必须帮百度给钱. 一.百度地图api平台. 百度地图API网址:http://developer.baidu.com/map/sd

  • 百度地图api应用标注地理位置信息(js版)

    有时做了一些东西没有记录,而过一段时间再看的时候,有会忘记了.需要在重新在看一遍. 百度地图javascript api可以参考 http://developer.baidu.com/map/reference/  示例:http://developer.baidu.com/map/jsdemo.htm 更多百度地图的介绍http://www.cnblogs.com/milkmap/tag/%E5%9C%B0%E5%9B%BEAPI/   里面介绍的非常详细. 弄了一个百度地图来标注地理位置信息

  • Android百度地图定位后获取周边位置的实现代码

    本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical&q

  • Python计算三维矢量幅度的方法

    本文实例讲述了Python计算三维矢量幅度的方法.分享给大家供大家参考.具体如下: from numpy import * from math import * a=(['x','y','z']) sum_com=0 for i in range(3): y=input("Enter %s component:"%a[i]) m=y**2 sum_com += m magnitude=sqrt(sum_com) print "The magnitude of vector i

  • 百度地图API应用之获取用户的具体位置

    功能的大概:用户通过点击地图上面的位置,在地图上面进行描点,然后再把获取的到的地理位置保存到地图上面的地址栏目中. 主要是百度地图API的使用 复制代码 代码如下: var map = new BMap.Map("allmap"); //实例化一个地图对象var point = new BMap.Point(116.331398,39.897445); //设置地图中心的位置map.centerAndZoom(point,12); //设置地图元素的可视层 map.enableScro

  • android实现百度地图自定义弹出窗口功能

    我们使用百度地图的时候,点击地图上的Marker,会弹出一个该地点详细信息的窗口,如下左图所示,有时候,我们希望自己定义这个弹出窗口的内容,或者,干脆用自己的数据来构造这样的弹出窗口,但是,在百度地图最新的Android SDK中,没有方便操作这种弹出窗口的类,虽然有一个PopupOverlay,但是它只支持将弹出内容转化为不多于三个Bitmap,如果这个弹出窗口里想有按钮来响应点击事件,用这个就不能满足要求了,于是,看了一遍百度地图覆盖物的API,我决定用自定义View的方法来实现类似的效果,

  • jQuery 生成svg矢量二维码

    jQuery 生成矢量svg二维码,并提供PNG,和SVG的页面下载,减轻服务端的压力. 代码如下所示: <html> <head> <title>jQuery 生成svg矢量二维码</title> </head> <body> <script type='text/javascript' src='http://cdn.staticfile.org/jquery/2.1.1/jquery.min.js'></scr

  • 如何玩转Android矢量图VectorDrawable

    从5.0(API等级21)开始,android开始支持矢量图了.关于什么是矢量图以及矢量图有什么优缺点不在本文的涉及范围之内,具体可以参考矢量图百科.不过这里要提一下它的优点: 保存最少的信息,文件大小比位图要小,并且文件大小与物体的大小无关 任意放大矢量图形,不会丢失细节或影响清晰度,因为矢量图形是与分辨率无关的. 从以上两个优点来看,在项目中使用矢量图至少可以缩小我们apk包的尺寸,而且可以在屏幕适配时提供很大的方便,因为矢量图是分辨率无关的. 前面也说了,矢量图从21才开始支持.那么如果我

  • Android矢量图之VectorDrawable类自由填充色彩

    2014年6月26日的I/O 2014开发者大会上谷歌正式推出了Android L,它带来了全新的设计语言Material Design,新的API也提供了这个类VectorDrawable .也就是android支持SVG类型的资源也就是矢量图.想到矢量图,自然就会想到位图,何为矢量图,何为位图?先来说说位图吧,我们经常用的png,jpg就是位图了,他是由一个单元一个单元的像素组成的.当小icon遇到大屏幕手机的时候,icon如果被撑开那就是马赛克一样啦.这可不是我们想要的.而矢量图正式和它相

  • 通过JS获取用户本地图片路径并显示的代码

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&qu

  • 谷歌地图打不开的解决办法

    谷歌地图被中国防火墙封杀,所以不用直接引用http://maps.googleapis.com/maps/api/js?sensor=false&language=en这域名下的谷歌地图api,而是改为http://maps.google.cn/maps/api/js?sensor=false这个地址,google.cn在国内的域名没有被封杀,可以使用. 注意:google.cn虽然可以使用,但是会输出部分js引用到google.com的资源,导致地图呈现会延时,所以不要将谷歌地图api放到你的

  • js 调用百度地图api并在地图上进行打点添加标注

    最近要做一个网页,具体内容是:上边有一个标题,下边分成两块,左边是地图.并且地图上有两个点,点击两个点有相应的提示信息,显示数据库里最新的两条数据信息.右边是一些文字说明.本人刚开始学习,做的也不是很好 总体效果如下所示: 首先新建map.php文件,代码如下 复制代码 代码如下: <!DOCTYPE html> <?php /* 创建与数据库的连接 */ $conn=mysql_connect("","","") or die

  • iOS应用开发中矢量图的使用及修改矢量图颜色的方法

    之前捣鼓了点东西,要适配6和Plus,自己做做切图才发现确实有够烦.基于矢量图生成PNG图形的方法也是事后才知道,学习下,希望接下来可以实践.下面进入译文. iOS应用的视觉形式通常是以图形元素驱动的.在设计开发一款应用时,你需要不同规格的应用图标,例如不同尺寸的Default.png图片,同时还需要为UI的实现准备@1x和@2x图形资源.所有这些图形元素都会让你的产品看上去更吸引人,但弊端也是很明显的 - 你需要为每种规格的图形元素单独切图.而随着iPhone 6及Plus的发布,我们又多了一

随机推荐