首页 > 解决方案 > 如何将屏幕 X 和 Y 转换为纬度和经度

问题描述

我正在构建一个简单的应用程序,用户可以在其中徒手绘制 Google 地图并在其中选择标记。我正在使用 Xamarin Forms 来构建这个应用程序。

我尝试了几件事来在谷歌地图上徒手绘制,但在 webview 内的移动屏幕上它不起作用。

所以,我使用了一个 Xamarin 插件在屏幕中生成谷歌地图,但是这个插件 https://github.com/amay077/Xamarin.Forms.GoogleMaps

也没有徒手绘图,但它有一个具有给定位置的折线绘图工具。

我的想法是,如果我可以在屏幕上重叠一个图层并在该图层上徒手使用 darw 并将这些屏幕点转换为 Maps Lat 和 Lon,然后可以将这些 Lat/Lon 传递给 Map 插件,以便为我在地图上绘制折线。

为了在地图上绘图,我使用了另一个 Xamarin 表单 SkiaSharp 插件,并且我已将其背景设置为透明,因此,它看起来就像我们只是在直接在 Map 上绘图。

所以,直到这里一切都很完美,我也得到了地图各方面的纬度/经度。

所以我有

  1. 屏幕上的 SkiaSharp 叠加在 Google 地图上,这使得在该图层上绘制完美,地图在背景中完全可见,看起来就像我们在地图上绘制
  2. 我有地图所有四个侧面的纬度/经度(上、左、右、下)
  3. 在 SkiaSharp 屏幕上绘图时我有积分

问题是我不知道如何转换

我在这里找到的解决方案都只与android或基于网络的google maps api有关,

我需要一些想法如何将我的屏幕点转换为谷歌纬度/经度

我的想法很少,但不确定它们将如何工作

  1. 也许我们可以使用 xamarin.forms.maps,并构建一些中间件来在屏幕点和 xamarin.forms.maps 之间进行通信以获取坐标,这在 iOS 的情况下也可能会有所帮助,因此,我们将使用默认 Maps 获取坐标,并将这些坐标传递给谷歌地图插件以在地图上创建折线

  2. 也许是一个基于服务器的 API,我们将屏幕大小、点、地图 4 边坐标传递给该 API,并且该 API 可以针对它们返回纬度/经度?

  3. 或者应用程序内的一些公式将 X,Y 点转换为坐标?

标签: c#xamarinxamarin.forms

解决方案


Google Maps 有一个 Projection 类,该类具有可用于将屏幕坐标转换为 Lat/Long 的方法(如果需要,还可以返回):

yourGoogleMapInstance.Projection.FromScreenLocation(APointObject) 

iOS 的 MapKit 也有类似的功能(C# MKMapView.ConvertPoint= ObjC convertPoint:toCoordinateFromView:):


推荐阅读