美文网首页开源
基于map box开发的地图

基于map box开发的地图

作者: 至尊宝_4233 | 来源:发表于2018-11-26 13:30 被阅读2次

       以前在,新浪博客上写,也写了好多了,一直舍不得换,后来发现,还是这上面写的方便,就忍痛割爱了。

    最近在写一个基于mapBox框架的地图项目。从网上搜索,也基本上没找到太多有用的内容。我现在自己总结下,分享给大家。

首先,创建项目以后,有三个代理非常重要。

WhirlyGlobeViewControllerDelegate,

MaplyViewControllerDelegate,

Maply3dTouchPreviewDatasource

因为我们写的是2D地图,大部分的代理方法,都在第二个里面,但是这三个还是都需要写的,否则总会莫名的报错。

// A source of elevation data, if we're in that mode

 NSObject<MaplyElevationSourceDelegate> *elevSource;

这个代理方法,是需要加载数据初始化的时候用到,主要是为了优化内存。设置加载的优先级。

在加载数据前,一定先写上这句话

具体干啥的不好说,但肯定对内存有优化作用

TBQuadTreeNode *awpNode;

在处理数据的时候,需要把数据转成TBQuadTreeNodeData 类型。或者MaplyCoordinate这个类型。主要是根据得到的数据类型,已经需要绘制的内容。

mapbox已经帮助我们队内存做了一定的优化处理,如果加载的数据比较大需要用到这个方法

-(void)startFetchForTile:(MaplyTileID)tileID forLayer:(MaplyQuadPagingLayer *)layer

这个方法,主要是根据地图的高度,对数据进行分级处理,避免卡顿。(需要和开启子线程这个方法一起使用:dispatch_asy......)

这是最基本的加载数据方法。

mapBox提供了两个对象:MaplyScreenMarker,MaplyScreenLabel这个基本满足一些点,线的需求。如果你加载的是一些点,就用Mark,或者是绘制图片最后也需要转成Mark来做。其他的纯文字,就直接使用lable这个对象即可。

      如果是多种类型的Mark需要一起加载,或者根据高度不同,慢慢一起加载出来,那这里有一个非常重要的属性layoutImportance。

layoutImportance  这个属性,简单来说,就是当加载过程中,是否需要和其他的对象进行竞争。也就是说,如果此对象为必须加载,则直接设置为MAXFLOAT。其他的则可以随意设置,但是只要是不是MAXFLOAT的话,那么有可能会被优先级更高的挤掉,不显示。

MaplyComponentObject 这个对象也很重要。Mark是把数据处理以后放进来,而MaplyComponentObject则是最终呈现出来的载体。

MaplyComponentObject *airportCompObj = [layer.viewC addScreenMarkers:markers

                                                                                desc:@{

                                                                                      kMaplyEnable: @(NO),

                                                                                      kMaplyMinVis: @(0.0),

                                                                                      kMaplyMaxVis: @(0.7),

                                                                                      kMaplyFade: @(1.0)}

                                                                                mode:MaplyThreadCurrent];

这个就是把maker 放进来,最后显示出来。除了有addmarker,还有addlable。

以上就是这个地图最基本的一些方法,有喜欢的可以去研究下。

我以前都是写APP的,没做过这种地图类的开发,虽然这个框架给人自由发挥的空间比较大,但也同样的,某些基本功能也需要咱们自己去实现。比如点击变成高亮,在UIButon里就是一句话的事,但是这里需自己要写高亮的实现,一步步琢磨。

此项目还让我学习了mvvm这个开发模式,毕竟地图只有一个controller,不需要push。所以如果都在controller里那太多了,所以最后都尽量写到layer层里,然后controller里直接创建然后一句话加载。

这个框架,还有个特别的,就是里面的layer,并不是咱们UIView里的CALayer,而是NSObject,只不过名字叫layer。

相关文章

  • 基于map box开发的地图

    以前在,新浪博客上写,也写了好多了,一直舍不得换,后来发现,还是这上面写的方便,就忍痛割爱了。 最近在写...

  • 地图

    在iOS开发中,要想加入地图的地位这两大功能,必须基于两个框架进行开发:Map Kit(用于地图展示)、Core ...

  • 地图,定位,LBS相关内容总结

    LBS基于位置的服务 SoLoMo(索罗门)基于位置的社交 Map Kit:用于地图展示 Core Locatio...

  • 基于snap.svg.js的中国地图插件

    snap-china-map.js 是基于 snap.svg.js 开发的一个中国地图的插件。目前只提供了一些基础...

  • 学习发展领域你必须知晓的几个关键名词

    这几年,经常看到一些文章标题:“基于学习地图的培训体系”、“基于学习地图的课程开发”、“基于岗位经验萃取的课程开发...

  • zabbixApi4j-Map

    Map map.create: 创建新地图map.delete: 删除地图map.exists: 检查地图是否存在...

  • Leaflet_D3:点

    开发环境 根据d3创建svg,并添加到map地图的overlayPane下 注册map zoom 事件 示例代码 ...

  • 4种常见用户体验地图速览

    摘要:移情地图(Empathy map),客户旅程地图(customer journey map),体验地图(ex...

  • 地图软件缩小与放大的原理

    实现地图放大与缩小的功能是基于瓦片地图的拼接与显示的。 TMS是tile map service的缩写,是一种瓦片...

  • 腾讯位置服务使用方法详解(一)

    这篇地图开发教程先对uniapp开发map进行的说明,(uniapp是一个使用vue.js开发所有前端应用的框架,...

网友评论

    本文标题:基于map box开发的地图

    本文链接:https://www.haomeiwen.com/subject/wkivqqtx.html