地图开发
市面上有高德,百度属于常用的,以及小程序内置的腾讯地图,通常用这部分的功能,都需要申请对应的key,来进行使用,一般刚刚开始流量不大,到没什么,流量一大就需要付费。
如何解决这个问题,就只能使用开源的地图库,
WebGIS四大地图框架:Leaflet、OpenLayers、Mapbox、Cesium
四种框架如何选择的问题,3d需要首选,cesium,但对浏览器配置与显卡要求很高,吃内存。如果不是特别说明一般是不推荐使用它来做二维功能。
leaflet是老牌的二维内置支持wms 社区有插件也支持wmts,
目前使用mapbox是可以申请对应的key来使用图层,但一般会自己开发gis服务,来发布地图,也就是不需要key,通过使用对应的开源库Maplibre来开发二维。
地图的要素类似就是底图服务,瓦片,天地图,矢量图,配上经纬度的geojson格式数据,以及一些图片撒点,热力图外加图表echarts,轨迹,效果,水波纹,label等等。
底图服务可以使用天地图官网申请的地址,但对应的一般也有次数要求,通常使用geoserver 然后导入数据,生成,或者使用数据库,空间数据库 java 之类的,也可以使用第三方软件。二维的省市区通常数据是开源的
组件和地图的使用,框架与地图的结合,通常是引入原生的js库,然后封装一个基础地图功能组件,抛出一些对外的方法,来使用内部的功能,也可以根据常用的功能,来封装子组件,实现类似高德vue组件库那种形式,
一般这样就可以提高复用的效率,就涉及了,模块化的打包,市面上目前是流行umd esm 来使用,使用vite与webpack来打包。一般涉及的插件有时候不支持require,vite也许有很多问题,我通常是在webpack5里面或者4里面打包变成umd然后使用资源路径引入全局对象的方法,来兼容。
打包的话umd 与 esm格式其实都需要,rollup就可以解决这个问题,借助vite就可以,在组件库的版本与git的组合,使用pnpm与lerna,使用工作空间来解决问题,如果需要给内部使用,可以搭建私有的git以及私有的npm库地址,内部方便使用,如果是对外部,可以对内容加密。支持key之类的收费。等等
目前的生态地图其实都有可以找到对应的组件库,比如leaflet cesium,但都不是很灵活,所以自己的从头弄,需要花费时间,根据不同的需求
地图目前有echarts的二维那种,数据与视图的映射,使用符合geojson的地图数据,注册好使用的数据模型。然后结合图表的事件,点击来联动,有些会要求我们使用threejs来实现三d的地图,这个就涉及到复杂的三维投影数据转化。
额外的目前如果不使用内置的地图组件比如腾讯,那在小程序的使用做这些功能,就使用webview嵌入地图或者three,或者使用其他的比如纯js的页面,传一个token过去,然后业务都做在h5页面来解决这个问题。