我开发的开源 JS 地图引擎 maptalks.js, 请大家不吝赐教!

2017-10-12 22:26:36 +08:00
 fuzhenn

嗨! 今天总算把 maptalks 的示例与文档整理得七七八八, 打算正式发布了.

算一算, 从写下 maptalks 的第一行代码到现在, 已经在这个开源库上花了 4 年时间.

我是个自由职业者, 4 年前因为接了个地图外包项目, 因缘际会开始自己造轮子写引擎, 没想到一写就是 4 年 : P

项目地址是:

https://github.com/maptalks/maptalks.js

项目是一个 HTML5 的地图引擎, 基于原生 ES6 Javascript 开发:

以下是一段 maptalks 的 HELLO WORLD:

const map = new maptalks.Map('map', {
    center: [0, 0],
    zoom: 3,
    attribution: {
      content: '&copy; <a href="http://osm.org">OpenStreetMap</a> contributors'
    },
    baseLayer: new maptalks.TileLayer('base', {
      'urlTemplate' : 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
      'subdomains'  : ['a','b','c']
    })
});

我的目标是把它做成世界上最好的开源地图引擎产品 : ), 目前主要竞争对手有leafletjsopenlayers.

回想开发 maptalks 的过程还是挺唏嘘的, 掉进过一个又一个坑, 不得不一次又一次的重写重构, 总算熬到了现在. 即将发布, 丑媳妇要见公婆, 心情很忐忑 : P

都说 V2EX 是个做第一次分享的好地方, 看官们都很友善, 所以首先发在这里, 请大家提提意见, 不吝赐教.

另外, 既然是开源软件, 如果有同学感兴趣, 想参与开发的, 请随时联系我(fuzhen at maptalks.org)

最后按惯例求个 STAR~

29970 次点击
所在节点    分享创造
78 条回复
NullPoint
2017-11-02 09:24:37 +08:00
给楼主赞一个
fuzhenn
2017-11-03 19:34:35 +08:00
aleung
2017-11-18 11:22:11 +08:00
不错的项目!

这两天尝试将一个原来用 leaflet 的工具移植到 maptalks,发现文档上还是有些不够理想的地方:
* API document 的描述不够详细,特别是 options 的 type 只是 Object,不知道里面可以放什么,允许取值是什么
* Class 的方法、属性列表没有排序,找起来很费劲

Example 比较丰富,一定程度对 API 文档是补充,文档没有描述的就靠样例来猜了。

大部分 API 组织形式跟 leaflet 很类似,但又都有一点不一样,改起来好费劲啊,想放弃了。(当然这不算 maptalks 缺点)
bbsfoo
2017-11-23 01:08:10 +08:00
能不能加载百度地图?
fuzhenn
2017-11-24 00:58:54 +08:00
fuzhenn
2017-11-24 01:05:02 +08:00
@aleung 谢谢建议!
Class 的方法和属性是按照在源代码中的定义顺序组织的, 我再收集一下其他用户的意见,如果大家都觉得按字母排序更好,我就改成按首字母来排序。

关于构造函数的 options 里的设置和取值范围,文档中其实是有的,但定义在了累的 options 成员属性上的,比如[Map.#options]( https://maptalks.org/maptalks.js/api/0.x/Map.html#options), 不过你说的确实有道理,还是挪到构造函数的参数列表里更直观一些,我晚点会改一下。

以后欢迎在新项目里使用 maptalks,随时来提 ISSUE 和 PR,参与 maptalks 的开发 ^___^
bbsfoo
2017-11-24 02:43:54 +08:00
@fuzhenn 哇,真是厉害。近来可能会在工作中试用一下,谢谢你提供的工具。
fuzhenn
2017-11-24 12:50:24 +08:00
@bbsfoo 哈哈, 欢迎使用,有啥问题随时来提 issue 哈
https://github.com/maptalks/maptalks.js/
openlayers3
2018-01-18 13:07:32 +08:00
@fuzhenn 支持 WMTS 吗?
fuzhenn
2018-01-21 10:14:22 +08:00
@openlayers3 暂时不支持,但未来计划增加,具体请见这个链接:
https://github.com/maptalks/maptalks.js/issues/599
wzw
2018-04-08 12:05:24 +08:00
想知道 能不能 弄一个 wgs84 坐标的地图呀
lewhonly
2018-04-11 11:03:54 +08:00
大神,你好,能不能请教个问题,threejs 加载法国的三维建筑模型,我看您也是一个 mesh 一个 mesh 的加载的,为什么 FPS 这么高,能达到 60,我用 geometry.merge 方法才只能达到 40,求大神指导
fuzhenn
2018-04-20 20:57:42 +08:00
@wzw 如果你是指基于 wgs84 坐标的 4326 投影地图,示例在这里:
http://maptalks.org/examples/cn/tilelayer-projection/epsg4326/#tilelayer-projection_epsg4326
fuzhenn
2018-04-20 21:01:08 +08:00
@lewhonly 你是说 maptalks 的[three 插件]( https://github.com/maptalks/maptalks.three)吗?还是[biglayer 插件]( https://github.com/maptalks/maptalks.biglayer)? biglayer 是基于 webgl 原生写的,在性能上是做了一些优化。

至于为啥你自己的 three 程序速度会比较慢,你可以用 chrome 的 profile 工具,看看性能瓶颈在哪里
fuzhenn
2018-04-20 21:03:44 +08:00
呃,刚想起来 V2EX 不支持 md,上面提到的两个 maptalks 插件地址如下:
https://github.com/maptalks/maptalks.three
https://github.com/maptalks/maptalks.biglayer
cuipeng
2018-05-30 11:39:25 +08:00
可以作为 leaflet 的一款渐进式 3d 地图框架来用~
cuipeng
2018-05-30 11:49:53 +08:00
一个优化点,地图倾斜的时候 viewport 不会自动延展,而是基于原来屏幕的区域,边缘会虚化处理。最好跟 mapbox gl 一样,效果比较好
fuzhenn
2018-06-26 13:23:34 +08:00
@cuipeng
感谢你的回复!
边缘虚化范围是可以配置的,maptalks 中可以通过 maxVisualPitch 来调整虚化的角度,把它设成和 maxPitch 一样时,就和 mapbox-gl-js 一样的了。

默认情况下 maxVisualPitch 是 60,maxPitch 是 80,主要是因为 maptalks 的最大倾斜角度比 mapbox-gl-js 更大(目前最大到 60 度),角度很大时会有瓦片载入量过大的问题,为了优化性能,maptalks 有个很独特的 cascadeTile 优化功能,就是远处的瓦片改用上一级的,可以在保证视觉效果的前提下,有效减少瓦片数量(能够减少 50%)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/397193

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX