SwiftUI中如何在MapKit地图上正确显示正负坐标
问题原因与解决方法
你的代码里存在重复使用纬度值作为经度的低级错误,这才是标记点跑到中东的根本原因,和负坐标本身无关——MapKit完全支持负经度(代表西经,比如美国加州就在西经范围)。
错误位置
两处关键代码都把longitude参数错误地传入了latitude的值:
- Marker的坐标初始化:
longitude: vineyard.location.coordinate.latitude - 地图区域的中心点初始化:
longitude: vineyard.location.coordinate.latitude
修正后的完整代码
struct VineyardMapView: View { @State var vineyard: Vineyard @State var mapCamera: MapCameraPosition = MapCameraPosition.automatic var body: some View { Map(position: $mapCamera) { Marker(coordinate: CLLocationCoordinate2D( latitude: vineyard.location.coordinate.latitude, longitude: vineyard.location.coordinate.longitude // 修正为longitude ), label: { Image(systemName: "mappin") }) } .mapStyle(.imagery) .frame(width: 350, height: 400) .clipShape(RoundedRectangle(cornerRadius: 25.0)) .onAppear { mapCamera = MapCameraPosition.region(MKCoordinateRegion( center: CLLocationCoordinate2D( latitude: vineyard.location.coordinate.latitude, longitude: vineyard.location.coordinate.longitude // 修正为longitude ), span: MKCoordinateSpan(latitudeDelta: 10, longitudeDelta: 10) )) } } } #Preview { VineyardMapView(vineyard: Vineyard("Jordan", CLLocation(latitude: 38.6562, longitude: -122.8438), "https://www.jordanwinery.com/")) }
额外说明
- 负经度(比如-122.8438)对应西半球,MapKit会正常解析,无需额外处理
- 如果需要调整地图缩放级别,修改
MKCoordinateSpan的latitudeDelta和longitudeDelta值即可:值越小,地图越放大;值越大,地图越缩小
内容的提问来源于stack exchange,提问作者JonGrimes20
相关产品推荐
相关产品推荐

