【C#】 GPS 신호를 사용하여 현재 시간을 얻습니다.
왜 그렇게 하는 거야?
단말기가 인터넷에 접속할 수 없는 경우, 서버로부터 현재 시각을 취득할 수 없습니다.
GPS 신호 (NMEA 포맷 데이터)에는 UTC 시간이 포함되어 있기 때문에,
인터넷에는 연결되지 않지만 GPS는 주울 수 있는 특수한 환경인 경우, 선택사항이 될지도 모릅니다.
Microsoft.WindowsAPICodePack.Sensors 사용
.Net표준인 GeoCoordinateWatcher로 취득할 수 있는 정보는, 위도·경도에 한정되어 있으므로,
Microsoft.WindowsAPICodePack.Sensors 네임스페이스의 Sensor 클래스를 사용합니다.
GPS 센서 준비
Sensor 클래스를 사용하려면 GPS 센서가 필요합니다.
이마도키의 Windows 단말에는 기본적으로 GPS 센서가 탑재되어 있지 않으므로, 준비할 필요가 있습니다.
일단 작동을 시도하면 amazon 저렴한 센서 ( htps //w w. 아마존. 이. jp/gp/p 로즈 ct/B01마 21TSX/ )로 충분합니다.
소스를 이동하려면 장치 관리자의 센서에 GPS 센서를 추가하면 문제가 없습니다.
소스 코드
using Microsoft.WindowsAPICodePack.Sensors;
// 位置情報GUID
// 参考:https://docs.microsoft.com/en-us/windows/desktop/sensorsapi/sensor-category-location
private static Guid SENSOR_DATA_TYPE_LOCATION_GUID = new Guid("055C74D8-CA6F-47D6-95C6-1ED3637A0FF4");
// GPSセンサの取得
Sensor GeolocationSensor = SensorManager.GetSensorsByTypeId(SensorTypes.LocationGps)[0];
// GPS信号を取得する度に、イベント実行
GeolocationSensor.DataReportChanged += DataReportChanged;
// GPS信号受信時の処理
private void DataReportChanged(Sensor sender, EventArgs e)
{
// NMEAフォーマットデータ
string[] gpsData = sender.DataReport.Values[SENSOR_DATA_TYPE_LOCATION_GUID][25].ToString().Split(',');
// gpsData[1]:HHmmss.00 gpsData[9]:yyMMdd
// NMEAフォーマットデータに含まれる時刻は、UTC時刻となる
DateTimeOffset dto = new DateTimeOffset(
DateTime.ParseExact(string.Format("{0}{1}", gpsData[9], gpsData[1].Substring(0, 6)), "yyMMddHHmmss", null), TimeSpan.Zero);
}
GPS 신호 데이터는 DataReportChanged 이벤트의 sender를 통해 얻습니다.
위의 GPS 센서를 사용한 환경에서는,
sender.DataReport.Values[SENSOR_DATA_TYPE_LOCATION_GUID]는 [0] : 경도, [1] : 위도 다음에, [25]에 NMEA 형식의 원시 데이터 (\$GPRMC,\$GPVTG,\$GPGNS... )가 저장됩니다.
Reference
이 문제에 관하여(【C#】 GPS 신호를 사용하여 현재 시간을 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/TakadaTentaro/items/4542695a46d0e9e2e6f3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
.Net표준인 GeoCoordinateWatcher로 취득할 수 있는 정보는, 위도·경도에 한정되어 있으므로,
Microsoft.WindowsAPICodePack.Sensors 네임스페이스의 Sensor 클래스를 사용합니다.
GPS 센서 준비
Sensor 클래스를 사용하려면 GPS 센서가 필요합니다.
이마도키의 Windows 단말에는 기본적으로 GPS 센서가 탑재되어 있지 않으므로, 준비할 필요가 있습니다.
일단 작동을 시도하면 amazon 저렴한 센서 ( htps //w w. 아마존. 이. jp/gp/p 로즈 ct/B01마 21TSX/ )로 충분합니다.
소스를 이동하려면 장치 관리자의 센서에 GPS 센서를 추가하면 문제가 없습니다.
소스 코드
using Microsoft.WindowsAPICodePack.Sensors;
// 位置情報GUID
// 参考:https://docs.microsoft.com/en-us/windows/desktop/sensorsapi/sensor-category-location
private static Guid SENSOR_DATA_TYPE_LOCATION_GUID = new Guid("055C74D8-CA6F-47D6-95C6-1ED3637A0FF4");
// GPSセンサの取得
Sensor GeolocationSensor = SensorManager.GetSensorsByTypeId(SensorTypes.LocationGps)[0];
// GPS信号を取得する度に、イベント実行
GeolocationSensor.DataReportChanged += DataReportChanged;
// GPS信号受信時の処理
private void DataReportChanged(Sensor sender, EventArgs e)
{
// NMEAフォーマットデータ
string[] gpsData = sender.DataReport.Values[SENSOR_DATA_TYPE_LOCATION_GUID][25].ToString().Split(',');
// gpsData[1]:HHmmss.00 gpsData[9]:yyMMdd
// NMEAフォーマットデータに含まれる時刻は、UTC時刻となる
DateTimeOffset dto = new DateTimeOffset(
DateTime.ParseExact(string.Format("{0}{1}", gpsData[9], gpsData[1].Substring(0, 6)), "yyMMddHHmmss", null), TimeSpan.Zero);
}
GPS 신호 데이터는 DataReportChanged 이벤트의 sender를 통해 얻습니다.
위의 GPS 센서를 사용한 환경에서는,
sender.DataReport.Values[SENSOR_DATA_TYPE_LOCATION_GUID]는 [0] : 경도, [1] : 위도 다음에, [25]에 NMEA 형식의 원시 데이터 (\$GPRMC,\$GPVTG,\$GPGNS... )가 저장됩니다.
Reference
이 문제에 관하여(【C#】 GPS 신호를 사용하여 현재 시간을 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/TakadaTentaro/items/4542695a46d0e9e2e6f3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using Microsoft.WindowsAPICodePack.Sensors;
// 位置情報GUID
// 参考:https://docs.microsoft.com/en-us/windows/desktop/sensorsapi/sensor-category-location
private static Guid SENSOR_DATA_TYPE_LOCATION_GUID = new Guid("055C74D8-CA6F-47D6-95C6-1ED3637A0FF4");
// GPSセンサの取得
Sensor GeolocationSensor = SensorManager.GetSensorsByTypeId(SensorTypes.LocationGps)[0];
// GPS信号を取得する度に、イベント実行
GeolocationSensor.DataReportChanged += DataReportChanged;
// GPS信号受信時の処理
private void DataReportChanged(Sensor sender, EventArgs e)
{
// NMEAフォーマットデータ
string[] gpsData = sender.DataReport.Values[SENSOR_DATA_TYPE_LOCATION_GUID][25].ToString().Split(',');
// gpsData[1]:HHmmss.00 gpsData[9]:yyMMdd
// NMEAフォーマットデータに含まれる時刻は、UTC時刻となる
DateTimeOffset dto = new DateTimeOffset(
DateTime.ParseExact(string.Format("{0}{1}", gpsData[9], gpsData[1].Substring(0, 6)), "yyMMddHHmmss", null), TimeSpan.Zero);
}
Reference
이 문제에 관하여(【C#】 GPS 신호를 사용하여 현재 시간을 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TakadaTentaro/items/4542695a46d0e9e2e6f3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)