GIScript2016-Docker 數據導入教程

GIScript2016是支持Python3的地理空間數據處理和分析工具包,支持Jupyter和Spark,能夠運行在單機以及大規模集羣之上。這裏介紹基於Docker的GIScript+Jupyter這一技術棧,使用其進行空間數據導入的具體過程,稍加修改後便可直接用於大量空間數據的批量處理。點擊查看【完整數據導入源碼】。docker

1. 準備工做-建立容器實例

在博文【GIScript2016-Docker上的Jupyter Notebook部署】和【GIScript2016-Docker 快速入門】中,分別介紹了將GIScript部署到Docker中,以及將這個容器鏡像推送到DockerHub上,而後在聯網的其它計算機中使用的方法。json

1.1 如今,咱們拉取所建立的GIScript2016容器:

docker pull openthings/gispark

1.2 建立GIScript的本地目錄:

mkdir GISpark
cd GISpark

1.3 建立容器的運行實例:

docker run -it --name GISpark \
    -p 9000:8888 \
    --user root -e GRANT_SUDO=yes \
    -v /home/supermap/GISpark:/home/jovyan/work/GISpark \
    openthings/gispark

打開瀏覽器,輸入:http://localhost:9000 ,便可看到Notebook的Web界面。瀏覽器

2. 建立一個新的Notebook

點取「New」按鈕,選取「Python3」,建立一個新的Notebook。 建立新的Notebook服務器

2.1 導入GIScript庫。

# coding: utf-8
import sys
from GIScript import GISCore, Data, Conversion

查看庫的幫助,輸入:工具

help(GISCore)

2.2 保存Notebook。

直接Ctrl+S(Mac OS爲Command+S)便可保存當前的Notebook。 或者點擊「保存」圖標,或選擇「File」->"Save",都可保存當前Notebook。測試

2.3 下載Notebook到本地。

選擇「File」->「Download as」能夠將當前的Notebook保存爲多種格式,如:ipynb、HTML、reST、Markdown等等。spa

2.4 上傳Notebook到服務器。

在主界面「Files」選項頁點擊「Upload」便可上傳文件。能夠在本地進行模型的開發和測試,而後上傳到服務器上執行。.net

3. 建立UDB數據源

打開UDB數據源,若是不存在,將自動建立。code

def OpenDatasource(strType, strServer, strUser="", strPassword=""):
    dscn = Data.DsConnection()
    dscn.m_strType     = strType
    dscn.m_strServer   = strServer
    dscn.m_strUser     = strUser
    dscn.m_strPassword = strPassword

    ds = Data.DataSource()
    ds.SetDsConnection(dscn)

    bOpen = ds.Open()
    if bOpen:
        print("打開數據源成功!!")
        return ds
    else:
        print("打開數據源失敗,請檢查數據源連接信息!")
        return None

4. 導入空間數據

strUDB       = "DB/ConversionTest.udb"
ds = OpenDatasource("UDB", strUDB)       
bImport = ImportVector(ds, strShapePath, "fileSHP", "ModeGIS")
# 若是bImport == 1,導入成功,不然失敗。

4.1 導入shape矢量文件

def ImportVector(ds, strFileName,strFileType, strImportMode):
    importParams = Conversion.ParamsManager.MakeImportParams(strFileType)
    importParams.m_strFilePath   = strFileName
    importParams.m_strImportMode = strImportMode
    
    dtImport = Conversion.DataImport()
    dtImport.SetParams(importParams)
    bImport = dtImport.ImportVector(ds)
    return bImport

4.2 導入tif影像文件

def ImportRaster(ds, strFileName,strFileType, strImportMode):
    importParams = Conversion.ImportParamsRaster()
    importParams.m_strFilePath   = strFileName
    importParams.m_strFileType   = strFileType
    importParams.m_strImportMode = strImportMode
    
    dtImport = Conversion.DataImport()
    dtImport.SetParams(importParams)
    bImport = dtImport.ImportRaster(ds)
    return bImport

4.3 導入csv格式文件

def ImportCSV(ds, strFileName, strImportMode, nIndexs = [], bHasFirst = False):
    importParams = Conversion.ImportParamsCSV()
    importParams.m_strFilePath   = strFileName
    importParams.m_strImportMode = strImportMode
    importParams.m_Indexs        = nIndexs
    importParams.m_bHasFirstRow  = bHasFirst
    
    dtImport = Conversion.DataImport()
    dtImport.SetParams(importParams)
    bImport = dtImport.ImportVector(ds)
    return bImport

4.4 導入json格式文件

ds = OpenDatasource("UDB", strUDB)
try:
    if ds != None:
        # 導入矢量(GeoJson)
        bImport = ImportVector(ds, strJsonPath, "fileGeoJson", "ModeGIS")
        if bImport == 1:
            print("數據導入GeoJson成功!!")
        else:
            print("數據導入GeoJson失敗!!")
        ds.Close()
    else:
        print("打開數據源失敗!")

except SystemExit:
    raise
except:
    sys.stderr.write("""An internal error occured.""")
    raise

點擊查看【完整數據導入源碼】。blog

相關文章
相關標籤/搜索