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

Posted

技术标签:

【中文标题】如何将屏幕 X 和 Y 转换为纬度和经度【英文标题】:How to convert screen X and Y into Lat & LOn 【发布时间】:2019-11-12 09:53:38 【问题描述】:

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

我尝试了一些在谷歌地图上徒手绘制的东西,但在 webview 内的移动屏幕上它不起作用。

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

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

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

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

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

所以,我有

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

问题是我不知道如何转换

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

我需要了解如何将屏幕点转换为谷歌纬度/经度

我有一些想法,但不确定它们将如何工作

    1234563使用默认地图获取坐标,并将这些坐标传递给谷歌地图插件以在地图上创建折线

    也许是基于服务器的 API,我们将屏幕尺寸、点、地图 4 面坐标传递给该 API,该 API 可以针对它们返回纬度/经度?

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

【问题讨论】:

【参考方案1】:

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

yourGoogleMapInstance.Projection.FromScreenLocation(APointObject) 
https://developers.google.com/android/reference/com/google/android/gms/maps/model/LatLng.html

ios的MapKit也有类似的功能(C#MKMapView.ConvertPoint=ObjCconvertPoint:toCoordinateFromView:):

https://docs.microsoft.com/en-us/dotnet/api/mapkit.mkmapview.convertpoint?view=xamarin-mac-sdk-14

【讨论】:

太棒了。我必须记住这一点 但是我使用插件加载谷歌地图,我没有使用原生地图,我不确定这个解决方案是否也适用于我的情况? 我可以使用透明图层在地图上完美绘制,将这些屏幕点转换为纬度的问题 @Creative 有什么问题? 我完全不知道如何从这里开始,我如何将我的屏幕X和Y转换为坐标?

以上是关于如何将屏幕 X 和 Y 转换为纬度和经度的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中将纬度和经度转换为 x,y?

PHP - 将纬度和经度转换为 x 和 y 坐标,而不使用任何库

将游戏的 x,y 坐标转换为 Google 地球纬度/经度

从纬度,经度转换为x,y

在 iPhone 上将经度/纬度转换为 x/y

将 X,Y 转换为纬度经度到 ESRI shapefile