开源WebGIS-相关知识
开源WebGIS-相关知识目录1. 开源的相关项目1.1 二维1.2 三维1.3 其他1.4 题外话2. 相关介绍1. 开源的相关项目1.1 二维【1】geoserver 不支持三维服务!【2】qgis【3】openlayes【4】leaflet【5】mapboxGL(半开源)-对应开源版本: maplibre【6】geonode 基于geoserv...
开源WebGIS-相关知识
目录
1. 开源的相关项目
1.1 二维
【1】qgis (也可生成矢量切片-本地pbf)
【2】tileserver-gl maptiler出品,栅格切片/矢量切片 server,只支持XYZ形式切片,maplibre/mapbox 加载很容易,不能直连postgis,都是本地文件(和本地生成的文件由nginx代理有什么区别呢?)
【3】geoserver 不支持三维服务!
【4】mapserver 适合专题图(只有二维),性能比geoserver强,WMS更好生成。mapscript 接口可以操作mapserver的.map文件(包含样式等),mapserver可以连接PostGIS,其python API可以创建指定样式(假如python为web后端,那么不需要mapserver,直接python mapscript生成wms的png图片返回给前端也可以-从postgis导出,很少这么操作!)。
MapServer MapManager mapserver样式.map的管理界面,可以手动设置样式,然后保存成.map文件,这样直接用mapserver代理服务,然后前端加载即可!适合静态不变的GIS数据服务。下载网址。
【5】leaflet
【6】mapboxGL(半开源,尽量不要用了,支持三维,从2.9版本开始呈现球globe,类似cesium)-对应开源版本: maplibre,优势:矢量切片,无球。
【7】openlayes(2D支持的很全面,且支持mapbox矢量切片,从v6开始支持3D,现在是v8版本,但是对于3dtiles或slpk三维支持较弱)
【8】tippecanoe 矢量切片制作工具
【9】maputnik 开源的类似mapbox studio的样式配置工具(配置完成后将style json给maplibre渲染即可)
【10】 geonode 基于geoserver,但是python开发,安装教程
【11】tilemaker 从OpenStreetMap 生成地图的软件-栅格切片
1.2 三维
【1】cesium 优势:三维,从1.99版本开始支持I3S(arcgis的三维数据标准),自身标准3dtiles。
1.3 其他
【1】Postgresql-PostGIS
【2】nginx 代理服务
【3】cesiumlab 将影像制作切片TMS/WMTS,osgb转3dtiles等
【4】maptalks 2D矢量切片和3D tiles等都支持,但是不是globe球,与ol+cesium类似。
1.4 题外话
很多都是用商业的arcgis-portal支持二三维服务,确实好用!然后国内的超图对标esri的arcgis全家桶!arcgis for javascript api 的文档和实现的功能都能满足90%的需求!
arcgis pro + portal 有WMS WMTS 矢量切片VTPK 三维SLPK。
XYZ切片(栅格、矢量):一般开源的都默认是3857-web墨卡托投影坐标系;谷歌先用,先火的。qgis、tippecanoe 生成XYZ切片只能是3857,具体墨卡托投影和web墨卡托投影的相关介绍:https://segmentfault.com/a/1190000011276788 介绍的不错。arcgis如果想生成标准的3857的XYZ缓存切片(需要自定义比例尺)!
具体投影坐标系的XYZ切片比例尺level查看(3857、4490、4326)网站:TODO
全球3857的XYZ切片分辨率、比例尺的计算代码(官方实际固定死的比例),3857采用的米;4326和4490采用的多是WMTS,而非XYZ,多用于区域切片。经纬度的切片计算方式需要将度和周长进行转换,然后重新计算,之前思考过,忘记了,暂时不考虑这么多,直接用官方定义好的参数即可!!!
import math
def calculate_web_mercator_lod(zoom_levels=range(0, 23)):
"""
计算Web墨卡托投影的LOD详细信息
为避免浮点数不一致 直接固定死 直接采用3857的全球墨卡托切片比例 分辨率
"""
# 地球半径(米)
earth_radius = 6378137
# 初始分辨率(级别0)
pi = math.pi
# initial_resolution = 2 * pi * earth_radius / 256
# 实际 周长 20037508.3427892 * 2 未采用pi计算
initial_resolution = 20037508.3427892 * 2 / 256
# 标准DPI(用于比例尺计算)
dpi = 96
results = []
for z in zoom_levels:
# 计算分辨率(米/像素)
resolution = initial_resolution / (2 ** z)
# resolution = round(resolution, 11)
# 计算比例尺(1:scale_denominator)
scale_denominator = resolution * dpi / 0.0254
# 计算赤道处切片宽度(米)
tile_width_meters = resolution * 256
results.append({
'zoom_level': z,
'resolution_m_per_pixel': resolution,
'scale_denominator': scale_denominator,
'tile_width_meters': tile_width_meters,
'approx_scale': f"1:{scale_denominator:,}"
})
return results
# 计算并显示所有级别
lods = calculate_web_mercator_lod()
for lod in lods:
print(f"z{lod['zoom_level']:2d} | "
f"分辨率: {lod['resolution_m_per_pixel']:8.11f} m/px | "
f"比例尺: {lod['approx_scale']}")
2. 相关介绍
开源的数据发布服务server:geoserver 只支持2维的,但也已经满足了很多的需求!tileserver-gl主要用于栅格切片/矢量切片,发布XYZ/TMS(好像不支持,具体查看官网)/WMTS服务,让mapbox/maplibre等加载。
对于数据不变化的栅格切片/矢量切片,可以采用nginx静态代理,然后采用mapbox等直接加载。也可用tileserver-gl代理矢量切片。
开源的webgis-js前端api:cesium、openlayers、leaflet、mapboxGL(maplibre)。cesium支持三维的很多功能,但是对于二维矢量(尤其是大量数据)采用geojson-kml等格式受到限制;openlayers只支持2维(wms-wmts-wfs)服务,leaflet较于openlayers轻巧,移动端更适合它。mapboxGL更改了GIS领域传统的矢量认知,支持海量的矢量切片,可视化效果酷炫,但是对于3维的服务支持功能较少。如果把mapboxGL与cesium结合 就可以 把arcgis-portal商业的pk掉。
数据库推荐使用postGIS,即使其他数据库也有类似的技术。
3. 相关教程
(0)WebGIS 系列
(1)Cesium教程 (1) 界面介绍-3dtiles加载-更改鼠标操作设置
(4)Cesium教程 (2) 点击元素高亮-地球旋转-搜索定位
(6)vue3 cesium安装配置教程(共5种方式-推荐第3-4种)
。。。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)