DataFrame与shp文件相互转换

因为习惯了使用pandas的DataFrame数据结构,同时pandas作为一个方便计算和表操作的数据结构具有十分显著的优势,甚至很多时候dataFrame可以作为excel在使用,而在用python操作gis的shp文件时很不顺畅,不太符合使用习惯,故写了一个DataFrame与arcgis地理文件相互转换的函数,这个处理起来可以节约大量的思考时间。

Shp转DataFrame:

import arcpy
import pandas as pd
def Shp2dataframe(path):
    ‘‘‘将arcpy表单变为pandas表单输出‘‘‘
    fields=arcpy.ListFields(path)
    table=[]
    fieldname=[field.name for field in fields]
    #游标集合,用for 循环一次后没办法循环第二次!一个游标实例只能循环一次
    data=arcpy.SearchCursor(path)
    for row in data:
        #Shape字段中的要数是一个几何类
        r=[]
        for field in fields:
            r.append(row.getValue(field.name))
        table.append(r)
    return pd.DataFrame(table,columns=fieldname)

DataFrame转Shp:

DataFrame转Shp采用了模板形式,通过模板建立字段文件,坐标系等可以更加快速构建字段。

#将由ReadTable读取的pandas表转换为shp格式,template为模板
def Dataframe2ShpTemplate(df,outpath,geoType,template):
    ‘‘‘
    Fuction:
    make the table of pandas‘s DataFrame convert to the shp of esri
    Input:
    df -- pandas DataFrame from the shp converted
    outpath -- the shp output path
    geometryType -- the type of geomentey, eg:‘POINT‘,‘POLYLINE‘,‘POLYGON‘,‘MULTIPOINT‘
    temple -- the temple, at most time it is used the DataFrame‘s shp
    ‘‘‘
    out_path = outpath.replace(outpath.split(‘/‘)[-1],‘‘)
    out_name = outpath.split(‘/‘)[-1]
    geometry_type = geoType
    #template为模板,可以将里面属性全部赋予新建的要素,包括字段、坐标系
    feature_class = arcpy.CreateFeatureclass_management(
        out_path, out_name, geometry_type, template)
    #‘*‘表示插入所有字段,但如果不用模板容易产生位置不对等
    #cursor = arcpy.da.InsertCursor(outpath,‘*‘)
    for row in df.index:
        #Shape需要改为‘[email protected]‘才可以写入
        df[‘[email protected]‘] = df[‘Shape‘]
        cursor = arcpy.da.InsertCursor(outpath,[field for field in df.columns])
        cursor.insertRow([df[field][row] for field in df.columns])
    print ‘Pandas to shp finish!‘
    del cursor

时间: 2024-07-29 23:58:36

DataFrame与shp文件相互转换的相关文章

关于加载离线SHP文件、geodatabase文件所遇到的路径问题

正文开始之前还是先吐槽一下,一行代码DEBUG了一天不知道怎么改,终于误打误撞弄出来了(以下以shp文件为例) 对于虚拟机测试 1 public String getPath(){ 2 File sdDir = null; 3 boolean sdCardExit = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); 4 if (sdCardExit){ 5 sdDir = En

结合C++和GDAL实现shapefile(shp)文件的创建和写入

工具:vs2012+GDAL 2.0 包含头文件: #include "ogrsf_frmts.h" int main() { const char *pszDriverName = "ESRI Shapefile"; GDALDriver *poDriver; GDALAllRegister(); poDriver = GetGDALDriverManager()->GetDriverByName(pszDriverName ); if( poDriver

GDAL1.11版本对SHP文件索引加速测试

GDAL库中对于矢量数据的读取中可以设置一些过滤器来对矢量图形进行筛选,对于Shapefile格式来说,如果数据量太大,设置这个过滤器时间慢的简直无法忍受.好在GDAL1.10版本开始支持读取Shapefile文件的空间索引文件(.sbn / .sbx)来进行加速.下面就同样的数据同样的代码来对GDAL1.9.0和GDAL1.11.0两个版本进行测试时间,比较下速度(看到结果你肯定会张大嘴巴的--). 首先是测试代码,功能很简单,两个shp文件,一个点文件,一个面文件.面文件很大,需要根据点文件

mfc 通过 MapWinGIS 控件读取 shp 文件

记录一下这两天努力的收获,刚来这个公司一周不到,这几天一直在看GIS相关的东西. 首先调通了第一个android 通过 jni 调用 C/C++代码 然后花了两天做了一个mfc 用 MapWinGIS.ocx 控件读取shp格式文件 哎...回头看看,这么简单的东西竟然用了两天时间,简直太浪费时间了 没办法,新手上路不容易呀! 参考原文:http://blog.csdn.net/clever101/article/details/5286575 下面记录一下读取 shp文件的操作过程: MapW

远景WEBGIS平台实现客户端SHP文件加载

远景WEBGIS平台的研发目前取得新进展,实现客户端shp文件的加载,可以不经过PC上的数据转换工具转换. 远景WEBGIS平台(RemoteGIS)是基于HTML5自主研发的新一代WEBGIS基础平台,它使用Javascript开发,具有良好的系统架构和高可扩展性.是全新的高效.专业.稳定的GIS平台. 现在正在开发在线产品"远景云GIS(RGIS Online)",提供在线的数据上传.符号配置.查询检索.空间分析.地图发布等功能,客户端Shp文件的加载功能是远景云GIS的一个重要部

arcgis10.2转shp文件中文乱码问题解决方案

从ArcGIS的数据源入手,自己升级ArcGIS for Desktop到10.2.0,然后用该版本ArcGIS软件重新导出数据,竟然还是乱码.经咨询ArcGIS技术支持,技术支持说必须保证shp文件中有一个.cpg文件.必须要用ArcGIS for Desktop 10.2.1及 以上版本,问题又滚回方案(1)了. 后在ArcGIS知乎平台上看到一篇关于shapefile与字符集编码设置的博客,按照其提供的方案,设置注册表默认字符,即可解决中文乱码问题.其关键步奏如下: 'dbfDefault

结合C++和GDAL实现shapefile(shp)文件的读取

工具:vs2012+GDAL 2.0 数据:中国省界SHP文件bou2_4p.shp 包含头文件: #include "ogrsf_frmts.h" 代码: int main(){ GDALAllRegister(); GDALDataset *poDS; CPLSetConfigOption("SHAPE_ENCODING",""); //解决中文乱码问题 //读取shp文件 poDS = (GDALDataset*) GDALOpenEx(&

在matlab中实现遥感影像和shp文件的结合显示

clc;close all;clear; road=shaperead('boston_roads.shp'); %读取shape文件 figure, mapshow('boston.tif'); %读取tif遥感影像并显示 axis image manual off; %关闭本地坐标系统 surveyFeetPerMeter = unitsratio('sf','meter'); %将米级单位转换成surveyFeet单位 colorTab='rgbcymkw'; %颜色代码表,不同等级的公路

-05 08:57 ARCGIS地统计学计算文件后缀名为.shp文件制作

2011-07-05 08:57 ARCGIS地统计学计算文件后缀名为.shp文件制作 ARCAMP软件要进行地统计计算的文件后格式后缀名必须为.shp的文件,网上介绍的方法复杂难懂,那么制作.shp的文件怎么制作呢? 1.打开ArcMAP软件,点菜单栏“工具”下拉菜单中的“添加XY数据”,出现“添加XY数据”对话框,添加电子表格数据 “.dbf3”格式文件(参考“用ArcGIS9.3中标出地图中GPS点方法”第3点),点确定,GPS采集点出来了. 2.右单击图层栏刚才“添加XY数据”进来的文件