Получение GPS-координат Windows Phone 7 - PullRequest
0 голосов
/ 08 декабря 2010

Сегодня я довольно долго собирал GPS-координаты с устройства Windows Phone 7 - однако, поскольку у меня нет настоящего тестового устройства, я попытался установить некоторые фиктивные данные, которые я хочу вернуть вместо реальных Данные 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.

Ответы [ 3 ]

1 голос
/ 08 декабря 2010

Откуда у вас пример кода?

Вы пробовали использовать образец на MSDN ?

В качестве альтернативы, имеется большой симулятор, доступный с http://phone7.wordpress.com/2010/08/02/no-device-no-gps-no-matter-with-code/

1 голос
/ 08 декабря 2010

Почему вы получаете frmo GeoCoordinateWatcher? Это ошибка, ИМО. Это делает неясным, когда вы используете члены своего собственного класса и когда вы используете делегированный экземпляр. В данный момент вы устанавливаете координаты делегированного наблюдателя, но затем запрашивает координаты непосредственно из экземпляра GetGPS.

Я предлагаю вам реализовать IGeoPositionWatcher<GeoCoordinate> с вашим собственным "фиксированным" наблюдателем позиции - и затем решить во время выполнения, использовать ли это или реальный GeoCoordinateWatcher. Очевидно, это означает, что ваш клиентский код должен зависеть только от IGeoPositionWatcher<GeoCoordinate> вместо GeoCoordinateWatcher напрямую. Это также должно помочь в целях модульного тестирования.

0 голосов
/ 08 декабря 2010

Конечно, ответ Джона очень уместен - я думаю, что вы не сделали разумную абстракцию интерфейса, но даже когда вы ее получили, для смоделированных данных вы взглянули на GPS-симулятор Кевина Вольфа для Windpws Phone * * 1003

...