コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }