使用exiftool提取照片中的经纬度

exiftool工具可以对exif信息进行很多的操作。默认情况下:

exiftool a_geo.jpg

会显示各种默认的exif信息,包括经纬度。但默认显示的经纬度是度分秒格式,而我现在需要dd格式的经纬度,则可以这样提取:

exiftool -n -gpslatitude -gpslongitude IMG_3545.JPG

显示的结果为:

GPS Latitude : 42.3176472222222
GPS Longitude : -83.7321083333333

遭遇QGIS的一个crash bug:control feature rendering order

“Control feature rendering order”是QGIS一个很好的特性,特别是在点位密集的时候,若要根据不同属性展示重要性程度的时候。
但在点位数据量较大的时候,会引起QGIS崩溃。之前也遇到了一次,但当时是想办法绕过了(让点位按照真实世界的尺寸进行绘制,从而避免重叠问题)。这次遇到同样的问题,就仔细测试了一下,看看到底是什么问题。
1. 是否是数据格式的问题
原始数据是csv格式,尝试将其转换为shape file以及导入到postgis数据库。发现依旧是崩溃。

2. 是否是数据排序的问题
将原始数据按照期望的顺序进行事先排序,在不选择control feature rendering order时,绘图结果是满足需求了。但选择此绘图特性后,结果依旧。

3. 是否是数据大小的问题
将原始数据逐步缩小数据量,发现在3.05万行-3.1万行之间是个分水岭(大约1M数据量)。3.05万行不崩溃,3.1万行崩溃。说明此问题和内存相关?

4. 是否版本的影响?
尝试了2.18-0,2.18-2两个版本,以及mac sierra 10.12.2, 10.12.3两个版本,不影响测试结果。

5. 是否受操作系统的影响?
在virtualbox虚拟机里的ubuntu 16.04,QGIS 2.14版本,虽然很慢,但不崩溃。

尝试将此bug汇报给qgis开发组,但找了很久file bug的地方,最终发现还需要osgeo的账号,幸亏很久之前注册过账号,找回密码后提交了:

http://hub.qgis.org/issues/16025

BTW:祝新年快乐!

QGIS中TimeManager的一个问题修复

在QGIS中使用TimeManager时遇到一个问题,即满足时空要素要求后,时空数据展示不出来。点击数据的layer查看发现其对应的sql语句大概是:
dbname='citybigdata' host=localhost port=5432 sslmode=disable key='id' srid=4326 type=Point table="qqheat"."milocal" (geom) sql=cast("ts" as character) < '2016-11-09 21:05:00' AND cast("ts" as character) >= '2016-11-09 21:00:00'
将类似的语句直接在psql中发现执行的时候有问题,无法返回结果。但将语句修改一下即可解决:
dbname='citybigdata' host=localhost port=5432 sslmode=disable key='id' srid=4326 type=Point table="qqheat"."milocal" (geom) sql=cast("ts" as text) < '2016-11-09 21:05:00' AND cast("ts" as text) >= '2016-11-09 21:00:00'
即将其中的character改成text即可。
为了使插件工作正常,就需要修改timemanager的代码,使用grep工具找到该代码的位置:

cd .qgis2/python/plugins/timemanger
grep -rnw ‘.’ -e ‘character’

发现是如下代码的问题:

./.git/hooks/pre-commit.sample:26:# printable range starts at the space character and ends with tilde.
./CONTRIBUTING.md:13:* Go to http://www.loc.gov/standards/iso639-2/php/code_list.php and find the 2-character ISO 639-1
./docs/Doxyfile:586:# This tag can be used to specify the character encoding of the source files
./query_builder.py:9:STRINGCAST_FORMAT = ‘cast(“{}” as character) {} \'{}\’ AND cast(“{}” as character) >= \'{}\’ ‘
./query_builder.py:56: return ‘ cast(“{}” as character) LIKE \’%BC\”.format(attr)
./query_builder.py:63: return ‘ cast(“{}” as character) LIKE \’%AD\”.format(attr)
./query_builder.py:79: return ” ‘{}’ {} cast(\”{}\” as character) “.format(val, comparison, col)
./query_builder.py:87: return ” ‘{}’ {} cast(\”{}\” as character) “.format(val, comparison, col)

将具体的代码修改,然后重启qgis,即可工作正常。

Install psycopg2 on mac sierra

需要在我的mbp上进行数据入库测试,因此就需要安装psycopg2,但安装的时候一直有提示:

