/// <summary> /// 逆地址编码 /// </summary> public async Task <AmapReturn> Geocode_Regeo(double lon, double lang) { string result = await _amapHttpClient.GetStringAsync($"{ApiVersion}/geocode/regeo/?location={lon},{lang}"); AmapReturn amap = Newtonsoft.Json.JsonConvert.DeserializeObject <AmapReturn>(result); return(amap); }
/// <summary> /// 获取图片的拍摄事件经纬度(如果有) /// </summary> /// <param name="file"></param> /// <returns></returns> public static async Task <ImageModel> HanadleImage(FileInfo file) { Stopwatch sw = new Stopwatch(); sw.Start(); ImageModel model = new ImageModel(); //using (Image<Rgba32> image = Image.Load(file.FullName)) //{ #region 原始版本 .net framework下慢 .net core下快 //ExifValue photoDateValue = image?.MetaData?.ExifProfile?.GetValue(ExifTag.DateTimeOriginal); //if (photoDateValue == null) //{ // model.PhotoDate = file.CreationTime; // return model; //} //CultureInfo enUS = new CultureInfo("en-US"); //bool isConvertSucced = DateTime.TryParseExact(photoDateValue?.Value?.ToString(), "yyyy:MM:dd HH:mm:ss", enUS, DateTimeStyles.None, out DateTime result);//YYYY:MM:DD HH:mm:ss //if (isConvertSucced) //{ // model.PhotoDate = result; //} //else //{ // model.PhotoDate = file.CreationTime; //} //ExifValue latitudeValue = image.MetaData.ExifProfile.GetValue(ExifTag.GPSLatitude); //if (latitudeValue != null && latitudeValue.Value != null) //{ // Rational[] latitudeArray = latitudeValue.Value as Rational[]; // if (latitudeArray != null) // { // model.Latitude = latitudeArray.ToDouble(); // } //} //ExifValue longitudeValue = image.MetaData.ExifProfile.GetValue(ExifTag.GPSLongitude); //if (longitudeValue != null && longitudeValue.Value != null) //{ // Rational[] longitudeValueArray = longitudeValue.Value as Rational[]; // if (longitudeValueArray != null) // { // model.Longitude = longitudeValueArray.ToDouble(); // } //} #endregion IEnumerable <MetadataExtractor.Directory> directories = ImageMetadataReader.ReadMetadata(file.FullName).Where(_ => _.Name == "GPS" || _.Name == "Exif SubIFD"); if (!directories.Any()) { model.PhotoDate = file.CreationTime; return(model); } foreach (MetadataExtractor.Directory item in directories) { switch (item.Name) { case "Exif SubIFD": if (item.TryGetDateTime(36867, out DateTime create)) { model.PhotoDate = create; } break; case "GPS": Rational[] la = item.GetRationalArray(2); //纬度 //Console.WriteLine(); model.Latitude = la.ToDouble(); model.Longitude = item.GetRationalArray(4).ToDouble(); AmapReturn reut = await amapHelper.Geocode_Regeo(model.Longitude.Value, model.Latitude.Value); model.Address = reut.Regeocode.FormattedAddress; break; default: break; } } //} sw.Stop(); //logger.Debug($"当前线程:{System.Threading.Thread.CurrentThread.ManagedThreadId}\r\n文件名:{file.FullName}\r\n耗时:{sw.Elapsed}\r\n文件大小:{Math.Round(file.Length * 1.0 / 1024 / 1024, 0)}MB\r\n*******************************************************************"); return(model); }