0

メモを保存するときにgps座標を使用して、現在の都市を投稿するようにメモ機能を取得しようとしています。現在、「不明な場所」のみが表示されています。私は今ちょっと迷っています、そして私はそれを機能させるためにこのコードで長い間働いてきましたので、誰かが私が間違ったことを教えてもらえますか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Device.Location;
using System.Text;
using System.IO.IsolatedStorage;
using System.IO;
using Secret.myTerraService;

namespace Secret
{
public partial class AddNotePage : PhoneApplicationPage
{
    private IsolatedStorageSettings settings =     IsolatedStorageSettings.ApplicationSettings;
    private string location = "";

    #region Hämtar din geografiska position

    public AddNotePage()
    {
        InitializeComponent();
        GeoCoordinateWatcher watcher;

        watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default)
                           {
                               MovementThreshold = 20
                           };

        watcher.PositionChanged += this.watcher_PositionChanged;
        watcher.StatusChanged += this.watcher_StatusChanged;
        watcher.Start();

    }
private void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{
switch (e.Status)
{
    case GeoPositionStatus.Disabled:
        // location is unsupported on this device
        break;
    case GeoPositionStatus.NoData:
        // data unavailable
        break;
}
}

private void watcher_PositionChanged(object sender,   GeoPositionChangedEventArgs<GeoCoordinate> e)
{
var epl = e.Position.Location;

// Access the position information thusly:
epl.Latitude.ToString("0.000");
epl.Longitude.ToString("0.000");
epl.Altitude.ToString();
epl.HorizontalAccuracy.ToString();
epl.VerticalAccuracy.ToString();
epl.Course.ToString();
epl.Speed.ToString();
e.Position.Timestamp.LocalDateTime.ToString();




}

void client_ConvertLonLatPtToNearestPlaceCompleted(object sender,   myTerraService.ConvertLonLatPtToNearestPlaceCompletedEventArgs e)
{
location = e.Result;

//throw new NotImplementedException();
}


    #endregion

    #region Knappfunktioner

    private void AppBar_Cancel_Click(object sender, EventArgs e)
    {
        navigateBack();
    }

    private void AppBar_Save_Click(object sender, EventArgs e)
    { // spara en ny anteckning
        if (location.Trim().Length == 0)
        {
            location = "Okänd Plats";
        }

        // skapa namnet på filen
        StringBuilder sb = new StringBuilder();
        sb.Append(DateTime.Now.Year);
        sb.Append("_");
        sb.Append(String.Format("{0:00}", DateTime.Now.Month));
        sb.Append("_");
        sb.Append(String.Format("{0:00}", DateTime.Now.Day));
        sb.Append("_");
        sb.Append(String.Format("{0:00}", DateTime.Now.Hour));
        sb.Append("_");
        sb.Append(String.Format("{0:00}", DateTime.Now.Minute));
        sb.Append("_");
        sb.Append(String.Format("{0:00}", DateTime.Now.Second));
        sb.Append("_");

        location = location.Replace(" ", "-");
        location = location.Replace(", ", "_");
        sb.Append(location);
        sb.Append(".txt");

        //spara filen i Isolated Storage
        var appStorage = IsolatedStorageFile.GetUserStoreForApplication();

        try
        {
            using (var fileStream = appStorage.OpenFile(sb.ToString(),  System.IO.FileMode.Create))
            {
                using (StreamWriter sw = new StreamWriter(fileStream))
                {
                    sw.WriteLine(editTextBox.Text);
                }
            }

        }
        catch
        {
            // åtgärda vid senare tillfälle..
        }



        //Klart Navigera tillbaka till NoteMainPage
        navigateBack();

    }
4

1 に答える 1

0

これをテストすると、コードが壊れる可能性のあるポイントがいくつか見られます。アプリが GPS 位置データを取得していることを実際に確認するには、ブレークポイントを使用してデバッグする必要があります。そうでない場合は、Windows Phone エミュレーターを使用して GPS シミュレーションを実行します (その後、もう一度確認します)。

次に、GPS データが受信され、Terra Web サービス用に正しくフォーマットされていることがわかったら、データが実際に Terra Web サービスに送信され、そのデータが Web サービス呼び出しから返されていることを確認します。Terra Web サービスが依然として「不明な場所」を返す場合は、再試行しますが、今度は主要都市の近くの GPS 位置をプロットして、近くにある都市を Web サービスが認識できる可能性を高めます。それでも「不明な場所」が返される場合は、Web サービス プロバイダーに問題があることを確信できます。

Windows Phone 位置情報サービスに関する私の経験では (私は WiFi アクセス (つまり、sim なし) を備えた開発用電話のみを使用しました)、位置データを取得するのに数秒または数分かかることがあります。地下室または GPS のアクセスが制限されている場所にある物理的な開発用電話でこれをテストしている場合、データが生成されていない可能性があります。また、Windows Phone の位置データは必ずしも瞬時に取得できるとは限らないため、いつでもその場で呼び出すことができず、位置データの準備が整っているとは限りません。私の経験では、(Windows Phone Marketplace の送信要件に従って) ユーザーに位置情報サービスを選択してもらい、ユーザーがアプリを使用している間にバックグラウンド エージェントに位置データを取得させました。そうすれば、ユーザーが必要とするときまでに位置データの準備が整う可能性があります(ユーザーがメモを保存するときの例のように)。

これは、Windows Phone アプリで動作する C# で作成した実用的な例です。このサンプルは、単純さと時間の節約のためにコンソール アプリです。それでもわからない場合は、Windows Phone 用にコーディングします。これで、実際に機能させるために必要なものはすべて揃っていますが、lat 変数と long 変数を差し込むだけです。作業用ソース コードのダウンロード(Visual Studio 2010)

C# ソース コード スニペット

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TerraServiceExample.com.msrmaps; // add the service using statement
// http://msrmaps.com/terraservice2.asmx
namespace TerraServiceExample
{
    class Program
    {
        /// <summary> The main entry point for the application. </summary>
        static void Main(string[] args)
        {

            // Create the GPS point from your location services data
            LonLatPt location = new LonLatPt();

            // Modify Lat and Lon based on your needs
            // This example uses the GPS Coordinates for "Eau Claire, Wisconsin, United States"
            location.Lat = 44.811349;
            location.Lon = -91.498494;

            // Create a new TerraService object
            TerraService ts = new TerraService();

            // Output the nearest location from the TerraService
            Console.WriteLine(ts.ConvertLonLatPtToNearestPlace(location));

            // For console app to stay open/close easily
            Console.WriteLine("Press any key to close window...");
            Console.ReadKey();

            // Lastly, appreciate the Microsoft folks that made this available for free
            // They are all interesting individuals but you should read about Jim Gray via Wikipedia to
            // understand some history behind this cool web service.
        }
    }
}
于 2012-12-12T18:09:48.333 に答える