跳到主要内容

球面线、面与统一查询

共同 GeoJSON 的 circle、line、fill 可以保留图源和图层后切换球面,并在球面中创建、排序、改色、筛选和显隐。浏览器主线程、严格 Worker、原生动态库脚本和桌面脚本使用同一接口。方法命名参考 MapLibre Map API,样式参数参考 MapLibre 图层规范;实现由 SqsMap 自研。

import { map } from 'sqsmap';
const capabilities = await map.sqs.getCapabilities();
if (!capabilities.globeGeoJsonSurfaceLayers || !capabilities.globeGeoJsonSurfaceQueries)
  throw new Error('当前版本不支持球面线和面');
map.setProjection({ type: 'globe' });
map.addSource('route-data', { type: 'geojson', data: {
  type: 'Feature', id: 7, properties: { name: '示例路线' },
  geometry: { type: 'LineString', coordinates: [[179, 38], [183, 38]] }
}});
map.addLayer({ id: 'route', type: 'line', source: 'route-data', paint: {
  'line-color': '#0080ff', 'line-width': 12
}});
await map.sqs.flush({ render: true });
const point = await map.project([181, 38]);
const hits = await map.queryRenderedFeatures(point, { layers: ['route'] });
console.log(hits);

完整共同脚本 · 完整 HTML/CSS/JavaScript 示例。示例的显隐、改色、排序、线宽、投影切换、点击和销毁均由公开接口实现,按钮状态从实际地图读取;复制整份文件与对应 SDK 文件,并通过 HTTP 服务运行。示例数据由本例提供,无外部底图;接入外部地图后仍须显示来源要求。

原始经纬度直接进入球面投影,不先夹到墨卡托纬度范围。多边形保留孔洞、MultiPolygon 和顶层集合身份;极区及 181° 等副本使用原始坐标。GeoJSON 边按给定经纬度线性插值,日期线跨越应使用连续副本(例如179到183)或已切开的几何;不会把170到-170自动改成最短大圆路径。路径曲率按逻辑像素误差细分,背面在球面可见边界裁剪,线宽和 fill-outline-color 的1像素边界随DPR换算。

绘制与查询使用同一可见三角形,支持点与矩形、图层限制、筛选、要素状态和上层优先顺序;查询保留原始属性、完整父几何、source/layer实例与历史信息。移动图层改变绘制与命中顺序,改色不修改源属性。混合图源的 line 图层也会描边 Polygon;只画路线时,可加 filter: ['==', ['geometry-type'], 'LineString']。

这是地球表面的二维样式覆盖层,尚不包含任意三维对象遮挡、带高度几何、球面地形或符号/挤出层。它不把不支持的 paint/layout 当成成功:球面线目前支持 line-color、line-width、line-opacity;端帽采用 butt,转角沿用共同圆形连接;虚线/渐变及可配置端帽/连接仍待接通。

每次球面线/面绘制或查询共享50万投影/三角形工作项,原始覆盖层合计最多10万坐标;超限整体报 RESOURCE_LIMIT。查询原有1000项/8 MiB输出及10万显示要素限制继续适用。可缩小数据、区域或图层后重试,禁止静默截断。当前帧回执核对姿态、密度与图形内容,旧图形不能证明新排序或新颜色已绘制。

同一19项脚本在原生单次/持续入口、浏览器主线程/严格Worker与DPR1/2、Linux桌面DPR2/1.25执行;孔洞、极区、日期线、背面与预算模型另验。实际像素验证颜色、孔洞、线宽和排序,全部GPU证据来自软件后端。Windows/macOS、真实移动设备和正式发行仍另验。

参见球面圆点、指针事件和共同地图参考。