どのようにXamarinを使用してOSMマップで現在のGPS位置を表示します.要点


The Syncfusion Maps control for Xamarin 外部イメージサービスの組み込みサポートOpenStreetMap ( OSM )とBing Map sは、ShapeFilesを使用せずに、衛星、空中、通り、および他の地図画像タイルを可視化します.ビングマップとOSMとは別に、また、などの他のマッププロバイダからマップをレンダリングすることができますGoogle Maps and TomTom .
このブログの詳細に入る前に、次の2つの有用な機能を理解する必要がありますXamarin.Essentials :

  • Geolocation : デバイスの現在の地理位置座標(緯度と経度)を取得します.

  • Geocoding : アドレス(ユーザ読み込み可能)を位置座標に変換します.
  • この記事では、どのようにマークすることを学ぶGPS OSM(地図、Bing、Googleなどの任意の地図サービスプロバイダを使用することができます)を使用してマップコントロールでgeolocation サポート、およびアドレスを使用してアドレスから検出された場所を表示する方法geocoding サポート.
    注: Xamarinのジオロケーション機能にアクセスします.要点、これを参照してくださいlink プラットフォーム固有の手順を見つけるには
    始めましょう!

    ディスプレイデバイスの現在のGPS位置


    SyncFusion Xamarin Mapコントロールを使用して、OSMのデバイスの現在のGPS位置を表示するには、次の手順に従います

    ステップ1 :マップコントロールの初期化


    まず、xamarinマップを作成する必要があります.SfMaps ) OSM画像層による制御OSM オープンマップの下で使用することができるマッパーのコミュニティによって構築された世界地図です.
    マップコントロールは、OSMサービスからタイル画像を表示するためにイメージ層を使用します.OSMを使用するには、マップのレイヤーコレクションにイメージ層を追加し、次のコードに示すように、レイヤーをOSMとして設定する必要があります.
    <maps:SfMaps>
                <maps:SfMaps.Layers>
                    <maps:ImageryLayer x:Name="imageryLayer" LayerType="OSM" ></maps:ImageryLayer>
                </maps:SfMaps.Layers>
     </maps:SfMaps>
    
    注意:このドキュメントを参照link Xamarin Mapsコントロールから始めるには.

    Step 2 :現在の位置情報を取得する


    地理座標点の現在位置は、地理位置情報APIから取得することができます.
    GetLastOnownLocationAsyncメソッドを使用して、デバイスの最後の既知の位置を取得します.これは、位置データの全体のセットを取得するよりも速く動作しますが、それは正確ではないキャッシュされた場所がない場合はNULLを返すことがあります.
    次のコードを参照してください.
    var location = await Geolocation.GetLastKnownLocationAsync();
    
    最後の既知の場所がNULLの場合は、GetLocationAsyncメソッドを呼び出して、デバイスの現在の地理座標を照会します.完全なGeoLocationRequestを場所に渡すことを推奨しますaccuracy 位置を取得する際の時間遅延を避けるために.
    次のコードを参照してください.
    private async void GetCurrentGeolocation()
    {
        try
        {
            var location = await Geolocation.GetLastKnownLocationAsync();
            if (location == null)
            {
                var request = new GeolocationRequest(GeolocationAccuracy.Medium, TimeSpan.FromSeconds(10));
                location = await Geolocation.GetLocationAsync(request);
                if (location != null)
                {
                    geoLocation = location;
                }
            }
            else
            {
                geoLocation = location;
            }
        }
        catch (Exception ex)
        {
            // Unable to get location
        }        
    }
    

    ステップ3:マーカーピンを設定します


    現在のデバイスのGPS位置情報を取得した後、取得した場所でマップ内のマーカーを追加する必要があります.imagerylayerは、マーカーをマップ内に配置するオプションを指定しますMarkers コレクションプロパティ.
    現在の場所をピンするにはMapMarker 取得した位置ポイントをLatitude and Longitude プロパティ.次に、次のコードに示すように、ImageLayerメソッドのマーカコレクションにオブジェクトを追加します.
    if (location != null)
    {
        MapMarker marker = new MapMarker();
        marker.Latitude = location.Latitude.ToString();
        marker.Longitude = location.Longitude.ToString();
        this.imageryLayer.Markers = new ObservableCollection<MapMarker> { marker };
    }
    
    あなたはマーカーを使用してマーカーの種類をカスタマイズすることができますMarkerIcon またはプロパティを使用してカスタマイズされたマーカーを追加MarkerTemplate プロパティ.
    地図の中央に現在位置を表示するには、そのポイントをGeoCoordinates プロパティを次のコードに示します.
    private void SetMarkerInLocation(Location location)
    {
        if (location != null)
        {
            MapMarker marker = new MapMarker();
            marker.Latitude = location.Latitude.ToString();
            marker.Longitude = location.Longitude.ToString();
            this.imageryLayer.Markers = new ObservableCollection<MapMarker> { marker };
    
            this.imageryLayer.GeoCoordinates = new Point(location.Latitude, location.Longitude);
            this.imageryLayer.Radius = 50;
            this.imageryLayer.DistanceType = DistanceType.Mile;
        }
    }
    
    下記を参照.GIF画像.

    検出された場所をアドレスから表示する


    任意のアドレスを緯度と経度の地理的にXAmarinのジオコーディングAPIを使用して座標化することができます.要点.これを行うには、Geocoding GetLocationsAsyncメソッドに文字列引数としてアドレス(例えば、マイクロソフトビルディングアドレス)を渡す必要があります.次に、メソッドは、アドレスを表す地理的位置オブジェクトのコレクションを非同期で返します.
    次のコードを参照してください.
    private async void GetLocationFromAddress()
    {
        try
        {
            var address = "Microsoft Building 25 Redmond WA USA";
            var locations = await Geocoding.GetLocationsAsync(address);
    
            var location = locations?.FirstOrDefault();
            if (location != null)
            {
                geoLocation = location;
            }
        }
        catch (FeatureNotSupportedException fnsEx)
        {
            // Feature not supported on device
        }
    }
    
    場所を取得した後、マップ内の位置にマップマーカー(ピン)を設定しますSet the marker pin 場所のセクションで.
    下記を参照.GIF画像.

    Githubリファレンス


    このブログの完全なサンプルコードをダウンロードできますGitHub location .

    結論


    読書ありがとう!このブログでは、私たちはどのように簡単に現在のGPS位置を検出することを学んだSyncfusion Xamarin Maps キマリンを用いた制御要点.だから、このブログで提供される指示を試してみて、下記のコメント欄であなたの経験について教えてください.SyncFusionマップコントロールも利用可能ですBlazor , ASP .正味のCore , MVC , Web Forms ), JavaScript , Angular , React , Vue , Flutter , UWP , WinForms , and WPF のりば
    チェックアウト完了user guide 我々のマップコントロールの我々の地図サンプルを見るGitHub location . また、2009年に我々のデモアプリをチェックアウトすることができますGoogle Play , Microsoft Store , and TestFlight .
    あなたがこれらのコントロールについての質問をするならば、下記のコメントで知らせてください.また、我々を介してお問い合わせすることができますsupport forums , Direct-Trac , or feedback portal . 我々は常にあなたを支援して満足している!