flutter_map中Marker地图缩小时定位不准问题求助
问题描述
我正在用flutter_map搭配OpenStreetMap瓦片替代Google Maps,目前除了地图缩小时Marker定位不准确(标记像是浮在地图上方而非精准贴合)外,其余功能正常。近景缩放时标记定位精准,但远景缩放时偏移明显。
我的Marker代码:
final markers = <Marker>[ Marker( width: 50, height: 50, point: LatLng(35.505733, 23.427344), builder: (ctx) => Image.asset('assets/maps/newLocation.png'), rotate: false, ), Marker( width: 50, height: 50, point: LatLng(35.166754, 24.109758), builder: (ctx) => Image.asset('assets/maps/currentLocation.png'), rotate: false, ), Marker( width: 50, height: 50, point: LatLng(35.387568, 25.091811), builder: (ctx) => Image.asset('assets/maps/oldLocation.png'), rotate: false, ), ];
flutter_map组件代码:
FlutterMap( mapController: mapController, options: MapOptions( minZoom: 2, maxZoom: 19, zoom: 11, keepAlive: true, center: widget.NeworUpdate == 'New' ? LatLng(defaultLat, defaultLong) : LatLng(widget.locationLat, widget.locationLong), onMapReady: () { // }, onPositionChanged: (position, hasGesture) { // }, ), children: [ TileLayer( urlTemplate: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', subdomains: ['a', 'b', 'c'], ), MarkerLayer( markers: markersList, rotate: false, ), ], );
不同缩放级别截图:
- 远景(偏移明显):

- 近景(定位精准):

我推测是flutter_map中遗漏了某些参数,请问这个问题能解决吗?
解决方案
这个问题是因为flutter_map的Marker默认锚点是中心位置,而地图标记(比如定位图标)通常需要底部中心对准坐标点。当地图缩放级别较低(远景)时,标记的尺寸相对地图来说更大,中心锚点导致的偏移就会被放大,看起来像浮在地图上方。
修改方法是给每个Marker添加anchor参数,将锚点设置为标记的底部中心:
final markers = <Marker>[ Marker( width: 50, height: 50, point: LatLng(35.505733, 23.427344), builder: (ctx) => Image.asset('assets/maps/newLocation.png'), rotate: false, // 设置锚点为底部中心 anchor: AnchorPos.align(AnchorAlign.bottom), ), Marker( width: 50, height: 50, point: LatLng(35.166754, 24.109758), builder: (ctx) => Image.asset('assets/maps/currentLocation.png'), rotate: false, anchor: AnchorPos.align(AnchorAlign.bottom), ), Marker( width: 50, height: 50, point: LatLng(35.387568, 25.091811), builder: (ctx) => Image.asset('assets/maps/oldLocation.png'), rotate: false, anchor: AnchorPos.align(AnchorAlign.bottom), ), ];
如果你的标记图标不是完全垂直居中的底部(比如图标底部有空白边距),可以用AnchorPos.exact()来设置精确的偏移量,比如:
anchor: AnchorPos.exact(25, 50), // x方向居中(50/2),y方向对齐底部(高度50)
这样修改后,无论地图缩放级别如何,标记的底部中心都会精准贴合坐标点,和Google Maps的表现一致。
内容的提问来源于stack exchange,提问作者Salar Azad
相关产品推荐
相关产品推荐

