精华内容
下载资源
问答
  • 主要介绍了Python空间数据处理之GDAL读写遥感图像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 基于ArcGIS Pro的Python空间数据处理与分析是一本以ARCGIS PRO的ptyhon开发学习。
  • 近几年,基于位置服务的应用层出不穷,如GPS车辆导航、打车、外卖、运动等,产生了大量的具有时空信息的轨迹数据,对此类数据的... 本课程讲述了Python对时空数据的处理,以及机器学习方法在空间数据处理上的应用。
  • Python 空间数据处理

    千次阅读 2016-09-10 16:32:52
    Geopy测试GeoCodeing:得出具体的地址from geopy.geocoders import Nominatim geolocator = Nominatim() location = geolocator.geocode("中国人民大学") print(location.address)中国人民大学, 人民大学北路, 稻香园...

    Geopy测试

    GeoCodeing:得出具体的地址

    from geopy.geocoders import Nominatim
    geolocator = Nominatim()
    location = geolocator.geocode("中国人民大学")
    print(location.address)
    中国人民大学, 人民大学北路, 稻香园南社区, 海淀区, 北京市, 100872, 中国
    

    经纬度信息

    print((location.latitude, location.longitude))
    (39.96976785, 116.307086480528)
    

    反向解码:通过经纬度信息得到具体的地址

    location1 = geolocator.reverse("29.60173, 103.48222")
    print location1.address
    名山中路, 峨眉山市, 峨眉山市 / Emeishan, 乐山市 / Leshan, 四川省, 中国
    
    location1.point
    Point(29.6015657, 103.4791074, 0.0)
    

    坐标位置的具体信息

    location1.raw
    {u'address': {u'city': u'\u5ce8\u7709\u5c71\u5e02',
      u'country': u'\u4e2d\u56fd',
      u'country_code': u'cn',
      u'county': u'\u5ce8\u7709\u5c71\u5e02 / Emeishan',
      u'road': u'\u540d\u5c71\u4e2d\u8def',
      u'state': u'\u56db\u5ddd\u7701',
      u'state_district': u'\u4e50\u5c71\u5e02 / Leshan'},
     u'boundingbox': [u'29.5996549',
      u'29.6015657',
      u'103.4791074',
      u'103.4885191'],
     u'display_name': u'\u540d\u5c71\u4e2d\u8def, \u5ce8\u7709\u5c71\u5e02, \u5ce8\u7709\u5c71\u5e02 / Emeishan, \u4e50\u5c71\u5e02 / Leshan, \u56db\u5ddd\u7701, \u4e2d\u56fd',
     u'lat': u'29.6015657',
     u'licence': u'Data \xa9 OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright',
     u'lon': u'103.4791074',
     u'osm_id': u'297311246',
     u'osm_type': u'way',
     u'place_id': u'125494104'}
    

    距离的测量

    • Geopy can calculate geodesic distance between two points using the Vincenty distance or great-circle distance formulas, with a default of Vincenty available as the class geopy.distance.distance, and the computed distance available as attributes (e.g., miles, meters, etc.).
    from geopy.distance  import vincenty,great_circle
    newport_ri = (29.60173, 103.48222)  #峨眉山
    cleveland_oh = (39.96976785, 116.307086480528)  # 中国人民大学
    print(vincenty(newport_ri, cleveland_oh).km)
    1640.02356001
    
    print(great_circle(newport_ri,cleveland_oh).km)
    aa=great_circle(newport_ri,cleveland_oh)
    1640.52238261
    
    from geopy import Location
    aa=Location(address="峨眉山")
    print aa.address
    峨眉山
    

    下面演示geopy 利用http://nominatim.openstreetmap.org/ 封装细节

    import urllib2
    from  bs4  import BeautifulSoup
    def getDetailUrl(search_add):
        nominatim="http://nominatim.openstreetmap.org/"
    
        search_url=nominatim+"search.php?q=%s&polygon=1" %search_add
        # urllib2.urlopen(search_url)
        req=urllib2.Request(search_url)
        cont=BeautifulSoup(urllib2.urlopen(req))
        detail_url_suffix=cont.find('a',class_="btn btn-default btn-xs details")
        detail_url=nominatim+detail_url_suffix['href']
        detail_cont=BeautifulSoup(urllib2.urlopen(detail_url))
        return detail_cont
    search_add="中国人民大学"
    detail_cont=getDetailUrl(search_add)
    print detail_cont.find("table",id="locationdetails").text
    Name 中国人民大学 (name)
    Chinesische Volksuniversität (name:de)
    Renmin University of China (name:en)
    Université populaire de Chine (name:fr)
    中国人民大学 (name:zh)
    
    Typeamenity:university
    Last Updated2015-12-25 09:18
    Admin Level15
    RankOther: 30
    CoveragePolygon
    Centre Point39.96976785,116.307086480528
    OSMway 30725330
    Extra Tags http://www.ruc.edu.cn/ (website)
    
    print detail_cont.find("table",id="address").text
    Local name
    Type
    OSM
    Admin level
    
    Distance
    
    
    
    
    
    中国人民大学
    amenity:university
    
    
    0
    details >
    
    
    人民大学北路
    highway:residential
    way 165743483
    15
    0
    details >
    
    
    稻香园南社区
    place:village
    node 2036482794
    15
    0
    details >
    
    
    海淀路社区
    place:village
    node 2449570839
    15
    0
    details >
    
    
    海淀区
    place:suburb
    relation 5505984
    6
    0
    details >
    
    
    北京市
    place:state
    relation 912940
    4
    0
    details >
    
    
    100872
    place:postcode
    
    
    0
    details >
    
    
    中国
    place:country
    relation 270056
    2
    ~13 m
    details >
    
    
    cn
    place:country_code
    
    
    0
    details >
    
    展开全文
  • GDAL是空间数据处理的开源包,支持多种数据格式的读写。遥感图像是一种带大地坐标的栅格数据,遥感图像的栅格模型包含以下两部分的内容: 栅格矩阵:由正方形或者矩形栅格点组成,每个栅格点所对应的数值为该点的像...

    GDAL是空间数据处理的开源包,支持多种数据格式的读写。遥感图像是一种带大地坐标的栅格数据,遥感图像的栅格模型包含以下两部分的内容:

    栅格矩阵:由正方形或者矩形栅格点组成,每个栅格点所对应的数值为该点的像元值,在遥感图像中用于表示地物属性值;遥感图像有单波段与多波段,波段表示地物属性的种类,每个波段表示地物一种属性。

    大地坐标空间数据参考表示地图的投影信息;仿射矩阵能将行列坐标映射到面坐标上。

    GDAL读写遥感数据的代码:

    from osgeo import gdal
    import os
    
    class GRID:
    
        #读图像文件
        def read_img(self,filename):
            dataset=gdal.Open(filename)       #打开文件
    
            im_width = dataset.RasterXSize    #栅格矩阵的列数
            im_height = dataset.RasterYSize   #栅格矩阵的行数
    
            im_geotrans = dataset.GetGeoTransform()  #仿射矩阵
            im_proj = dataset.GetProjection() #地图投影信息
            im_data = dataset.ReadAsArray(0,0,im_width,im_height) #将数据写成数组,对应栅格矩阵
    
            del dataset 
            return im_proj,im_geotrans,im_data
    
        #写文件,以写成tif为例
        def write_img(self,filename,im_proj,im_geotrans,im_data):
            #gdal数据类型包括
            #gdal.GDT_Byte, 
            #gdal .GDT_UInt16, gdal.GDT_Int16, gdal.GDT_UInt32, gdal.GDT_Int32,
            #gdal.GDT_Float32, gdal.GDT_Float64
    
            #判断栅格数据的数据类型
            if 'int8' in im_data.dtype.name:
                datatype = gdal.GDT_Byte
            elif 'int16' in im_data.dtype.name:
                datatype = gdal.GDT_UInt16
            else:
                datatype = gdal.GDT_Float32
    
            #判读数组维数
            if len(im_data.shape) == 3:
                im_bands, im_height, im_width = im_data.shape
            else:
                im_bands, (im_height, im_width) = 1,im_data.shape 
    
            #创建文件
            driver = gdal.GetDriverByName("GTiff")            #数据类型必须有,因为要计算需要多大内存空间
            dataset = driver.Create(filename, im_width, im_height, im_bands, datatype)
    
            dataset.SetGeoTransform(im_geotrans)              #写入仿射变换参数
            dataset.SetProjection(im_proj)                    #写入投影
    
            if im_bands == 1:
                dataset.GetRasterBand(1).WriteArray(im_data)  #写入数组数据
            else:
                for i in range(im_bands):
                    dataset.GetRasterBand(i+1).WriteArray(im_data[i])
    
            del dataset
    
    if __name__ == "__main__":
        os.chdir(r'D:\Python_Practice')                        #切换路径到待处理图像所在文件夹
        run = GRID()
        proj,geotrans,data = run.read_img('LC81230402013164LGN00.tif')        #读数据
        print proj
        print geotrans
        print data
        print data.shape
        run.write_img('LC81230402013164LGN00_Rewrite.tif',proj,geotrans,data) #写数据
      
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    在GDAL遥感影像读写的基础上,我们可以进行遥感图像的各种公式计算和统计分析。
    例如我们所熟知的计算NDVI(归一化植被指数),只要在以上代码倒数第二行中插入代码:

    import numpy as np
    data = data.astype(np.float)
    ndvi = (data[3]-data[2])/(data[3]+data[2])                         #3为近红外波段;2为红波段
    run.write_img('LC81230402013164LGN00_ndvi.tif',proj,geotrans,ndvi) #写为ndvi图像
      
    • 1
    • 2
    • 3
    • 4

    当然,这是理想的NDVI,实际处理NDVI还会遇到一些其他要处理的问题。例如NDVI值应该在区间[-1,1]内,但实际中会出现大于1或小于-1的情况,或者某些像点是坏点,出现空值nan,需要进一步的配套处理。

    展开全文
  • python空间数据处理不一定要选课,哈哈哈 最近学校开了门python空间数据处理,感觉有不止1mol(1mol=6.02*10^23)人去上这门课,说句实在话,如果你知道椭球体投影和坐标那些东西,并系统地学过一门面向对象语言...

    学python空间数据处理不一定要选课,哈哈哈

    最近学校开了门python空间数据处理,感觉有不止1mol(1mol=6.02*10^23)人去上这门课,说句实在话,如果你知道椭球体投影和坐标那些东西,并系统地学过一门面向对象语言(不论它是C++,C#或者是java),并掌握了一些基础的数据结构知识,这门课你不用去上了。我个人猜测大家和我一样是更想要学分,并不是想学东西,因为你想学的东西的话,资源就多了而且并不一定要上课。不过我听过直播,宋老师真是个贴心的好人,连命令行窗口都手把手教。
    闲话少说,为了给空间数据处理做准备,我准备了一些用的比较多的库,如果后续有补充,我将进行博客连载,当然方法最重要了,一通百通才是王道。

    1. 主流的python库安装方法不一定成功

    这里主流的python库安装方法指的是:在安装pip的前提下,直接使用pip install 库名称`就好了,当然了,系统默认的镜像源慢得像蜗牛一样,但是清华的镜像源又下架了,我推荐使用豆瓣的镜像源,网址是:https://pypi.doubanio.com/simple,非常简单,你只需要pip install 库名称==版本名 -i 镜像源地址,大致就这么个简单的语法规则,以numpy库安装为例,在命令行窗口输入下面的语句即可完成numpy库的安装

    pip install numpy -i https://pypi.doubanio.com/simple

    这里我要说明一下,如scipy,pandas,matplotlib都可以用这种方法安装成功,其实我也是比较推荐使用这种方法的,实在不行再用下面的安装方法。

    2.whl文件的安装方法

    目前,就小编我的孤陋寡闻,whl文件安装只要你下载文件版本对应,成功率100%吧,哈哈哈。我在这里推荐一个很牛逼的whl文件下载网址:

    https://www.lfd.uci.edu/~gohlke/pythonlibs/
    这个网址基本全了你要的库,安装方法很简单,复杂的话我就不敢拿出来了,找到你要的库,下载到本地电脑文件夹中,这里以GDAL库安装为例:
    在这里插入图片描述

    在网页中找到你要的whl文件,这里cp37代表支持python3.7,cp36代表支持python3.6,对应下载即可。
    这里以GDAL库安装为例(因为主流方法应该是不能成功了),因为我是python3.7版本,我下载了GDAL-2.4.1-cp37-cp37m-win_amd64.whl这个文件,然后呢,打开你的命令行窗口,找到该文件所在文件夹(一般我是通过右键在文件属性里复制粘贴来找的),然后输入

    cd C:\Users\Sun Strong\Desktop

    ,C:\Users\Sun Strong\Desktop是该文件所在的文件夹,然后输入

    pip install GDAL-2.4.1-cp37-cp37m-win_amd64.whl

    ,其中GDAL-2.4.1-cp37-cp37m-win_amd64.whl是文件全名(文件名+后缀)。
    在这里插入图片描述
    由于我的库里面已经有了GDAL,所示pip提示我已经安装了。

    pyproj和scikit_learn都可以使用该方法安装成功。

    3.ospybook是特殊的存在

    值得一提的是,ospybook你可以用下列命令完成安装:

    pip install https://github.com/cgarrard/osgeopy-code/raw/master/ospybook-latest.zip

    到这儿,仅仅一小部分的python库算是安装好了,下次博哥我给大家带来我认为最好用的python集成开发环境。

    展开全文
  • 该函数是SpatialReference类的一个构造函数,它创建了一个SpatialReference类的对象,用以存储空间参考信息。 (2)object.ImportFromEPSG(4326) 该函数是SpatialReference类的一个成员函数,它从EPSG中导入一个空间...
    1. 流程图如下:

    2. 用到的函数:
      (1)object=ogr.SpatialReference()
      该函数是SpatialReference类的一个构造函数,它创建了一个SpatialReference类的对象,用以存储空间参考信息。
      (2)object.ImportFromEPSG(4326)
      该函数是SpatialReference类的一个成员函数,它从EPSG中导入一个空间参考。object.ImportFromEPSG(4326)表示从EPSG中导入WGS84参考(点击此处可以查看EPSG里面各种空间参考以及编号)。
      (3) trans=osr.CoordinateTransformation(spatialref_source,spatialref_target)
      该函数是CoordinateTransformation类(该类用于在不同坐标系之间进行转换)的构造函数,构建一个CoordinateTransformation对象,接下来可以利用该对象访问CoordinateTransformation类的成员函数以完成点坐标在不同空间参考下的转换。
      (4)after_trans_point=trans.TransformPoint(x,y)
      该函数是CoordinateTransformation类的一个成员函数,使用CoordinateTransformation类的对象调用该函数可以完成点的坐标在不同空间参考下的转换。该函数的返回值为元祖(tuple)。
      (5)after_trans_points=trans.TransformPoints([(x1,y1),(x2,y2)])
      该函数同样为CoordinateTransformation类的成员函数,用来转换多个点,该函数的形式参数是一个列表。

    3. 点的转换代码

    #coding=utf-8 
    from osgeo import osr,ogr,gdal
    def point_transform(source_ref,target_ref,x,y):
    #创建目标空间参考
        spatialref_target=osr.SpatialReference()
        spatialref_target.ImportFromEPSG(target_ref) #西安80 高斯可吕格投影
        #创建原始空间参考
        spatialref_source=osr.SpatialReference()
        spatialref_source.ImportFromEPSG(source_ref)  #WGS84
            #构建坐标转换对象,用以转换不同空间参考下的坐标
        trans=osr.CoordinateTransformation(spatialref_source,spatialref_target)
        coordinate_after_trans=trans.TransformPoint(x,y)
        return coordinate_after_trans
    	 #以下为转换多个点(要使用list)
        #coordinate_trans_points=trans.TransformPoints([(117,40),(120,36)])
        #print(coordinate_trans_points)
    
    
    #函数调用
    point_trans=point_transform(4326,2331,120,36)
    #4326 为原始空间参考的ESPG编号  2331为目标空间参考的ESPG编号
    #120为经度,36为纬度
    print(point_trans)
    
    

    注:#coding=utf-8 用来解决代码中有中文时会出错的问题

    1. 结果
      运行结果(第三个数0.0表示的是高程)
    展开全文
  • Python空间数据处理环境搭建

    千次阅读 2018-04-26 09:45:34
    Python空间数据处理环境搭建 作者:阿振 邮箱:tanzhenyugis@163.com 博客:https://blog.csdn.net/theonegis/article/details/80089375 修改时间:2018-04-26 优酷视频地址:...
  • #获取空间数据(获取x、y坐标) spatial_data=feature_element.geometry() x=spatial_data.GetX() y=spatial_data.GetY() #获取属性值 year=feature_element.GetField("截止年") print i,"----","x: ",x," y ",...
  • 基于python高效处理空间数据,包含一些平时研发过程中的经验,供大家参考。
  • HDF格式 一种能有条不紊 、完备地保存遥感影像的属性和空间信息数据 , 同时使查询和提取相关数据也很方便容易的数据格式格式。HDF格式是一种较为常见的遥感...python处理HDF数据的开源包,笔者安装的pyhdf4(电脑配置WI
  • 随着地理信息的迅速发展,如何快速处理海量的地理空间数据,是提高地理信息服务的关键。...文中说明了Python语言在地理空间数据处理的特点,并例举了批量定义投影、转换投影、数据裁切等空间数据批量处理的应用实例。
  • 在《GDAL读写遥感图像》中,有提到了GDAL支持多种数据格式,那么,如何对这些格式进行相互转换呢?在GDAL中,这其实非常简单,仅在写图像时稍加修改即可。例如,当我需要将某种栅格图像转换为img格式时,只需将...
  • 基于Python语言的空间数据处理.pdf
  • 数据来源于:中国气象科学数据共享服务网...本文将带有缺省值的原始降水数据处理成带有行列号、坐标和降水值的csv格式时间序列数据,方便后期进行降水数据的批量处理;代码部分为开头声明的作者,使用者需声明版权。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 180,709
精华内容 72,283
关键字:

python空间数据处理

python 订阅