ld: library not found for -lssl

clang: error: linker command failed with exit code 1 (use -v to see invocation)

开始搜索以为库的位置不对,比如之前类似的问题:http://stackoverflow.com/questions/27264574/import-psycopg2-library-not-loaded-libssl-1-0-0-dylib

后来感觉不太对,又加上sierra关键词找,果然找到一个类似问题:
http://stackoverflow.com/questions/39767810/cant-install-psycopg2-package-through-pip-install-is-this-because-of-sierra
发现解决方法非常简单,就是安装xcode-select工具。

xcode-select –install

然后再安装psycopg2就没有任何问题了:

sudo pip install psycopg2

macbook 12.2.2测试版外接samsung SyncMaster 2333显示器问题

在这个public beta版本之前,这台samsung SyncMaster 2333外接显示器工作正常,系统升级public beta后突然不认之前的分辨率(1920X1080),变成13.9吋800X600的显示器,Scaled模式也只能到1280X1024分辨率了。
不能认识,于是注册了feedback账号作为bug汇报,但在public beta2版本时此问题依然未解决。

今天突然在stackexchange上搜索到了一个可用的方案,大喜,记录之:

You can go to System Preferences > Displays, then option-click (press option key while left-clicking) on Scaled to expose additional resolutions that aren’t exposed with a normal left-click.

虽然这种模式的1920X1080不是全屏(有小部分黑边),但比之前的模式大好!

–update: public beta3 解决了这个问题,看来feedback还是有作用的。

Apple Mail 空间清扫记

MacBook Pro的硬盘虽然比较大,但也很小啊,用着用着就快满了。于是开始清理硬盘。使用du命令逐个检查大容量目录:

du -sh *

发现Library目录有点大的异常(128G),进一步定位,发现是~/Library/Containers/com.apple.mail/Data/Library/Logs/Mail这个目录下的文件有异常:

 3.0G  3 15 20:46 imap.mxhichina.com-15057C89-1A29-4B77-8AC5-FD49C98539DE.txt

64G  3 15 20:46 mail.cstnet.cn-19697C05-495A-40CB-9A84-2728870BB205.txt

162M  3 15 20:46 mail.cstnet.cn-2A45BF1E-007C-4923-9C7F-3FD6443C85ED.txt

208M  3 15 20:46 p06-imap.mail.me.com-87D1B5E7-0919-431C-9F5A-FE9DEA59228D.txt

看到没?其中有个64G的log文件!估计是在mail中的邮件连接诊断->记录连接活动部分产生的,先取消这个功能。

将这些文件删除之,找回不少容量啊。

用正则处理srt电影字幕

下了个电影,本身带的字幕翻译质量很差。从网上找了个高质量的字幕,结果发现在mplayer里无法显示,用文本编辑器打开字幕显示也很正常,和之前的字幕对比好像也没有什么差异。最后发现是在时间戳下面多出了一个空行:

1
00:00:10,000 --> 00:00:20,020

 本字幕仅供学习交流试看使用 禁止用于商业行为
 并请于下载后24小时内删除 若因私自传播造成法
 律问题 本人概不负责。

2
00:00:30,897 --> 00:00:33,333

“中东 1997年”

3
00:01:15,708 --> 00:01:18,912

呼叫01阿尔法,我们已控制住猎鹰

只要把空行删除,mplayer就可以正常显示字幕,于是用正则表达式进行替换,在komodoedit里用替换,打开多行、正则:

(,\d{3})\r\n\s+

替换为:

\1\r\n

这样就可以愉快地观影了。

在Mac AIR上安装win7

领导出差要用windows,只好将手上的笔记本apple air想办法装一个windows7系统了。但在安装过程中遇到了一堆问题。遇到的问题主要有以下3个。

1. 我的硬盘空间都去哪儿了

256GB的硬盘空间,不注意就快要满了。删除了个人目录下的多数空间,结果发现并没有空出来多少。找了个硬盘占用软件daisydisk看了一下,发现有100多GB的未知占用空间,不知道是什么。最后搜索下来发现是Time Machine的本地快照。

关于 Time Machine 本地快照

这个东东占用空间太大,采用这个网页的办法进行了处理:

Disable Time Machine Local Backups in Mac OS X Lion

即:

sudo tmutil disablelocal

然后空间就回来了,瞬间感觉呼吸正常了。

 

2. 安装过程中无法选择分区进行安装

