c# - Xamarin 表格和 map - 在 map 上获取坐标,创建路线?

标签 c# android ios xamarin xamarin.forms

我的应用程序使用最新版本的 Xamarin Forms。此应用程序与 map 紧密集成。 Android 和 iOS 是两个受支持的平台。

现在我可以实现两件事:

  1. 当我有坐标时在任何位置居中 map
  2. 添加自定义标记(图钉)

仍然需要以下功能(按重要性排序):

  1. 在 map 点击事件中获取坐标
  2. 获取坐标以响应某些带地址的搜索字符串
  3. 两点之间的路由(绘制路由线)
  4. 计算两点之间的时间/距离

我是 Xamarin 的新手,我检查了 Xamarin Forms Maps API,我发现没有办法用它来实现这 4 点。

我说的对吗? 是否有替代的 Xamarin Forms 包? 我可以使用适用于 Android/iOS 的 native Xamarin map 控件实现这些功能中的任何一个吗?

非常感谢任何信息或示例! 搜索和浏览论坛没有帮助。我找到了一些带有 Java 示例的 Google Maps API 解决方案,但我不知道如何在 Xamarin 中实现它。由于应用程序的很大一部分已经在 Xamarin 中实现,而且我已经习惯了 C#,所以我不想更改平台。

最佳答案

您将需要查找 native iOS 和 Android 实现来完成这项工作,但您应该使用 SAP 或 PCL 中的依赖项注入(inject)来调用 native 实现来满足您的需要。

*注意 - 这是为了提供有关如何进行此操作的一般概述,而不是复制粘贴实现。未实现开放 map ,也未实现有关如何或何时在共享代码中获取坐标的说明。

例子

在共享代码中-

interface IMapping
{
    public OpenMap(); 
    public Model<GeoPoint>GetLastTouchCoordinates();         
}

在安卓项目中-

//For use with Xamarin.Forms.DependencyService will not be necessary with other IoC containers if not using forms look up Tiny IoC, Unity or one of the other DI containers
[assembly: Xamarin.Forms.Dependency(typeof(YourNameSpace.Droid.YourClass))] 

public class GoogleMap : FragmentActivity, IMapping, IOnMapClickListener

{
 private GoogleMap mMap;
 private Point lastClickedPoint;

protected void OnCreate()
{
    base.OnCreate();
    setContentView(some map fragment layout)

    //set the map touch listener
}

private void handletouch()// implementation of IOnMapClickListener Interface
{
    //google how to get the coordinates in android on a map touch
    lastClickedPoint = new Point();
    lastClickedPoint.lat = args.lat;
    lastClickedPoint.long = args.long;
}

private Model<GeoPoint> GetLastTouchCoordinates()
{
    if(lastclickedPoint != null)
    {
    Model<Geopoint> gp = new Model<Geopoint>();
    gp.latitude = p.latitude;
    gp.longitude = p.longitude;
    return gp;
    }
    else
    {
      return Point with some indication that you have no point
    }

}
}

在共享代码中 --

现在使用它只需写这样的东西

DependencyService.Get<IMapping>.OpenMap()
DependencyService.Get<IMapping>.GetLastTouchCoordinates()

链接到有关跨平台代码中的依赖注入(inject)的更多详细信息 http://adventuresinxamarinforms.com/2014/11/17/creating-a-xamarin-forms-application-part-4-dependency-injection/

关于c# - Xamarin 表格和 map - 在 map 上获取坐标,创建路线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28087381/

相关文章:

android - 具有 Activity 和 Fragments 的 ViewModel 粒度

android - ListView 项目不会停留 "selected"

android - Android模拟器可以访问PC硬盘中的文件吗?

c# - 如何调试 PayPalCoreSDK IPN 验证失败?

c# - 观察 sql 数据库中的表新记录

ios - UIAppearance 代理与 AppearanceWhenContainedIn 相关的问题

ios - 检查 UITableViewCell 是否完全可见的最佳方法

模拟器 : llvm-gcc-4. 2 的 iPhone 应用程序编译失败,退出代码为 255

c# - 碰撞器调用 OnTriggerExit 未标记为触发错误 Unity

c# - 如何从整数中分离出四位并将它们减少到尽可能低的数量?