首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
V2EX  ›  分享创造

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

  fuzhenn · 2017-10-12 22:26:36 +08:00 · 19479 次点击
这是一个创建于 732 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

项目地址是:

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

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

  • 二三维一体化地图, 通过二维地图的旋转 /倾斜增加三维视角
  • 插件化设计, 能与其他图形库结合, 开发各种二三维效果, 例如 echarts/d3/THREE 等
  • 很认真的优化了绘制性能
  • 很重视测试, 有接近 1.5K 个单元测试用例, 所以稳定性还不错, 已经应用在很多大大小小的系统上了

以下是一段 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~

78 回复  |  直到 2018-06-26 13:23:34 +08:00
    1
lyog   2017-10-12 22:35:10 +08:00 via Android   ♥ 1
👍厉害,已 star
    2
lyog   2017-10-12 22:42:14 +08:00 via Android
不过我觉得楼主缺一个美工😂,还有,百度底图挂掉了
    3
megachweng   2017-10-12 22:45:27 +08:00 via iPhone
感谢分享
    4
fuzhenn   2017-10-12 22:49:07 +08:00
@lyog maptalks.org 是 https 的, 百度的底图文件不支持 https.. 所以...

确实木有美工, 求介绍 : (
    5
fo2w   2017-10-12 22:55:29 +08:00   ♥ 1
好想把 lz 吸收进团队, 就是不知道有没有结束自由工作的想法...
    6
AlwaysBee   2017-10-12 23:08:59 +08:00
太厉害了
    7
tvallday   2017-10-12 23:26:18 +08:00
4 年这么长时间?怎么熬过来的?地图引擎需要很多算法优化的,如果真能实际应用那是相当厉害。楼主有没有对比过 Mapbox ?这个公司很多高手。
    8
fuzhenn   2017-10-12 23:37:40 +08:00   ♥ 1
@tvallday 是的! mapbox 很多大神, 它目前是开源 GIS 领域里冉冉升起的新星, 这样的大腿不得不抱, 所以我在 maptalks 里采用了不少 mapbox 的样式标准和数据规范(可以在 maptalks.js 的 github 里搜索 mapbox)

我给 maptalks 主要定位于政府 /企业项目开发, mapbox 更偏服务(类似谷歌地图, 百度地图), 所以两者在定位上是互补的, 我也专门开发了 mapbox-gl-js 插件用来调用他们的服务( https://github.com/maptalks/maptalks.mapboxgl).
    9
jjplay   2017-10-13 00:02:13 +08:00
很棒,会火!
    10
ashong   2017-10-13 01:05:21 +08:00
确实不错, 顶上去
    11
ashong   2017-10-13 01:14:09 +08:00
没看到用的什么数据, 如何自定义数据?
    12
ashong   2017-10-13 01:16:21 +08:00
不好意思, 看到了用的是 carto
    13
stzz   2017-10-13 09:03:26 +08:00
自由工作,很强
    14
sliwey   2017-10-13 09:19:59 +08:00
膜拜大佬!已 star~
    15
Rico   2017-10-13 09:38:18 +08:00
必须赞!作为 GISer 的我觉得楼主功力深厚,能实现媲美 OpenLayers3 和 ArcGIS For Javascript API 的库,厉害!
    16
Rico   2017-10-13 09:51:20 +08:00
简单看了一下,好像矢量切片没有?另外有个想法,如果做个 MapTalk 的 React 组件库会降低使用门槛,有更多的人使用。愿意一起搞,如果楼主也有这个想法可以联系我。另外楼主不是科班 GIS 能做出这个真心厉害!
    17
sobigfish   2017-10-13 09:57:17 +08:00
厉害,(外行)要做个本地数据 室内地图(+路径导航?)的话 请问需要哪些 API 可以完成
谢谢
    18
fuzhenn   2017-10-13 10:23:12 +08:00
@Rico 哈哈, 来一起玩, 发个邮件给我吧(邮箱见正文最后). 你有啥想法都可以噢, 我会给你发 pull request~
对了, 矢量切片的库正在开发, 开发好了会做成个插件开源出来.
    19
fuzhenn   2017-10-13 10:27:31 +08:00   ♥ 2
@sobigfish 这个问题比较复杂, 哈哈, 涉及到前端地图渲染, 数据处理和导航算法
maptalks 只是前端地图渲染, 没有路径导航功能, 渲染室内地图是可以的, 晚点我去 examples 里增加一个室内地图的例子 po 回来.

不知道你的项目是 pc 端还是移动端的, 路径导航可以看看这个库:
https://github.com/anvaka/ngraph.path
前几天刚在 twitter 上看到的, 蛮惊艳的
    20
droiz   2017-10-13 10:44:48 +08:00
滋瓷!!!
    21
Phariel   2017-10-13 10:55:54 +08:00
吼啊!滋瓷!已 Star !
    22
Rico   2017-10-13 11:34:58 +08:00   ♥ 1
@fuzhenn OK !
@sobigfish 如果是 OL3 可以 配合 AStar 算法或 Dijkstra 算出路径加上静态图片加载就可以实现了 http://openlayers.org/en/latest/examples/static-image.html。
    23
songjiaxin2008   2017-10-13 11:44:30 +08:00
牛逼
    24
gooin   2017-10-13 11:59:47 +08:00
支持支持,已 star
    25
ctsed   2017-10-13 12:29:20 +08:00 via Android
dalao 支持热力图吗
    26
xcold   2017-10-13 12:59:38 +08:00
已支持~
    27
puppychen   2017-10-13 13:05:10 +08:00
giser 表示支持,已 star。
    28
fuzhenn   2017-10-13 13:29:21 +08:00
感谢楼上各位大佬!


@ctsed 滋瓷的, 还有其他一些插件: https://maptalks.org/plugins.html
    29
lblt102   2017-10-13 14:03:33 +08:00
支持一下
    30
xwhxbg   2017-10-13 14:38:28 +08:00
nice,支持一波
    31
wangxiaoer   2017-10-13 14:49:48 +08:00 via Android
最大的竟争对手是 leaflet open layers ? 你把 Mapbox 置于何地
    32
fuzhenn   2017-10-13 15:12:55 +08:00
@wangxiaoer 不敢和大佬(mapbox)竞争, 哈哈.
maptalks 的定位和 mapbox 差异还是蛮大的, 基本上用 mapbox 的不会考虑别的库. 但很多项目也不会考虑用 mapbox
    33
zado   2017-10-13 16:33:24 +08:00
太好了,有中文文档,这个我必须要支持!
    34
ggbond1989   2017-10-13 18:00:41 +08:00
官网全英文的,很国际化啊,支持~
    35
xieguanglei   2017-10-13 18:16:44 +08:00   ♥ 1
厉害了,大佬!

冒昧地问下,有考虑结束自由职业生涯吗?如果有的话,有考虑来阿里吗?如果有考虑的话,能否跟我联系呢(因为没有找到你的邮箱,貌似 V2 没法发私信)?

我的邮箱是 xieguanglei#hotmail.com 。如果无意的话,请无视我吧!冒昧了!
    36
fuzhenn   2017-10-13 18:33:41 +08:00   ♥ 1
@xieguanglei 谢谢谢谢, 我的邮箱是 fuzhen#maptalks.org, 不过我已经散漫惯了, 暂时没有计划结束自由职业的生活 : P
    37
weloveayaka   2017-10-13 19:41:45 +08:00   ♥ 2
有没有 donate 渠道?
    38
imn1   2017-10-13 20:35:10 +08:00
五体投地
    39
dyxang   2017-10-13 20:54:30 +08:00 via Android
有没有 demo ?
    40
fuzhenn   2017-10-13 21:50:38 +08:00
    41
cisisustring   2017-10-13 22:24:36 +08:00 via Android
太牛了,点赞
    42
df4VW   2017-10-13 23:30:52 +08:00
@xieguanglei 难得有会说话的阿里 hr..
    43
xieguanglei   2017-10-14 06:51:48 +08:00
@df4VW 然而不是 HR。。。
    44
rswl   2017-10-14 17:28:30 +08:00
太强了 速度也快
    45
dd0754   2017-10-14 23:00:26 +08:00
膜拜大佬...
    46
fuzhenn   2017-10-16 00:51:43 +08:00   ♥ 1
@sobigfish 做了个足球场的例子, 室内地图做起来大致同理, 供参考~

https://maptalks.org/examples/cn/tilelayer-projection/identity/#tilelayer-projection_identity
    47
HelloAmadeus   2017-10-17 11:32:04 +08:00
太厉害了,star 关注一下
    48
SparkWong   2017-10-18 14:15:36 +08:00
来给 zhen 神捧个场~
    49
fuzhenn   2017-10-18 23:50:55 +08:00
哈哈, 因为这篇贴, maptalks 被顶到了 github trending 总榜, 特地回来感谢一下 V2EX 的同学们!
    50
spring5413   2017-10-20 19:03:21 +08:00
好厉害 已 star
    51
fuzhenn   2017-10-20 23:14:06 +08:00
    52
1847bell   2017-10-24 10:31:17 +08:00
非常喜欢!已 Star
    53
wucancc   2017-10-24 13:56:33 +08:00
已 star,非常厉害。
作为 GIS 从业者只能膜拜了。
不过开源项目,怎么才能让政府把经费支出呢,不支出怎么才能申请更多经费呢,哈哈哈,开个玩笑。
还没有细致研究,不知道地图样式这里是怎么处理的。
请问后台数据服务楼主用的是什么呢?除了 GeoServer,楼主有没有推荐呢。
赞楼主!楼主可以组建战队搞个大新闻了,哈哈。
    54
fuermosi777   2017-10-25 06:23:02 +08:00
人才
    55
a6377508   2017-10-25 13:00:40 +08:00
膜拜
    56
fuzhenn   2017-10-26 22:39:36 +08:00
@1847bell @fuermosi777 @a6377508 谢谢!

@wucancc 感谢同行! 对于经费, maptalks 不会用来盈利的, 哈哈, 只是希望获得更多同行的认可. 关于后台数据服务, 我们用的是自己开发的服务软件, 类似 geoserver, 但会追踪一些比较新的技术, 比如矢量瓦片等等.
    57
wucancc   2017-10-27 09:24:11 +08:00
@fuzhenn “自己开发的服务软件”,OMG,看来是要搞个大新闻啊。赞!
作为 GIS 小作坊,目前的巨量数据用 GeoServer 有点无法满足需求了,用主流商业公司产品又太贵。在苦苦寻找中。
期待楼主大作!
    58
fuzhenn   2017-10-28 21:17:42 +08:00
哈哈, 谢谢 @wucancc 的鼓励
    59
dangyuluo   2017-10-29 11:29:59 +08:00
非常欣赏,无论是作品还是这种生活。
    60
fiht   2017-10-29 17:42:09 +08:00
给楼主赞一个,示例十分详细👍
    61
NullPoint   2017-11-02 09:24:37 +08:00 via Android
给楼主赞一个
    62
fuzhenn   2017-11-03 19:34:35 +08:00
    63
aleung   2017-11-18 11:22:11 +08:00
不错的项目!

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

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

大部分 API 组织形式跟 leaflet 很类似,但又都有一点不一样,改起来好费劲啊,想放弃了。(当然这不算 maptalks 缺点)
    64
bbsfoo   2017-11-23 01:08:10 +08:00
能不能加载百度地图?
    65
fuzhenn   2017-11-24 00:58:54 +08:00
    66
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 的开发 ^___^
    67
bbsfoo   2017-11-24 02:43:54 +08:00
@fuzhenn 哇,真是厉害。近来可能会在工作中试用一下,谢谢你提供的工具。
    68
fuzhenn   2017-11-24 12:50:24 +08:00
@bbsfoo 哈哈, 欢迎使用,有啥问题随时来提 issue 哈
https://github.com/maptalks/maptalks.js/
    69
openlayers3   2018-01-18 13:07:32 +08:00
@fuzhenn 支持 WMTS 吗?
    70
fuzhenn   2018-01-21 10:14:22 +08:00
@openlayers3 暂时不支持,但未来计划增加,具体请见这个链接:
https://github.com/maptalks/maptalks.js/issues/599
    71
wzw   2018-04-08 12:05:24 +08:00
想知道 能不能 弄一个 wgs84 坐标的地图呀
    72
lewhonly   2018-04-11 11:03:54 +08:00
大神,你好,能不能请教个问题,threejs 加载法国的三维建筑模型,我看您也是一个 mesh 一个 mesh 的加载的,为什么 FPS 这么高,能达到 60,我用 geometry.merge 方法才只能达到 40,求大神指导
    73
fuzhenn   2018-04-20 20:57:42 +08:00
@wzw 如果你是指基于 wgs84 坐标的 4326 投影地图,示例在这里:
http://maptalks.org/examples/cn/tilelayer-projection/epsg4326/#tilelayer-projection_epsg4326
    74
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 工具,看看性能瓶颈在哪里
    75
fuzhenn   2018-04-20 21:03:44 +08:00
呃,刚想起来 V2EX 不支持 md,上面提到的两个 maptalks 插件地址如下:
https://github.com/maptalks/maptalks.three
https://github.com/maptalks/maptalks.biglayer
    76
cuipeng   2018-05-30 11:39:25 +08:00
可以作为 leaflet 的一款渐进式 3d 地图框架来用~
    77
cuipeng   2018-05-30 11:49:53 +08:00
一个优化点,地图倾斜的时候 viewport 不会自动延展,而是基于原来屏幕的区域,边缘会虚化处理。最好跟 mapbox gl 一样,效果比较好
    78
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%)
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4264 人在线   最高记录 5043   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 27ms · UTC 08:53 · PVG 16:53 · LAX 01:53 · JFK 04:53
♥ Do have faith in what you're doing.