Как программно преобразовать электронную таблицу Excel (.xls) в шейп-файл? - PullRequest
5 голосов
/ 05 июля 2010

У меня есть таблица Excel, которую я хочу программно преобразовать в шейп-файл ESRI. Он содержит координаты X и Y в двух столбцах, а также различные данные атрибутов в других столбцах. Электронная таблица в формате Excel 97 (т.е. не .xlsx).

Я хотел бы иметь возможность преобразовать это в шейп-файл геометрии точки, где пара x, y каждой строки представляет точку. В идеале я хотел бы иметь третий столбец, определяющий систему координат пары координат x, y, и иметь файл Excel, содержащий гетерогенные системы координат.

Как программно преобразовать эту таблицу Excel (.xls) в шейп-файл? Желательно в Python, но будут приняты другие реализации.

Ответы [ 5 ]

5 голосов
/ 05 июля 2010

как то так?

import xlrd
book = xlrd_open_workbook("data.xls") 
sheet = book.sheet_by_index(0)  
data = [] #make a data store
for i in xrange(sheet.nrows):
  row = sheet.row_values(i)
  x=row[0]
  y=row[1]
  data.append(x,y)

import point_store
point_store.save('points-shifted.shp', [data], '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')
4 голосов
/ 05 июля 2010

Здесь есть руководство по созданию шейп-файла с использованием GDAL:

http://invisibleroads.com/tutorials/gdal-shapefile-points-save.html

Вам просто нужно заменить исходные данные точками из файла Excel - какФабиан указал, что есть библиотеки для чтения файлов Excel (или сохранения их как DBF).

В качестве альтернативы, если у вас есть ArcMap ESRI, сохраните Excel как файл DBF (я не помню, если ArcMap читает Excel непосредственно), а затем добавьте этот DBF как «слой событий», используя поля X, Yпредставлять точки.ArcMap отобразит их как объекты, а затем вы можете щелкнуть правой кнопкой мыши и экспортировать слой в шейп-файл.

2 голосов
/ 05 июля 2010

xlrd - это модуль на python для чтения файла Excel, я сам не использовал его жестко.

1 голос
/ 05 июля 2010

Возможно, вы захотите, чтобы библиотеки GDAL / OGR делали это с Python, и после того, как вы их установили, проще всего использовать утилиту ogr2ogr , как описано в http://nautilus.baruch.sc.edu/twiki_dmcc/bin/view/Main/OGR_example#Converting_from_CSV_to_shapefile.

0 голосов
/ 22 июня 2015

Arcmap поддерживает Python для библиотеки с именем arcpy. Как мы знаем, Pandas работает как Excel и может легко читать и обрабатывать данные. Да, иногда его можно использовать для экспорта в файл .xls и .xlsx. Я закодировал функцию взаимопревращения между DataFrame панд и shp Arcmap. Вот так:

 def Shp2dataframe(path):

    fields=arcpy.ListFields(path)

    table=[]

    fieldname=[field.name for field in fields]

    data=arcpy.SearchCursor(path)

    for row in data:

        r=[]

        for field in fields:

            r.append(row.getValue(field.name))

        table.append(r)

    return pd.DataFrame(table,columns=fieldname)


 '''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

'''
def Dataframe2ShpTemplate(df,outpath,geoType,template):
out_path = outpath.replace(outpath.split('/')[-1],'')

out_name = outpath.split('/')[-1]

geometry_type = geoType

feature_class = arcpy.CreateFeatureclass_management(

    out_path, out_name, geometry_type, template)


desc = arcpy.Describe(outpath)

if template=='':

    fields = set(list(df.columns)+['Shape','FID'])

    originfieldnames = [field.name for field in desc.fields]

    for fieldname in fields:

        if fieldname not in originfieldnames:

            arcpy.AddField_management(outpath,fieldname,'TEXT')

for row in df.index:

    df['SHAPE@'] = 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
...