Перетворити файл файлу в CSV, включаючи атрибути І геометрію?


21

У мене є файл з форматом 60k + записів, усі вони є багатокутниками з відповідними атрибутами (сумарні площі, імена землевласників, податкові ідентифікатори # та ін.). У кінцевому підсумку мені потрібен файл CSV з усіма цими атрибутами та відповідною геометрією (у форматі Xyz, сумісному з KML, тобто НЕ у форматі WKT).

Я знаю, що можу відкрити .dbf файл в Excel і отримати атрибути. Я також знаю, що я можу відкрити файл форм у QGIS і скопіювати дані в Excel, який отримує мені атрибути та геометрію WKT.

Чи є простий спосіб перетворити файл форми в CSV (відкривається в Excel) за допомогою атрибута та зручної геометрії Google Earth?


Щоб відповідати вашим специфікаціям, необхідно створити програму або сценарій. Я не думаю, що це складно, але я також не думаю, що це не тривіально. Якби я мав завдання це зробити, я, мабуть, оцінив би 1 тиждень штатного робочого дня для такої роботи.
Стівен Куан

3
Дякую, це корисно. Це свого роду божевільне. Якби розмір мого файлу був не таким великим, я б міг це робити автоматично через Google. Як правило, я це роблю, імпортуючи .shp в Google Планета Земля і зберігаючи .kml. Потім я завантажую .kml в Google Fusion Tables (FYI: Google Fusion Tables має обмеження на завантаження 100 мб) та експортую до .csv. Тоді я можу пограти з .csv, проте, що хочу - змінити атрибути, додати нові багатокутники, для яких у мене є координати, тощо, тощо. та відкрити в Google Планета Земля.
Рік

Тож я здогадуюсь, тоді питання стає ... як я розділити .shp файл на дві частини? Це дозволило б мені отримати окремі .kml файли під лімітом 100 mb, і я можу використовувати вищезгаданий метод для перетворення.
Рік

1
Я відповів на запитання, як було задано нижче, але щойно побачив ваш коментар. Навіщо взагалі потрібен CSV? Чому б не здійснити редагування атрибутів, додавання нових багатокутників тощо в ГІС (ви сказали, що у вас QGIS), а потім експортувати їх у свій остаточний KML?
користувач2856

@Rikk - у відповідь на запитання у вашому коментарі: Простим способом розділити файл файлу було б зробити просторовий вибір на частині вашого формату файлів, а потім клацнути правою кнопкою миші ваш шар і вибрати "Експорт". Потім ви можете просто експортувати вибрані функції в новий, менший файл форми. Це аж ніяк не науково, але просто. Крім того, ви можете вибрати за деякими ознаками, якщо хочете більш організованого підходу.
Радар

Відповіді:


28

Ось простий скрипт, який використовує прив'язки пітонів OGR :

import ogr,csv,sys

shpfile=r'C:\Temp\test.shp' #sys.argv[1]
csvfile=r'C:\Temp\test.csv' #sys.argv[2]

#Open files
csvfile=open(csvfile,'wb')
ds=ogr.Open(shpfile)
lyr=ds.GetLayer()

#Get field names
dfn=lyr.GetLayerDefn()
nfields=dfn.GetFieldCount()
fields=[]
for i in range(nfields):
    fields.append(dfn.GetFieldDefn(i).GetName())
fields.append('kmlgeometry')
csvwriter = csv.DictWriter(csvfile, fields)
try:csvwriter.writeheader() #python 2.7+
except:csvfile.write(','.join(fields)+'\n')

# Write attributes and kml out to csv
for feat in lyr:
    attributes=feat.items()
    geom=feat.GetGeometryRef()
    attributes['kmlgeometry']=geom.ExportToKML()
    csvwriter.writerow(attributes)

#clean up
del csvwriter,lyr,ds
csvfile.close()

EDIT: і ще один сценарій для перетворення з CSV в KML

import ogr,csv,sys,os
ogr.UseExceptions()

csvfile=r'C:\temp\test.csv' #sys.argv[1]
kmlfile=r'C:\temp\test.kml' #sys.argv[2]

csvreader=csv.reader(open(csvfile,'rb'))
headers=csvreader.next()

ds = ogr.GetDriverByName('KML').CreateDataSource(kmlfile)
lyr = ds.CreateLayer(os.path.splitext(os.path.basename(kmlfile))[0])

for field in headers[:-1]: #skip kmlgeometry
    field_def = ogr.FieldDefn(field)
    print lyr.CreateField(field_def)

for rec in csvreader:
    feat = ogr.Feature(lyr.GetLayerDefn())
    for i,field in enumerate(headers[:-1]): #skip kmlgeometry
        feat.SetField(field, rec[i])
    feat.SetGeometry(ogr.CreateGeometryFromGML(rec[-1]))
    lyr.CreateFeature(feat)

del lyr,ds

Чи можете ви описати докладніше про те, як використовувати ці прив'язки, як ті, що переповнюють важливу інформацію, яку повинні знати ваші читачі.
Andrew S

8

Якщо ви перетворите свій файл форми у просторовий, ви повинні зробити наступне:

1) Експериментуйте з SQL, щоб перевірити вихід:

