c# - 如何将屏幕 X 和 Y 转换为纬度和经度
问题描述
我正在构建一个简单的应用程序,用户可以在其中徒手绘制 Google 地图并在其中选择标记。我正在使用 Xamarin Forms 来构建这个应用程序。
我尝试了几件事来在谷歌地图上徒手绘制,但在 webview 内的移动屏幕上它不起作用。
所以,我使用了一个 Xamarin 插件在屏幕中生成谷歌地图,但是这个插件 https://github.com/amay077/Xamarin.Forms.GoogleMaps
也没有徒手绘图,但它有一个具有给定位置的折线绘图工具。
我的想法是,如果我可以在屏幕上重叠一个图层并在该图层上徒手使用 darw 并将这些屏幕点转换为 Maps Lat 和 Lon,然后可以将这些 Lat/Lon 传递给 Map 插件,以便为我在地图上绘制折线。
为了在地图上绘图,我使用了另一个 Xamarin 表单 SkiaSharp 插件,并且我已将其背景设置为透明,因此,它看起来就像我们只是在直接在 Map 上绘图。
所以,直到这里一切都很完美,我也得到了地图各方面的纬度/经度。
所以我有
- 屏幕上的 SkiaSharp 叠加在 Google 地图上,这使得在该图层上绘制完美,地图在背景中完全可见,看起来就像我们在地图上绘制
- 我有地图所有四个侧面的纬度/经度(上、左、右、下)
- 在 SkiaSharp 屏幕上绘图时我有积分
问题是我不知道如何转换
我在这里找到的解决方案都只与android或基于网络的google maps api有关,
我需要一些想法如何将我的屏幕点转换为谷歌纬度/经度
我的想法很少,但不确定它们将如何工作
也许我们可以使用 xamarin.forms.maps,并构建一些中间件来在屏幕点和 xamarin.forms.maps 之间进行通信以获取坐标,这在 iOS 的情况下也可能会有所帮助,因此,我们将使用默认 Maps 获取坐标,并将这些坐标传递给谷歌地图插件以在地图上创建折线
也许是一个基于服务器的 API,我们将屏幕大小、点、地图 4 边坐标传递给该 API,并且该 API 可以针对它们返回纬度/经度?
或者应用程序内的一些公式将 X,Y 点转换为坐标?
解决方案
Google Maps 有一个 Projection 类,该类具有可用于将屏幕坐标转换为 Lat/Long 的方法(如果需要,还可以返回):
yourGoogleMapInstance.Projection.FromScreenLocation(APointObject)
iOS 的 MapKit 也有类似的功能(C# MKMapView.ConvertPoint
= ObjC convertPoint:toCoordinateFromView:
):
推荐阅读
- reactjs - 选择项目并将所选项目转移到另一个页面
- python - 数据长度超过 65536 个字符的 Pandas 数据框 to_sql
- git - 更改 Sourcetree 中的 LFS 大小检测
- ag-grid - ag-grid 企业服务器端如何设置 agSetColumnFilter 过滤器复选框
- r - 如何将 4 个图形组合成一张图像
- javascript - 如何使用 Webpack 对 Node.js 模块进行代码拆分?
- php - php抱怨抽象方法没有实现,apache重新启动修复了一段时间
- python - 交换元素python
- vb.net - 作为服务运行的 Windows 窗体遇到错误 1053,但仍然可以工作一段时间?
- javascript - Jquery水平滚动并在每个第三个子元素上停止