using SkiaSharp;
using Parquet.Serialization;
namespace EarthQuake.Core.EarthQuakes;
///
/// 震度観測点データ
///
public class Station
{
///
/// Parquetファイルから解析するためのプロパティ 緯度
///
public double? Latitude
{
set => Lat = (float?)value ?? default;
}
///
/// Parquetファイルから解析するためのプロパティ 経度
///
public double? Longitude
{
set => Lon = (float?)value ?? default;
}
public string? Name { set; get; } = string.Empty;
public float Lat { get; private set; }
public float Lon { get; private set; }
/*public static List GetStations(Stream stream)
{
List list = [];
// CSVファイルを1行ずつ読み取る
using TextFieldParser parser = new(stream);
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser?.EndOfData ?? false)
{
// CSVファイルから1行読み取る
string[]? fields = parser?.ReadFields();
if (fields is not null)
list.Add(new Station() { Latitude = float.Parse(fields[2]), Longitude = float.Parse(fields[3]), Name = fields[1] });
}
return list;
}*/
///
/// Parquetファイルから震度観測点データを取得する
///
/// ストリーム
/// 観測点データ
public static async Task GetStationsFromParquet(Stream stream)
{
// MemoryStreamを作成
using MemoryStream memoryStream = new();
await stream.CopyToAsync(memoryStream);
// Parquetファイルを読み取る
var reader = await ParquetSerializer.DeserializeAsync(memoryStream);
return reader.ToArray();
}
///
/// 画面上の座標を取得する
///
/// 座標
public SKPoint GetSKPoint() => GeomTransform.Translate(Lon, Lat);
}