不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xxbat,编码选ANSI,跟要处理的文件放一起双击运行
<# :cls&echo off&cd /d "%~dp0"
rem 获取当前目录里多个jpg文件的经度、纬度和高度等GPS信息
set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "current=%cd%"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$outfile="xxxcsv";
Add-Type -AssemblyName 'Systemdrawing';
$current=$env:current;
$result=New-Object -TypeName SystemCollectionsArrayList;
$fs=New-Object SystemIOFileStream($outfile, [SystemIOFileMode]::Create);
$sw=New-Object SystemIOStreamWriter($fs, [TextEncoding]::GetEncoding('GB2312'));
$files=@(dir -literal $current|{(@("jpg") -contains $_Extension) -and ($_ -is [SystemIOFileInfo])});
for($i=0;$i -lt $fileslength;$i++){
write-host $files[$i]FullNamereplace($current, '');
$arr=@($files[$i]Name,'','','','','');
$img=[SystemDrawingImage]::FromFile($files[$i]FullName);
foreach($it in $imgPropertyItems){
if($itId -eq 0x0001){
$arr[1]=[SystemTextEncoding]::ASCIIGetString($itValue[0]);
}
if($itId -eq 0x0002){
if($itValuelength -eq 24){
$d1=[SystemBitConverter]::ToUInt32($itValue, 0) / [SystemBitConverter]::ToUInt32($itValue, 4);
$m1=[SystemBitConverter]::ToUInt32($itValue, 8) / [SystemBitConverter]::ToUInt32($itValue, 12);
$s1=[SystemBitConverter]::ToUInt32($itValue, 16) / [SystemBitConverter]::ToUInt32($itValue, 20);
$arr[2]=$d1ToString()+';'+$m1ToString()+';'+$s1ToString();
}
}
if($itId -eq 0x0003){
$arr[3]=[SystemTextEncoding]::ASCIIGetString($itValue[0]);
}
if($itId -eq 0x0004){
if($itValuelength -eq 24){
$d2=[SystemBitConverter]::ToUInt32($itValue, 0) / [SystemBitConverter]::ToUInt32($itValue, 4);
$m2=[SystemBitConverter]::ToUInt32($itValue, 8) / [SystemBitConverter]::ToUInt32($itValue, 12);
$s2=[SystemBitConverter]::ToUInt32($itValue, 16) / [SystemBitConverter]::ToUInt32($itValue, 20);
$arr[4]=$d2ToString()+';'+$m2ToString()+';'+$s2ToString();
}
}
if($itId -eq 0x0006){
if($itValuelength -eq 8){
$alt=[SystemBitConverter]::ToUInt32($itValue, 0) / [SystemBitConverter]::ToUInt32($itValue, 4);
$arr[5]=$altToString();
}
}
}
$imgDispose();
$line='"'+$arr[0]+'",'+$arr[1]+' '+$arr[2]+','+$arr[3]+' '+$arr[4]+','+$arr[5];
$swWriteLine($line);$swFlush();
}
$swClose();$fsClose();
1、首先在电脑上找到要修改拍摄时间的照片(截图的不行),若是没有,可以发送到电脑上面。
2、然后选中它,鼠标右击,在出现的子菜单中点击“属性”选项。
3、然后在打开的面板中点击‘详细信息’选项。
4、然后在打开页面的 来源 下面,可以看到一个 拍摄日期 ,而在它的后面可以看到,这个就是拍摄的日期了。
5、点击一下它后面的输入框,就可以根据需要输入拍摄的时间了;也可以点击它后面的日期选择器来选中需要的拍摄时间,选好之后,然后点击 确定 按钮,这样就可以修改照片的拍摄时间了。
/// <summary>
/// 获取中的GPS坐标点
/// </summary>
/// <param name="p_路径">路径</param>
/// <returns>返回坐标纬度+经度用"+"分割 取数组中第0和1个位置的值</returns>
public String fnGPS坐标(String p_路径)
{
String s_GPS坐标 = "";
//载入
Image objImage = ImageFromFile(p_路径);
//取得所有的属性(以PropertyId做排序)
var propertyItems = objImagePropertyItemsOrderBy(x => xId);
//暂定纬度N(北纬)
char chrGPSLatitudeRef = 'N';
//暂定经度为E(东经)
char chrGPSLongitudeRef = 'E';
foreach (PropertyItem objItem in propertyItems)
{
//只取Id范围为0x0000到0x001e
if (objItemId >= 0x0000 && objItemId <= 0x001e)
{
objItemId = 0x0002;
switch (objItemId)
{
case 0x0000:
var query = from tmpb in objItemValue select tmpbToString();
string sreVersion = stringJoin("", queryToArray());
break;
case 0x0001:
chrGPSLatitudeRef = BitConverterToChar(objItemValue, 0);
break;
case 0x0002:
if (objItemValueLength == 24)
{
//degrees(将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint)
double d = BitConverterToUInt32(objItemValue, 0) 10d / BitConverterToUInt32(objItemValue, 4);
//minutes(将byte[8]~byte[11]转成uint, 除以byte[12]~byte[15]转成的uint)
double m = BitConverterToUInt32(objItemValue, 8) 10d / BitConverterToUInt32(objItemValue, 12);
//seconds(将byte[16]~byte[19]转成uint, 除以byte[20]~byte[23]转成的uint)
double s = BitConverterToUInt32(objItemValue, 16) 10d / BitConverterToUInt32(objItemValue, 20);
//计算经纬度数值, 如果是南纬, 要乘上(-1)
double dblGPSLatitude = (((s / 60 + m) / 60) + d) (chrGPSLatitudeRefEquals('N') 1 : -1);
string strLatitude = stringFormat("{0:#} deg {1:#}' {2:#00}\" {3}", d
, m, s, chrGPSLatitudeRef);
//纬度+经度
s_GPS坐标 += dblGPSLatitude + "+";
}
break;
case 0x0003:
//透过BitConverter, 将Value转成Char('E' / 'W')
//此值在后续的Longitude计算上会用到
chrGPSLongitudeRef = BitConverterToChar(objItemValue, 0);
break;
case 0x0004:
if (objItemValueLength == 24)
{
//degrees(将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint)
double d = BitConverterToUInt32(objItemValue, 0) 10d / BitConverterToUInt32(objItemValue, 4);
//minutes(将byte[8]~byte[11]转成uint, 除以byte[12]~byte[15]转成的uint)
double m = BitConverterToUInt32(objItemValue, 8) 10d / BitConverterToUInt32(objItemValue, 12);
//seconds(将byte[16]~byte[19]转成uint, 除以byte[20]~byte[23]转成的uint)
double s = BitConverterToUInt32(objItemValue, 16) 10d / BitConverterToUInt32(objItemValue, 20);
//计算精度的数值, 如果是西经, 要乘上(-1)
double dblGPSLongitude = (((s / 60 + m) / 60) + d) (chrGPSLongitudeRefEquals('E') 1 : -1);
}
break;
case 0x0005:
string strAltitude = BitConverterToBoolean(objItemValue, 0) "0" : "1";
break;
case 0x0006:
if (objItemValueLength == 8)
{
//将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint
double dblAltitude = BitConverterToUInt32(objItemValue, 0) 10d / BitConverterToUInt32(objItemValue, 4);
}
break;
}
}
}
return s_GPS坐标;
}
#endregion
很多朋友都不知道照片中可以储存 GPS 全球定位数据,甚至不知道自己的照片中带有这些数据。其实照片中的数据可以很好地记录自己的旅途足迹,并且能够很方便地按照地域来管理照片。下面我就详细说说怎么查看照片中的 GPS 数据,以及如何添加/修改照片中的 GPS 数据。
工具/原料
JPEG格式的照片
magicexif元数据编辑器
查看照片中的GPS信息
运行“MagicEXIF元数据编辑器”软件,点击大眼睛下面的“打开文件”按钮或工具栏的“打开”图标打开一张照片。
以一张iPhone 4拍摄的照片为例,此时切换到“GPS 信息”选项卡,可以看到列表中的GPS数据,但是右侧的地图区域会提示无法连接服务器。
3现在我们需要将地图调出来:在地图区域点击右键→“地图服务供应商”→“百度地图”(如果没有显示出来可以多试几次)。
4现在我们就可以看到这张照片的拍摄地点了,你可以通过鼠标拖拽来浏览地图。
5如果希望放大/缩小地图的比例,可以在地图区域点击右键→“地图级别”中调整,以我的照片为例,缩小后可以很清楚知道照片拍摄于北京市。
修改照片GPS信息
1继续以上面的照片做例子,首先编辑照片的纬度数据,双击列表中的“GPS 纬度”进入编辑模式。
2在d出的窗口中输入新的纬度,注意要按照“度, 分, 秒”的格式输入,比如北纬30度50分则输入“30, 50, 0”,然后点击“确认编辑”来应用。
3同理双击“GPS 经度”可以修改照片的GPS经度数据,完成编辑后可以看到被编辑的项目变成蓝色,而且右侧的地图也被更新了。点击工具栏的“保存”按钮保存对照片的编辑。
为照片添加GPS数据
打开一张没有GPS数据的照片,可以看到地图区域显示“无可用地理数据”,然后点击工具栏上的“增添项”按钮调出对话框。
在“显示”下拉列表中选择“GPS地理信息”,主要勾选下图中的四项数据,其他项目可以酌情添加,点击“确认添加”应用。
可以看到新添加的项目为绿色,按照以上修改GPS信息的方法即可完成对于照片定位数据的修改,修改后地图会自动更新。
注意事项
由于国内存在访问谷歌的限制,所以不能使用谷歌地图的服务,推荐使用百度地图
网络地图服务往往会对数据进行加密处理,所以定位结果可能会有几十米到几公里不等的偏差,属于正常范围
最近想对库里的拍照地点进行批量添加。
定位和获取库照片比较好解决。
但是添加地理位置信息就麻烦多了。
单反拍的照片传输进手机之后,是没有地理位置信息的。
找了网上的教程,获取照片地址信息,发现根本获取不到:
单反拍摄,没有GPS信息的照片返回:
iPhone拍摄,有地理位置信息的照片:
两种都没法获取位置信息。
如果将位置信息写成字典
强行加上,也无济于事。
突然发现该照片的资源PHAsset信息里,有location属性,是可以拿到位置信息的。那么通过对PHAsset的 *** 作是否可以添加GPS信息呢?
照片信息比从UIImage中取得的详细多了。
参考资料:
>
以上就是关于提取多个图片中的经纬度数据全部的内容,包括:提取多个图片中的经纬度数据、用什么软件可以查看照片的拍摄时间、修改时间 用什么软件可以直接查看照片上的GPS数据,并将照片定位到地、C# 如何获取照片中Exif信息里GPS信息与经纬度数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)