欢迎关注博主的微信公众号:“智能遥感”。

该公众号将为您奉上Python地学分析、爬虫、数据分析、Web开发、机器学习、深度学习等热门源代码。

本人的GitHub代码资料主页(持续更新中,多给Star,多Fork):

https://github.com/xbr2017

CSDN也在同步更新:

https://blog.csdn.net/XBR_2014

 本节通过鸟类GPS数据来分析鸟类行踪,有趣、好玩,赶紧来了解一下吧。

每逢春运的时候,各大互联网公司通过GPS数据来分析全国各地人民的迁徙活动,其实这背后就涉及到地理信息系统的空间分析。本节以鸟类GPS数据来分析鸟类活动情况,如果你掌握了本节的方法,在获得人类活动GPS数据之后,也可以用此方法分析人类的活动,从中挖掘出有价值的信息。

本节数据来源于动物追踪数据库网站https://www.movebank.org/。先来看看鸟类活动的小视频吧!!!

编程环境

操作系统:windows

Python版本:2.7

IDE版本:PyCharm 2018.2.4专业版

数据格式转换

将下载的鸟类GPS数据保存为csv格式,然后转换为shapefile(简称shp)矢量数据。可以使用location-long和location-lat列中的x和y坐标来创建点和副本以及单个本地标识符和时间戳列作为属性。shp格式不支持真实的日期/时间字段,因此需要将时间戳信息保存为字符串。其代码如下所示:

# _*_ coding: utf-8 _*_
__author__ = 'xbr'
__date__ = '2018/11/12 11:51'from osgeo import ogr, osr# 动物的GPS数据
csv_fn = r"D:\osgeopy-data\Galapagos\Galapagos Albatrosses.csv"
# 先定义好即将输出的shp文件
shp_fn = r"D:\osgeopy-data\Galapagos\albatross_dd.shp"
# 定义为WGS84坐标系
sr = osr.SpatialReference(osr.SRS_WKT_WGS84)# 获取驱动程序对象
shp_ds = ogr.GetDriverByName('ESRI Shapefile').CreateDataSource(shp_fn)
# 创建矢量点图层
shp_lyr = shp_ds.CreateLayer('albatross_dd', sr, ogr.wkbPoint)
# 添加属性字段:tag_id
shp_lyr.CreateField(ogr.FieldDefn('tag_id', ogr.OFTString))
# 添加属性字段:timestamp
shp_lyr.CreateField(ogr.FieldDefn('timestamp', ogr.OFTString))
# 创建空白特征,方便后面存储
shp_row = ogr.Feature(shp_lyr.GetLayerDefn())csv_ds = ogr.Open(csv_fn)
csv_lyr = csv_ds.GetLayer()
# 主要实现将逐个CSV中的点存储到shp中
for csv_row in csv_lyr:x = csv_row.GetFieldAsDouble('location-long')y = csv_row.GetFieldAsDouble('location-lat')# 创建几何点shp_pt = ogr.Geometry(ogr.wkbPoint)# 添加点shp_pt.AddPoint(x, y)tag_id = csv_row.GetField('individual-local-identifier')timestamp = csv_row.GetField('timestamp')# 添加点以及对应的属性tag_id和timestampshp_row.SetGeometry(shp_pt)shp_row.SetField('tag_id', tag_id)shp_row.SetField('timestamp', timestamp)# 生成特征shp_lyr.CreateFeature(shp_row)del csv_ds, shp_ds

该代码将数据保存为shp文件,下面通过ArcGis软件来展示一下鸟类GPS活动点叠加在地图上的效果。

计算相邻点之间的距离

要计算距离,将要按顺序遍历每只鸟的点,然后计算每个位置与前一个位置之间的距离,因此你需要在循环时跟踪前一个点。这些点应该在原始.csv文件中的顺序正确,这意味着它们也在你创建的shapefile中按顺序排列,但是为了以防万一,你将添加要检查的代码。如果它确实发现了一些无序的点,它会抛出异常,以便纠正问题。代码如下:

# _*_ coding: utf-8 _*_
__author__ = 'xbr'
__date__ = '2018/11/13 22:07'from osgeo import ogr, osr# 从属性列获取唯一值的函数
def get_unique(datasource, layer_name, field_name):sql = 'SELECT DISTINCT {0} FROM {1}'.format(field_name, layer_name)lyr = datasource.ExecuteSQL (sql)values = []for row in lyr:values.append(row.GetField(field_name))datasource.ReleaseResultSet(lyr)return values# 计算相邻点之间的距离
ds = ogr.Open(r'D:\osgeopy-data\Galapagos', True)
lyr = ds.GetLayerByName('albatross_lambert')
lyr.CreateField(ogr.FieldDefn('distance', ogr.OFTReal))tag_ids = get_unique(ds, 'albatross_lambert', 'tag_id')for tag_id in tag_ids:print('Processing ' + tag_id)lyr.SetAttributeFilter("tag_id ='{}'".format(tag_id))row = next(lyr)previous_pt = row.geometry().Clone()previous_time = row.GetField('timestamp')for row in lyr:current_time = row.GetField('timestamp')if current_time < previous_time:raise Exception('Timestamps out of order')current_pt = row.geometry().Clone()distance = current_pt.Distance(previous_pt)row.SetField('distance', distance)lyr.SetFeature(row)previous_pt = current_ptprevious_time = current_time
del ds

获取最长距离

在能够计算相邻两点之间的距离之后,就可以计算每只鸟的总飞行距离,可以使用SQL查找哪些鸟具有按时间顺序下GPS之间的最长距离:

ds = ogr.Open(r'D:\osgeopy-data\Galapagos')
for tag_id in get_unique(ds, 'albatross_lambert', 'tag_id'):sql = """SELECT MAX(distance) FROM albatross_lambertWHERE tag_id = '{0}'""".format(tag_id)
lyr = ds.ExecuteSQL (sql)
for row in lyr:print '{0}: {1}'.format(tag_id, row.GetField(0))

查找结果如下:

4264-84830852: 106053.530233
4266-84831108: 167097.198703
1103-1103: 69342.7642097

