緯度と経度を取得して住所に変換するアプリを作成し、エミュレータでlat-47.669とlong= -122.124を表示しようとしました。日本での表示場所をデバイスでテストしました。しかし、私はインドのハイデラバードにいます。コードが間違っているのか、それともデバイスの問題なのかを確認してください
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using Microsoft.Phone.Maps.Controls;
using System.Device.Location;
using PhoneApp3.GeocodeService;
using Microsoft.Phone.Maps.Services;
using Windows.Devices.Geolocation;
namespace PhoneApp3
{
public partial class map : PhoneApplicationPage
{
/// <summary>
/// This variable is used to get the location
/// from the windows phone location service
/// </summary>
GeoCoordinateWatcher myLocationWatcher;
private GeoCoordinate MyCoordinate = null;
/// <summary>
/// Constructor for the PhoneApplicationPage object
/// </summary>
public map()
{
InitializeComponent();
}
private ProgressIndicator ProgressIndicator = null;
// My current location
// Reverse geocode query
private ReverseGeocodeQuery MyReverseGeocodeQuery = null;
/// <summary>
/// Accuracy of my current location in meters;
/// </summary>
private double accuracy = 0.0;
Double latitude, longitude;
/// <summary>
/// Click event handler for the high accuracy button
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void GetLocation(object sender, EventArgs e)
{
// Start data acquisition from the Location Service, high accuracy
//accuracy can be one default and another high
StartLocationService(GeoPositionAccuracy.High);
}
/// <summary>
/// Helper method to start up the location data acquisition
/// </summary>
/// <param name="accuracy">The accuracy level </param>
private void StartLocationService(GeoPositionAccuracy accuracy)
{
// Reinitialize the GeoCoordinateWatcher
myLocationWatcher = new GeoCoordinateWatcher(accuracy);
myLocationWatcher.MovementThreshold = 20;
// Add event handlers for StatusChanged and PositionChanged events
myLocationWatcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
myLocationWatcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
// Start data acquisition
myLocationWatcher.Start();
}
/// <summary>
/// Handler for the StatusChanged event. This invokes MyStatusChanged on the UI thread and
/// passes the GeoPositionStatusChangedEventArgs
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{
//the dispatcher dispatches to the specified method when a status change occurs
Deployment.Current.Dispatcher.BeginInvoke(() => MyStatusChanged(e));
}
/// <summary>
/// Custom method called from the StatusChanged event handler
/// </summary>
/// <param name="e"></param>
void MyStatusChanged(GeoPositionStatusChangedEventArgs e)
{
switch (e.Status)
{
case GeoPositionStatus.Disabled:
// The location service is disabled or unsupported.
// Alert the user
MessageBox.Show("location is unsupported on this device");
break;
}
}
/// <summary>
/// Handler for the PositionChanged event. This invokes MyStatusChanged on the UI thread and
/// passes the GeoPositionStatusChangedEventArgs
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
//Dispatcher invokes the event for position change.
Deployment.Current.Dispatcher.BeginInvoke(() => MyPositionChanged(e));
}
/// <summary>
/// Custom method called from the PositionChanged event handler
/// </summary>
/// <param name="e"></param>
void MyPositionChanged(GeoPositionChangedEventArgs<GeoCoordinate> e)
{
// Update the TextBlocks to show the current location
LatitudeTextBlock.Text = e.Position.Location.Latitude.ToString("0.000");
LongitudeTextBlock.Text += e.Position.Location.Longitude.ToString("0.000");
}
// for converting latitude longitude to address
public void Button_Click(object sender, RoutedEventArgs e)
{
GetCurrentCoordinate();
}
private async void GetCurrentCoordinate()
{
Geolocator geolocator = new Geolocator();
geolocator.DesiredAccuracy = PositionAccuracy.High;
try
{
Geoposition currentPosition = await geolocator.GetGeopositionAsync(TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(10));
accuracy = currentPosition.Coordinate.Accuracy;
latitude = Convert.ToDouble(LatitudeTextBlock.Text);
longitude = Convert.ToDouble(LongitudeTextBlock.Text);
MyCoordinate = new GeoCoordinate(latitude, longitude);
if (MyReverseGeocodeQuery == null || !MyReverseGeocodeQuery.IsBusy)
{
MyReverseGeocodeQuery = new ReverseGeocodeQuery();
MyReverseGeocodeQuery.GeoCoordinate = new GeoCoordinate(MyCoordinate.Latitude, MyCoordinate.Latitude);
// LongitudeTextBlock.Text = MyCoordinate.Longitude.ToString();
// LatitudeTextBlock.Text = MyCoordinate.Latitude.ToString();
MyReverseGeocodeQuery.QueryCompleted += ReverseGeocodeQuery_QueryCompleted;
MyReverseGeocodeQuery.QueryAsync();
}
}
catch (Exception ex)
{
// ...
LatitudeTextBlock.Text = "hiiii";
}
}
public void ReverseGeocodeQuery_QueryCompleted(object sender, QueryCompletedEventArgs<IList<MapLocation>> e)
{
if (e.Error == null)
{
if (e.Result.Count > 0)
{
MapAddress address = e.Result[0].Information.Address;
labelResults.Text = "Current Location: " + address.City + ", " + address.State;
}
}
}
}
}