如何将屏幕X和Y转换为纬度和经度

时间:2019-11-12 09:53:38

标签: c# xamarin xamarin.forms

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

我已经尝试过一些方法来在Google Map上徒手画图,但是在webview的手机屏幕上却无法正常工作。

因此,我使用Xamarin插件在屏幕上生成Google地图,但是该插件 https://github.com/amay077/Xamarin.Forms.GoogleMaps

也没有徒手绘制,但是它具有指定位置的折线绘制工具。

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

对于在地图上绘制,我正在使用另一个Xamarin表格SkiaSharp插件,并且我将其背景设为透明,因此,它看起来就像我们在直接在Map上绘制一样。

所以,到这里为止一切都很完美,我也得到了Map各个方面的纬度/经度。

所以,我有

  1. SkiaSharp在屏幕上覆盖了Google地图,这使该图层上的绘图变得完美,并且背景在后台完全可见,看起来就像我们在Map上绘图一样
  2. 我在地图的所有四个侧面(上,左,右,下)都有纬度/经度
  3. 我在SkiaSharp屏幕上绘图时有几点提示

问题是我不知道如何转换

我在这里找到的解决方案都与仅基于Android或基于Web的Google Maps api相关,

我需要知道如何将屏幕显示点转换为Google Lat / Lon

我的想法不多,但不确定如何工作

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

  2. 也许是基于服务器的API,我们可以向其传递屏幕尺寸,点数,地图4个侧面坐标,并且该API可以向我们返回纬度/经度吗?

  3. 还是应用程序内有一些公式可以将X,Y点转换为坐标?

1 个答案:

答案 0 :(得分:2)

Google Maps有一个Projection类,该类具有可用于将屏幕坐标转换为纬度/经度(并在需要时返回)的方法:

yourGoogleMapInstance.Projection.FromScreenLocation(APointObject) 

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