按照boot camp助手提示进行操作,找到一个win7 64位的安装盘,以及一个不用的U盘(8G的),结果在U盘启动进行WIN7安装过程中,怎么也无法选择一个分区继续了。继续搜索,结果找到一个奇葩的解决方案:

在制作win7启动盘过程时,U盘要放在AIR右边的插口,而用U盘启动时需要放到左边的插口!

而且,这个方案很有效!感觉很奇葩。

 

3. 硬件驱动安装

win7安装好后,还需要在安装u盘的boot comp辅助程序,驱动对应的air硬件。但感觉windows下的触摸板怎么也调不出右键效果,只好再外接一个鼠标用了。

 

使用exiftool为照片批量添加空间坐标

经常面临这样的问题:出野外拍了很多照片,或出去旅游拍了不少照片,但由于相机上未带GPS,导致相片的exif信息上是没有空间坐标信息的,所以经常需要将一堆照片附加空间坐标信息。常用的解决办法是拍照时再随身携带一个GPS,每次拍照都打一个点,这样可以根据时间信息将空间信息后期对应到照片上。但有的时候,我们并不想携带一个GPS或没有GPS,这是就带GPS的智能手机就发挥作用了(打开GPS然后拍照,相当于GPS导航仪的打点功能)。

一、下载&安装exiftool软件
从官方下载该软件的对应版本,目前支持windows和mac系统。

二、基于GPS设备的处理

exiftool -geotag=track.log /Users/username/path/to/picture

其中,track.log是GPS设备的记录,根据时间信息对应到需要处理的照片上。

三、基于智能手机的处理
首先,需要在拍照的同时,使用打开GPS的智能手机拍照。之后将智能手机的对应照片拷贝出来,从这些照片中将对应的GPS信息导出。

exiftool -fileOrder gpsdatetime -p gpx.fmt -d %Y-%m-%dT%H:%M:%SZ /Users/username/path/to/phone_pictures > out.gpx

其中,gpx.fmt是一个模板,其文件内容如下:

#------------------------------------------------------------------------------
# File: gpx.fmt
#
# Description: Example ExifTool print format file for generating GPX track log
#
# Usage: exiftool -p gpx.fmt -d %Y-%m-%dT%H:%M:%SZ FILE [...] > out.gpx
#
# Requires: ExifTool version 8.10 or later
#
# Revisions: 2010/02/05 - P. Harvey created
#
# Notes: 1) All input files must contain GPSLatitude and GPSLongitude.
# 2) The -fileOrder option may be used to control the order of the
# generated track points.
#------------------------------------------------------------------------------
#[HEAD]
#[HEAD]
#[HEAD] #[HEAD]1
#[HEAD] #[BODY] #[BODY] $gpsaltitude#
#[BODY]
#[BODY]
#[TAIL]
#[TAIL]
#[TAIL]

然后基于生成的out.gpx结果,给待处理的照片添加gps:

exiftool -geotag out.gpx '-geotime<${DateTimeOriginal}+00:00' /path/to/pictures

更多使用方法请参考:
Geotagging with ExifTool

mac OSX下virtualbox的文件夹共享

在我的air笔记本上,用virtualbox虚拟了一个ubuntu server来作为开发的测试服务器。其中需要用到host上的共享文件夹来验证开发的结果。virtualbox下的虚拟机使用共享文件夹需要用到VBoxGuestAddition才可以。在ubuntu server下我直接用光驱挂载iso或使用菜单里对应的功能,在客户机(ubuntu server)都没有找到对应的盘。因此需要将iso文件直接传递进来后:

mkdir test
sudo mount -o loop /path/to/VBoxGuestAdditions.iso test
cd test
sudo sh ./VBoxLinuxAdditions.run
sudo poweroff

安装完成后需要关机,然后在Mac下执行:

VBoxManage sharedfolder add "my-ubuntu-vm" --name "westdc"\
--hostpath "/Users/username/path"

然后启动虚拟机ubuntu,再执行:

sudo mkdir /mnt/web
sudo chmod 777 /mnt/web
sudo mount -t vboxsf -o uid=1000,gid=1000 westdc /mnt/web

要注意,挂载点的名称和共享的名称不能一样,否则会导致错误。

这样,/mnt/westdc目录就和mac上的目录共享了,将对应的web目录设置为此目录就可以通过web访问来进行开发了。

BTW: 可以将命令放入到/etc/rc.local让其开机自启动。