колишній

ВИБІРИ col1, col2, col3, AsKml (geometry_column) З вкладки

2) Після того, як ви будете задоволені результатом, можете експортувати його у формат CSV:

/programming/5776660/export-from-sqlite-to-csv-using-shell-script

Для отримання додаткової інформації про Spatialite:

https://www.gaia-gis.it/fossil/libspatialite/index

Функції просторового SQL:

http://www.gaia-gis.it/gaia-sins/spatialite-sql-3.0.0.html


3

Якщо ви працюєте над QGIS, ви можете негайно створити документ CSV, клацнувши правою кнопкою миші на шарі -> Зберегти як -> CSV.

Якщо ви працюєте з ArcMap, ви можете експортувати KML, скориставшись інструментом Layer to KML (Перейдіть на пошук у програмі). З певних причин він генерує KMZ замість KML (принаймні, це було в моєму випадку).

Щоб перетворити KMZ в KML:

  • Імпортуйте файл KMZ у Google Планета Земля та клацніть правою кнопкою миші на своєму шарі та збережіть його як KML
  • Відкрийте QGIS і перетягніть файл KML - він автоматично завантажить шар (> QGIS 2.10 PISA)
  • Клацніть правою кнопкою миші файл і збережіть його як CSV

Ця процедура довша, якщо ви працюєте з ArcGIS, але в QGIS це можна зробити за короткий час. У будь-якому випадку вам доведеться встановлювати QGIS.


Перевірено ваше рішення для QGIS, і воно не працює. Зберегти як csv не зберігає просторову складову.
Філіп Шварц

QGIS дає вам можливість вибрати WKT під час експорту - це експортує геометрію (просторовий компонент) у формат WKT разом із рештою функцій у файлі форми.
козир

З QGIS 3.0 ви знайдете спальний список "геометрія" в розділі "Параметри шару" в діалоговому вікні експорту та виберіть AS_XY, AS_XYZабоAS_WKT
лео

2

У командному рядку ви можете використовувати ogr2ogr:

ogr2ogr -f CSV output.csv input.shp -lco GEOMETRY=AS_XYZ

lcoя думаю, що для "варіантів створення шарів". Інші доступні варіанти задокументовані тут: http://www.gdal.org/drv_csv.html


Лео, я отримую "Помилка 1 не могла отримати запитуваний шар" GEOMETRY = AS_XYZ ". Я можу винести файл у QGIS і чітко побачити вектор, що містить контури країни.
Andrew S

-1

на Галереї моделей географічної обробки та сценаріїв є інструмент, який виконує те, що ви шукаєте. він може експортувати в excel або csv.

http://resources.arcgis.com/gallery/file/geoprocessing/details?entryID=95009B25-1422-2418-7FB5-B8638ECB2FA9


1
Я подивився на це, він не експортує геометрію ні в який формат, не кажучи вже про KML.
користувач2856

-1

просто перейдіть до інструменту перетворення на карті дуги. потім перейдіть до таблиці, щоб досягти успіху. буде створено файл excel. перетворити цей excel doc у .csv файл

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.