73 lines
2.3 KiB
C#
73 lines
2.3 KiB
C#
using System;
|
|
using Windows.Foundation.Collections;
|
|
|
|
namespace RNCamera
|
|
{
|
|
static class GeolocationHelper
|
|
{
|
|
public static PropertySet GetLatitudeProperties(double latitude)
|
|
{
|
|
// Latitude and longitude are returned as double precision numbers,
|
|
// but we want to convert to degrees/minutes/seconds format.
|
|
var latRefText = (latitude >= 0) ? "N" : "S";
|
|
var latDeg = Math.Floor(Math.Abs(latitude));
|
|
var latMin = Math.Floor((Math.Abs(latitude) - latDeg) * 60);
|
|
var latSec = (Math.Abs(latitude) - latDeg - latMin / 60) * 3600;
|
|
|
|
uint[] latitudeNumerator =
|
|
{
|
|
(uint)latDeg,
|
|
(uint)latMin,
|
|
(uint)(latSec * 10000)
|
|
};
|
|
|
|
uint[] denominator =
|
|
{
|
|
1,
|
|
1,
|
|
10000
|
|
};
|
|
|
|
return new PropertySet
|
|
{
|
|
{ "System.GPS.LatitudeRef", latRefText },
|
|
{ "System.GPS.LatitudeNumerator", latitudeNumerator },
|
|
{ "System.GPS.LatitudeDenominator", denominator },
|
|
};
|
|
}
|
|
|
|
public static PropertySet GetLongitudeProperties(double longitude)
|
|
{
|
|
// Latitude and longitude are returned as double precision numbers,
|
|
// but we want to convert to degrees/minutes/seconds format.
|
|
var longRefText = (longitude >= 0) ? "E" : "W";
|
|
var longDeg = Math.Floor(Math.Abs(longitude));
|
|
var longMin = Math.Floor((Math.Abs(longitude) - longDeg) * 60);
|
|
var longSec = (Math.Abs(longitude) - longDeg - longMin / 60) * 3600;
|
|
|
|
uint[] longitudeNumerator =
|
|
{
|
|
(uint)longDeg,
|
|
(uint)longMin,
|
|
(uint)(longSec * 10000)
|
|
};
|
|
|
|
uint[] denominator =
|
|
{
|
|
1,
|
|
1,
|
|
10000
|
|
};
|
|
|
|
var pset = new PropertySet();
|
|
|
|
return new PropertySet
|
|
{
|
|
{ "System.GPS.LongitudeRef", longRefText },
|
|
{ "System.GPS.LongitudeNumerator", longitudeNumerator },
|
|
{ "System.GPS.LongitudeDenominator", denominator },
|
|
};
|
|
}
|
|
}
|
|
}
|