0

今天我一直在寻找从 Windows Phone 7 设备收集 GPS 坐标的时间 - 但是,由于我在这里没有实际的测试设备,所以我尝试设置一些我想要返回的虚拟数据,而不是真正的 GPS 数据。 .. 那,但是效果不太好:此代码部分是我在此处找到的示例。但是我试图把它放到一个我以后可以访问的类中。

public class GetGPS : GeoCoordinateWatcher
{
    GeoCoordinateWatcher watcher;

    public GetGPS()
    {
        watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
        watcher.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.Ready:
                //plingpling
                break;
            case GeoPositionStatus.Disabled:
                // location is unsupported on this device
                break;
            case GeoPositionStatus.NoData:
                watcher.Position.Location.Latitude = 54.086369f;
                watcher.Position.Location.Longitude = 12.124754f;
                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();
    }
}

这是我尝试访问数据的另一堂课 - 但是我总是将 NaN 设为 lat1Rad 和 long1Rad ......你能帮帮我吗?

我希望该示例能够在模拟器(具有固定的 GPS 坐标)和手机 7 设备上运行——它实际上获取了价值。

GetGPS location1= new GetGPS();

//GeoCoordinate myPosition = location1.getPosition();

//Radianten berechnen
double lat1Rad = GradZuRad(location1.Position.Location.Latitude);
double long1Rad = GradZuRad(location1.Position.Location.Longitude);

我基本上只是想编写一个返回当前 GPS 位置的类。

4

3 回答 3

1

你为什么要导出 frmo GeoCoordinateWatcher?这是一个错误,IMO。它使您不清楚何时使用自己的类的成员以及何时使用委托的实例。目前,您正在委托观察者上设置坐标,然后直接从实例中请求坐标。GetGPS

我建议您IGeoPositionWatcher<GeoCoordinate>使用自己的“固定”位置观察器来实现 - 然后在执行时决定是使用那个还是真正的GeoCoordinateWatcher. 显然,这意味着您的客户端代码应该只依赖IGeoPositionWatcher<GeoCoordinate>而不是GeoCoordinateWatcher直接依赖。这也应该有助于单元测试的目的。

于 2010-12-08T15:45:22.343 回答
1

您的示例代码来自哪里?

您是否尝试过使用MSDN 上的示例

或者,可以从http://phone7.wordpress.com/2010/08/02/no-device-no-gps-no-matter-with-code/获得一个很棒的模拟器

于 2010-12-08T15:47:42.560 回答
0

当然,乔恩的回答非常中肯——我认为你没有进行合理的接口抽象,但即使你得到了这个,对于模拟数据,你有没有看过Kevin Wolf's GPS Simulator for Windpws Phone

于 2010-12-08T15:48:27.813 回答