ArcPy와 함께 사용할 데이터셋 업로드

ArcGIS Notebooks를 사용하여 ArcPy와 함께 사용할, Notebooks에서 접근할 수 있는 쉐이프파일 및 파일 지오데이터베이스를 업로드할 수 있습니다.

Notebook에서 사용할 데이터셋 업로드

Notebook에서 ArcPy와 함께 사용할 쉐이프파일 또는 파일 지오데이터베이스를 업로드하려면 다음을 수행합니다.

  1. 업로드할 데이터셋을 .zip 파일로 압축합니다.
  2. Notebook 편집기에서 파일 탭을 클릭합니다.
  3. 파일 탭에서 /arcgis/home으로 이동합니다.
  4. 파일 선택을 클릭하고 데이터셋의 .zip 파일을 선택합니다.
  5. 업로드를 클릭합니다.
  6. Notebook에서 다음 방법 중 하나로 파일의 압축을 풉니다.
    1. Notebook 셀 내에서 IPython 매직문을 사용합니다.
      !unzip /arcgis/home/watersheds.zip -d /arcgis/home
    2. Python Zip 모듈을 사용하여 파일의 압축을 풉니다.
      import zipfile
      with zipfile.ZipFile("/arcgis/home/watersheds.zip", "r") as zip_ref:
          zip_ref.extractall("/arcgis/home")

Notebook에서 ArcPy를 사용하는 방법에 대해 자세히 알아보려면 Notebook에서 ArcPy 사용을 참고하세요.

Notebook에서 ArcPy로 업로드한 데이터셋 사용

쉐이프파일 또는 파일 지오데이터베이스를 업로드하면 Notebook에서 접근할 수 있습니다.

ArcPy로 업로드한 쉐이프파일 사용

다음 단계에서는 업로드된 쉐이프파일과 함께 ArcPy 버퍼 도구를 사용하는 예시 워크플로에 대해 간략하게 설명합니다.

  1. Python 시작 데이터셋 항목 페이지에서 샘플 데이터셋을 다운로드합니다.
  2. 위의 Notebook에서 사용할 데이터셋 업로드 섹션에 나와 있는 단계에 따라 Notebook 작업 영역에 .zip 파일을 업로드합니다.
  3. ArcGIS API for PythonArcPy를 가져옵니다.

    from arcgis.gis import GIS
    gis = GIS("home")
    import arcpy

  4. 작업 영역 디렉터리에 업로드한 데이터셋의 압축을 풉니다.

    
    !unzip /arcgis/home/PythonStart.zip -d /arcgis/home

  5. ArcPy 작업 영역을 압축을 푼 파일의 디렉터리 경로로 설정합니다.

    arcpy.env.workspace = "/arcgis/home/PythonStart"

  6. fire_stations.shp 파일의 각 소방서 주변에 500미터의 버퍼를 생성합니다.

    result = arcpy.analysis.Buffer("fire_stations.shp", "fire_stations_500m", "500 METERS")

  7. 결과 버퍼 쉐이프파일 데이터셋에 대한 설명을 생성하고 인쇄합니다.

    # Describe the resulting shapefile dataset
    desc = arcpy.Describe("fire_stations_500m.shp")
    
    # Print dataset properties
    print(f"Dataset Type: {desc.datasetType}")
    print(f"Shape Type: {desc.shapeType}")
    print(f"Feature Type: {desc.featureType}")
    print(f"Spatial Index: {desc.hasSpatialIndex}")
    print(f"Spatial reference name: {desc.spatialReference.name}")
    print(f"Extent:\n\tXMin: {desc.extent.XMin}\n\tXMax: {desc.extent.XMax}")
    print(f"\tYMin: {desc.extent.YMin}\n\tYMax: {desc.extent.YMax}")

  8. 버퍼 쉐이프파일에 있는 필드의 이름 및 유형을 인쇄합니다.

    for field in desc.fields:
        print("%-22s %s %s" % (field.name, ":", field.type))

  9. 버퍼 쉐이프파일 데이터셋의 .zip 파일을 생성합니다.

    import os
    import fnmatch
    import zipfile
     
    # The path for listing items
    path = '/arcgis/home/PythonStart/'
    os.chdir(path)
     
    # List of files in complete directory
    file_list = []
    
    # Loop to extract files containing word "fire_stations_500m"
    for path, folders, files in os.walk(path):
        for file in files:
            if fnmatch.fnmatch(file, '*fire_stations_500m*'):
                file_list.append(file)
    
    with zipfile.ZipFile('/arcgis/home/fire_stations_500m.zip', 'w') as zipF:
        for file in file_list:
            zipF.write(file, compress_type=zipfile.ZIP_DEFLATED)

  10. 버퍼 쉐이프파일을 호스팅 피처 레이어로 발행합니다.

    item = gis.content.add({}, '/arcgis/home/fire_stations_500m.zip')
    published_item = item.publish()
    published_item.share(everyone=True)
    display(published_item)

  11. 버퍼 쉐이프파일을 삭제합니다.

    arcpy.management.Delete("fire_stations_500m.shp")

ArcPy와 함께 업로드된 파일 지오데이터베이스 사용

다음 단계에서는 ArcPy와 함께 사용할 파일 지오데이터베이스를 업로드하는 워크플로 예시에 대해 간략하게 설명합니다.

  1. 싱가포르 데이터 지오데이터베이스 항목 페이지에서 샘플 데이터셋을 다운로드합니다.
  2. 위의 Notebook에서 사용할 데이터셋 업로드 섹션에 나와 있는 단계에 따라 Notebook에 파일 지오데이터베이스가 포함된 .zip 파일을 업로드합니다.
  3. ArcGIS API for PythonArcPy를 가져옵니다.

    from arcgis.gis import GIS
    gis = GIS("home")
    import arcpy

  4. 작업 영역 디렉터리에 업로드한 데이터셋의 압축을 풉니다.

    !unzip /arcgis/home/Singapore_Data.gdb.zip -d /arcgis/home

  5. ArcPy 작업 영역을 압축을 푼 파일의 디렉터리 경로로 설정합니다.

    arcpy.env.workspace = "/arcgis/home/Singapore_Data.gdb"

  6. 파일 지오데이터베이스에 포함된 피처 클래스의 이름을 나열합니다.

    singapore_data = arcpy.ListFeatureClasses()
    singapore_data

  7. 피처 클래스 중 하나에 포함된 필드를 나열합니다.

    singapore_tourist_attractions = singapore_data[2]
    singapore_tourist_attractions_fields = []
    fields = arcpy.ListFields(singapore_tourist_attractions)
    for field in fields:
        if (field.name != 'Shape'):
            singapore_tourist_attractions_fields.append(field.name)
    singapore_tourist_attractions_fields

  8. 데이터셋의 각 행에 대해 Object ID, 장소 이름, 주소 필드 값을 인쇄합니다.

    with arcpy.da.SearchCursor(singapore_tourist_attractions, singapore_tourist_attractions_fields) as cursor:
        for row in cursor:
            print(f'{row[0]}. {row[1]}, {row[2]}')