forked from xamarin/Essentials
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGeocodingViewModel.cs
More file actions
130 lines (116 loc) · 3.96 KB
/
Copy pathGeocodingViewModel.cs
File metadata and controls
130 lines (116 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System;
using System.Linq;
using System.Windows.Input;
using Xamarin.Essentials;
using Xamarin.Forms;
namespace Samples.ViewModel
{
public class GeocodingViewModel : BaseViewModel
{
string lat = "47.673988";
string lon = "-122.121513";
string address = "Microsoft Building 25 Redmond WA USA";
string geocodeAddress;
string geocodePosition;
public GeocodingViewModel()
{
GetAddressCommand = new Command(OnGetAddress);
GetPositionCommand = new Command(OnGetPosition);
}
public ICommand GetAddressCommand { get; }
public ICommand GetPositionCommand { get; }
public string Latitude
{
get => lat;
set => SetProperty(ref lat, value);
}
public string Longitude
{
get => lon;
set => SetProperty(ref lon, value);
}
public string GeocodeAddress
{
get => geocodeAddress;
set => SetProperty(ref geocodeAddress, value);
}
public string Address
{
get => address;
set => SetProperty(ref address, value);
}
public string GeocodePosition
{
get => geocodePosition;
set => SetProperty(ref geocodePosition, value);
}
async void OnGetPosition()
{
if (IsBusy)
return;
IsBusy = true;
try
{
var locations = await Geocoding.GetLocationsAsync(Address);
var location = locations?.FirstOrDefault();
if (location == null)
{
GeocodePosition = "Unable to detect locations";
}
else
{
GeocodePosition =
$"{nameof(location.Latitude)}: {location.Latitude}\n" +
$"{nameof(location.Longitude)}: {location.Longitude}\n";
}
}
catch (Exception ex)
{
GeocodePosition = $"Unable to detect locations: {ex.Message}";
}
finally
{
IsBusy = false;
}
}
async void OnGetAddress()
{
if (IsBusy)
return;
IsBusy = true;
try
{
double.TryParse(lat, out var lt);
double.TryParse(lon, out var ln);
var placemarks = await Geocoding.GetPlacemarksAsync(lt, ln);
var placemark = placemarks?.FirstOrDefault();
if (placemark == null)
{
GeocodeAddress = "Unable to detect placemarks.";
}
else
{
GeocodeAddress =
$"{nameof(placemark.AdminArea)}: {placemark.AdminArea}\n" +
$"{nameof(placemark.CountryCode)}: {placemark.CountryCode}\n" +
$"{nameof(placemark.CountryName)}: {placemark.CountryName}\n" +
$"{nameof(placemark.FeatureName)}: {placemark.FeatureName}\n" +
$"{nameof(placemark.Locality)}: {placemark.Locality}\n" +
$"{nameof(placemark.PostalCode)}: {placemark.PostalCode}\n" +
$"{nameof(placemark.SubAdminArea)}: {placemark.SubAdminArea}\n" +
$"{nameof(placemark.SubLocality)}: {placemark.SubLocality}\n" +
$"{nameof(placemark.SubThoroughfare)}: {placemark.SubThoroughfare}\n" +
$"{nameof(placemark.Thoroughfare)}: {placemark.Thoroughfare}\n";
}
}
catch (Exception ex)
{
GeocodeAddress = $"Unable to detect placemarks: {ex.Message}";
}
finally
{
IsBusy = false;
}
}
}
}