Python地学分析 — 通过GPS数据分析鸟类行踪 07相关推荐

  1. Python地学分析 — 地理空间参考系介绍

    欢迎关注博主的微信公众号:"智能遥感". 该公众号将为您奉上Python地学分析.爬虫.数据分析.Web开发.机器学习.深度学习等热门源代码. 本人的GitHub代码资料主页(持续 ...

  2. Python地学分析 — 矢量数据集介绍

    欢迎关注博主的微信公众号:"智能遥感". 该公众号将为您奉上Python地学分析.爬虫.数据分析.Web开发.机器学习.深度学习等热门源代码. 什么叫矢量数据,在这里,小编先给大家 ...

  3. Python地学分析 — GDAL将多个遥感图像叠加保存为tif文件

    欢迎关注博主的微信公众号:"智能遥感". 该公众号将为您奉上Python地学分析.爬虫.数据分析.Web开发.机器学习.深度学习等热门源代码. 本人的GitHub代码资料主页(持续 ...

  4. Python地学分析 — 建立矢量数据缓冲区 06

    欢迎关注博主的微信公众号:"智能遥感". 该公众号将为您奉上Python地学分析.爬虫.数据分析.Web开发.机器学习.深度学习等热门源代码. Python的小伙伴们,你们好!上一 ...

  5. Python地学分析 — GDAL对遥感影像重投影

    欢迎关注博主的微信公众号:"智能遥感". 该公众号将为您奉上Python地学分析.爬虫.数据分析.Web开发.机器学习.深度学习等热门源代码. 本人的GitHub代码资料主页(持续 ...

  6. python 曲线分析_大数据分析之Python计算KS值并绘制KS曲线

    本篇教程探讨了大数据分析之Python计算KS值并绘制KS曲线,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. python实现KS曲线,相关使用方法请参考上篇博客-R语言实现K ...

  7. python 可视化分析平台_python 数据分析数据可视化工具matplotlib

    说明: 数据可视化中的数据集下载地址:(数据来源:从零开始学python数据分析和挖掘) 链接:https://pan.baidu.com/s/1zrNpzSNVHd8v1rGFRzKipQ 提取码: ...

  8. python量化分析数据_Python数据分析_量化分析.pdf

    法律声明  本课件包括:演示文稿,示例,代码,题库,视频和声 音等,小象学院拥有完全知识产权的权利:只限于善意 学习者在本课程使用,不得在课程范围外向任何第三方 散播.任何其他人或机构不得盗版.复制 ...

  9. python批量读取图片gps位置_某少儿不宜网站图片拍摄位置分析,Python批量读取图片GPS位置!...

    原标题:某少儿不宜网站图片拍摄位置分析,Python批量读取图片GPS位置! 1. python读取图片exif属性中的GPS信息 智能手机或平板如果在拍照时开启定位服务,照片中就会记录拍照位置信息和 ...

  10. 命名管道 win7未响应_大数据分析Python建立分析数据管道

    如果您曾经想通过流数据或快速变化的数据在线学习Python,那么您可能会熟悉数据管道的概念.数据管道允许您通过一系列步骤将数据从一种表示形式转换为另一种表示形式.数据管道是数据工程的关键部分,我们将在 ...

最新文章

  1. 把ePO4.5或者4.6从32位迁移到64位系统
  2. Spark Worker启动源码
  3. Exchange Server 2010续定证书系列3-将续定后证书导入服务器
  4. html画线需要适应不同屏幕,hr标签不止创建html水平线也可以画圆噢
  5. tensorflow随笔-新的计算图
  6. linux 产生0~1之间的随机数
  7. 鸿蒙系统执行效率,华为鸿蒙手机优势:兼容所有安卓软件、比安卓运行速度快60%...
  8. FileSystemWatcher监听文件是否有被修改
  9. 2017php行情,2017年蔬菜行情特点及未来蔬菜价格走势分析
  10. 中如何移动物体在画面中的位置_组合柜摆在客厅中什么位置最旺运?客厅中,财位是如何确定的?...
  11. 双目测距中用到的视差图和景深的关系推导----三种方法详细解
  12. luogu P1962 斐波那契数列
  13. WPF开发为按钮提供添加,删除和重新排列ListBox内容的功能
  14. 剑指Offer——重建二叉树
  15. 服务器总线协议_第一章----I2C总线协议入门
  16. 长江大学计算机学院江琼琴,长江大学外国语学院硕士研究生校友名录(2005-2012级)...
  17. require.js官方使用教程
  18. 2021-BUPT计组课设硬布线控制器
  19. 小米文件管理连接服务器,小米文件管理器中的远程管理无法连接解决方法
  20. 华为机试2021答案

热门文章

  1. 手机上将mp4转换成amv_如何在Linux上将所有文本从大写转换为小写?
  2. 中文的括号和英文的括号区别_如何在word里快捷键入六角括号
  3. 火线精英正在维护服务器吗,火线精英1月20日23:00更新维护公告
  4. 解决pychram:卡在Updating Python Interpreter
  5. 真正拖垮打工人的,是沉没成本
  6. 欧奈尔RPS曲线的编制方法及常见问题解答
  7. xp隐藏桌面计算机图标不见了怎么办,XP系统桌面IE图标不见了怎么办?IE图标消失了怎么恢复?...
  8. 小米4c一直显示无服务器,小米路由器4C不能上网(连不上网)怎么办?
  9. matlab ill,Matlab跑GMM聚类时出现Ill-conditioned covariance created at iteration xx错误提示
  10. Java的依赖对象是什么意思_面向对象编程依赖注入详解