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); }