You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用flutter_map叠加ArcGIS WMTS图层与OpenStreetMap偏移不对齐求助

问题原因

  • 两个图层的瓦片Y轴坐标规范不一致:OpenStreetMap使用标准XYZ瓦片规范,Y轴从上到下计数,你用到的ArcGIS GEBCO等高线瓦片使用TMS规范,Y轴从下到上计数,两者Y轴完全翻转导致错位
  • ArcGIS瓦片地址没有配置{s}子域名占位符,额外添加的subdomains参数会导致请求地址拼接错误,进一步引发加载错位

修正后代码

Widget build(BuildContext context) {
  return MaterialApp(
    home: FlutterMap(
      options: MapOptions(
        center: LatLng(33.8, 9.5),
        zoom: 6.0,
        pinchZoomWinGestures: MultiFingerGesture.pinchZoom,
      ),
      layers: [
        // 底层:OpenStreetMap底图
        TileLayerOptions(
          urlTemplate: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
          subdomains: ['a', 'b', 'c'],
          tileProvider: NonCachingNetworkTileProvider(),
          backgroundColor: Colors.black,
        ),
        // 上层:ArcGIS GEBCO等高线图层
        TileLayerOptions(
          urlTemplate:
              "https://tiles.arcgis.com/tiles/C8EMgrsFcRFL6LrL/arcgis/rest/services/GEBCO_contours/MapServer/tile/{z}/{x}/{y}",
          // 开启TMS模式自动翻转Y轴坐标,对齐OSM瓦片规范
          tms: true,
          tileProvider: NonCachingNetworkTileProvider(),
          backgroundColor: Colors.transparent,
        ),
      ],
    ),
  );
}

补充说明

如果你使用的是flutter_map 4.0及以上版本,TileLayerOptions已废弃,需改为TileLayer组件直接传入参数,核心的tms: true配置保持不变即可。你使用的GEBCO等高线图层默认和OSM底图同为EPSG:3857(Web墨卡托)坐标系,无需额外调整坐标系参数。

内容的提问来源于stack exchange,提问作者Seiif Boyka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:57:03