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 提交要求),然后在用户使用应用程序时让后台代理提取位置数据。这样,位置数据可能会在用户需要它时准备好(例如用户保存笔记时的示例)。

这是我用 C# 为您制作的一个适用于您的 Windows Phone 应用程序的工作示例。为了简单和节省时间,该示例是一个控制台应用程序。如果您仍然无法弄清楚,我将为 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 回答