속성 및 형상을 포함하여 shapefile을 CSV로 변환 하시겠습니까?


21

60k + 항목이있는 shapefile이 있는데, 모두 해당 속성 (총계, 토지 소유자 이름, 세금 ID 번호 등)을 가진 다각형입니다. 궁극적으로 필요한 것은 이러한 모든 속성과 해당 지오메트리 (KML 호환 xyz 형식, 즉 WKT 형식이 아님)가 포함 된 CSV 파일입니다.

Excel에서 .dbf 파일을 열고 속성을 얻을 수 있다는 것을 알고 있습니다. 또한 QGIS에서 shapefile을 열고 데이터를 Excel로 복사하면 속성과 WKT 지오메트리를 얻을 수 있습니다.

속성 및 Google 어스 친화적 인 지오메트리를 사용하여 셰이프 파일을 CSV (Excel에서 열 수 있음)로 변환하는 간단한 방법이 있습니까?


사양을 충족 시키려면 응용 프로그램 또는 스크립트를 작성해야합니다. 나는 그것이 어렵다고 생각하지는 않지만 사소한 것이 아니라고 생각합니다. 내가해야 할 일이라면 아마도 그런 일을하는 데 1 주일 정도의 풀 타임을 추정했을 것입니다.
Stephen Quan

3
감사합니다. 도움이됩니다. 그래도 이것은 미친 짓입니다. 파일 크기가 크지 않으면 Google을 통해 자동으로 처리 할 수 ​​있습니다. 내가 일반적으로하는 방법은 .shp를 Google 어스로 가져 와서 .kml로 저장하는 것입니다. 그런 다음 .kml을 Google Fusion Tables (FYI : Google Fusion Tables에는 100MB 업로드 제한이 있음)에 업로드하고 .csv로 내 보냅니다. 그런 다음 .csv로 재생할 수는 있지만 속성을 변경하고 좌표가있는 새 다각형을 추가하는 등의 작업을 수행 한 다음 새로 저장된 .csv를 Google Fusion Tables에 다시 업로드하고 .kml로 내보내십시오. Google 어스에서 열립니다.
Rikk

그렇다면 문제는 다음과 같습니다. .shp 파일을 두 부분으로 나누는 방법은 무엇입니까? 이렇게하면 100MB 제한 아래에서 개별 .kml 파일을 얻을 수 있으며 위에서 언급 한 방법을 사용하여 변환 할 수 있습니다.
Rikk

1
아래 질문에 답변했지만 귀하의 의견을 보았습니다. 왜 csv가 필요한가요? QIS에 있다고 말한 GIS에서 속성 편집, 새 다각형 추가 등을 수행 한 다음 최종 KML로 내보내는 것이 어떻습니까?
user2856

@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()

편집 : 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

shapefile을 공간으로 변환하면 다음을 수행 할 수 있습니다.

1) SQL을 실험하여 출력을 테스트하십시오.

전의.

col1, col2, col3, AsKml (geometry_column) FROM 탭에서 선택

2) 결과에 만족하면 CSV 형식으로 내보낼 수 있습니다.

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

Spatialite에 대한 자세한 정보 :

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

Spatialite SQL 함수 :

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


3

QGIS에서 작업중인 경우 레이어-> 다른 이름으로 저장-> CSV를 마우스 오른쪽 버튼으로 클릭하여 CSV 문서를 즉시 생성 할 수 있습니다.

ArcMap으로 작업하는 경우 도구 레이어를 사용하여 KML로 KML을 내보낼 수 있습니다 (프로그램의 검색 옵션으로 이동). 어떤 이유로 그것은 KML 대신 KMZ를 생성합니다 (제 경우에는 이런 일이 발생했습니다).

KMZ를 KML로 변환하려면 :

  • KMZ 파일을 Google 어스로 가져 와서 레이어를 마우스 오른쪽 버튼으로 클릭하고 KML로 저장
  • QGIS를 열고 KML 파일을 끌어다 놓아 레이어를 자동으로로드합니다 (> QGIS 2.10 PISA).
  • 파일을 마우스 오른쪽 버튼으로 클릭하고 CSV로 저장

ArcGIS로 작업하는 경우이 절차가 더 길지만 QGIS에서는 즉시 완료 할 수 있습니다. 어떤 경우에도 QGIS를 설치해야합니다.


QGIS 솔루션을 테스트했지만 작동하지 않습니다. csv로 저장하면 공간 구성 요소가 유지되지 않습니다.
Philipp Schwarz

QGIS는 내보내기 중에 WKT를 선택할 수있는 옵션을 제공합니다. 그러면 형상 파일의 나머지 형상과 함께 형상 (공간 구성 요소)이 WKT 형식으로 내보내집니다.
kozyr

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


Leo, "오류 1에서 요청 된 레이어 'GEOMETRY = AS_XYZ'을 (를) 가져올 수 없습니다. QGIS에서 파일을 가져 와서 국가 개요가 포함 된 벡터를 명확하게 볼 수 있습니다.
Andrew S


-1

아크 맵에서 변환 도구로 이동하십시오. 탁자에 가서 탁월합니다. 엑셀 파일이 만들어집니다. Excel 문서를 .csv 파일로 변환

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.