dailiboy 2024-02-18 12:50 采纳率: 14.3%
浏览 13
已结题

Xamarin.Forms 用百度地图的DEMO

我现在下载了BaiduMap 地图和定位在Xamarin.Android/Xamarin.Forms中的7.1,然后成功的转成了DLL文件,在项目中进行了引用。
但是我现在不知道怎么才能显示地图,标注定位和获取定位。
请问有没有Xamarin.Forms 用百度地图的DEMO,我用的是VS2019。 请帮帮忙。提供一个使用百度地图7.0以上版本的使用Demo。
我的开发环境是:
Visual Studio 2019,新建的Xamarin.Forms项目,包括安卓和苹果端。我现在主要是需要解决安卓端的这个问题。
使用场景:
1.获取LBS定位,并实时上传。
2.加载地图,获取LBS定位,并在地图上指针默认指定现在的位置,可以调整定位地址。获取定位的地址并上传
3.计算定位之间的距离。
希望能够有Demo提供,并说明一下,感谢。

  • 写回答

24条回答 默认 最新

  • 撸码撸到抽筋 2024-02-19 13:44
    关注

    您可以根据以下步骤来使用百度地图的7.0以上版本在Xamarin.Forms中显示地图、标注定位和获取定位:

    1. 在Visual Studio 2019中创建一个新的Xamarin.Forms项目,包括安卓和苹果端。

    2. 在Android项目中的MainActivity.cs文件中添加以下代码,以初始化百度地图SDK:

    using Com.Baidu.Mapapi;
    using Com.Baidu.Mapapi.Map;
    
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // 初始化百度地图SDK
        SDKInitializer.Initialize(ApplicationContext);
    }
    
    1. 在Android项目中的MainActivity.cs文件中添加以下代码,以加载地图和获取定位:
    using Com.Baidu.Mapapi.Location;
    using Com.Baidu.Mapapi.Map;
    
    protected override void OnResume()
    {
        base.OnResume();
        // 创建地图控件
        MapView mapView = new MapView(this);
        // 将地图控件添加到布局中
        SetContentView(mapView);
        
        // 开启定位图层
        mapView.Map.SetMyLocationEnabled(true);
        // 获取定位
        LocationClient locationClient = new LocationClient(ApplicationContext);
        locationClient.RegisterLocationListener(new BDLocationListenerImpl(mapView.Map));
        locationClient.Start();
    }
    
    protected override void OnPause()
    {
        base.OnPause();
        // 停止定位
        mapView.Map.SetMyLocationEnabled(false);
        mapView.OnPause();
    }
    
    protected override void OnDestroy()
    {
        base.OnDestroy();
        // 销毁地图
        mapView.OnDestroy();
    }
    
    public class BDLocationListenerImpl : BDLocationListener
    {
        private BaiduMap _map;
    
        public BDLocationListenerImpl(BaiduMap map)
        {
            _map = map;
        }
    
        public override void OnReceiveLocation(BDLocation location)
        {
            if (location == null || _map == null)
                return;
    
            // 获取定位的经纬度
            double latitude = location.Latitude;
            double longitude = location.Longitude;
            
            // 在地图上添加标注
            LatLng point = new LatLng(latitude, longitude);
            BitmapDescriptor bitmap = BitmapDescriptorFactory.FromResource(Resource.Drawable.icon_marka);
            OverlayOptions option = new MarkerOptions()
                .InvokePosition(point)
                .InvokeIcon(bitmap);
            _map.AddOverlay(option);
            
            // 将地图中心移动到定位位置
            MapStatusUpdate update = MapStatusUpdateFactory.NewLatLng(point);
            _map.SetMapStatus(update);
        }
    }
    
    1. 在Android项目中的AndroidManifest.xml文件中添加以下代码,以申请必要的权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    

    请注意,以上代码仅提供了加载地图和获取定位的示例,您还需要根据您的具体需求来实现上传定位和计算定位之间的距离的功能。

    希望这能帮助到您!

    评论

报告相同问题?

问题事件

  • 系统已结题 2月26日
  • 创建了问题 2月18日

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号