PilotGaea O'View Map Server API for Python
Project description
PilotGaea O'View Map Server API for Python
使用 PilotGaea O'View Map Server API for Python 在 Python 中處理O'View Map Server發布的地圖和地理空間數據。
這個library可讀取、編輯、分析、上架由O'View Map Server發布之地圖圖像與向量資料,並可透過API操作輸出及發佈處理後的成果。
此library只支援由 O'View Map Server 發佈的圖資,暫不支援外部資料處理。
安裝PliotGaea Python Module
pip install OViewPy
安裝Server端Plugin
由於需要透過O'View Map Server 取得圖資,所以需要先安裝相關的Plugin。
相關的Plugin放置於安裝目錄下的Python資料夾下(C:\Program Files\PilotGaea\TileMap\Python
)。
請將資料夾內的dll檔複製進安裝目錄下的plugins資料夾內(C:\Program Files\PilotGaea\TileMap\plugins
),並重新啟動Server即可完成安裝。
初始化Server物件
本章節為PliotGaea Python Module的起始點,在執行所有操作前須先初始化Server物件,提供Module取得Map Server資源的相關連線資訊。
from OViewPy.server import Server
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
綁定Server物件後,即可取得Server相關資訊。
from OViewPy.server import Server
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 取得目前Server版本
print("OView Map Server Version:",server.version)
# 取得WMTS URL
print("WMTS URL:",server.wmtsURL)
# 取得WMS URL
print("WMS URL:",server.wmsURL)
# 取得DoCommand URL
print("DoCommand URL:",server.docmdURL)
取得圖層列表
綁定Server物件後,可透過getLayerList
取得2D圖層列表詳細資訊。
亦可使用getOViewLayerList
取得3D圖層列表詳細資訊。
from OViewPy.server import Server
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
layerList = server.getLayerList()
OViewLayerList = server.getOViewLayerList()
for list in layerList:
print("圖層名稱:",list["layername"],"圖層類別:",list["type"])
print("===========================================")
for list in OViewLayerList:
print("圖層名稱:",list["layername"],"圖層類別:",list["type"])
刪除圖層
如果想要刪除Server中已存在的圖層,可透過deleteLayer
與deleteOViewLayer
分別刪除2D及3D圖層。
注意!此刪除無法復原,請警慎使用。
from OViewPy.server import Server
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
server.deleteLayer(layerName="ne_10m_lakes")
server.deleteOViewLayer(layerName="ModelSet")
上架圖層
將圖片上架至伺服器
透過saveImageToServer
可將圖片(JPG、PNG等)上架至Server
需特別注意,上架的圖片需在Server端目錄底下,並有相對應的World File,且確認圖層名稱不是已存在的圖層。
參數名稱 | Type | 預設值 | 說明 |
---|---|---|---|
imageFilePath | string | None | 圖片檔案位置 |
layerName | string | None | 上架後的圖層名稱 |
epsg | int | 4326 | 座標參考系統 |
from OViewPy.server import Server
from OViewPy.layer import VectorLayer
from OViewPy.varstruct import GeoBoundary
from OViewPy.da import da
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 綁定Layer物件
layer = VectorLayer(server=server,layerName="Town_MOI")
boundary=GeoBoundary(147522.218692, 2422004.773002,
351690.114369, 2813163.248085)
# 取得圖片,取得成功會回傳圖片bytes資料
img = layer.getMapImage(
boundary=boundary,
crs="EPSG:3826",
width=512,
height=512,
format="image/png"
)
# 儲存圖片,並生成World File
da.saveImg(
img=img,
savePath=".",
imgName="testImage",
imgType="png",
worldFile=True,
boundary=boundary
)
# 將圖片上架至Server
server.saveImageToServer(
imageFilePath="D:\\NCHCProject\\jupyter_notebook\\testImage.png",
layerName="testImage",
epsg=3826
)
將SHP File上架至伺服器
透過saveVectorFileToServer
可將Shp File上架至Server
需特別注意,上架的Shp File需在Server端目錄底下,並確認圖層名稱不是已存在的圖層。
參數名稱 | Type | 預設值 | 說明 |
---|---|---|---|
VectorFilePath | string | None | Shp File位置 |
layerName | string | None | 上架後的圖層名稱 |
epsg | int | 4326 | 座標參考系統 |
from OViewPy.server import Server
from OViewPy.layer import VectorLayer
from OViewPy.varstruct import GeoBoundary
from OViewPy.da import da
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 綁定Layer物件
map = VectorLayer(server=server, layerName="Town_MOI")
# 設定搜尋條件
sql = "County_ID==64"
# 取得向量資料
ret = map.getVectorEntity(epsg=3826,sql=sql)
# 將向量資料存成SHP檔
da.saveAsShapeFile(sourceGeo=ret["geo"],sourceAttr=ret["attr"],fileName="TestShp_Kh")
# 將SHP檔上架至伺服器
server.saveVectorFileToServer(VectorFilePath="D:\\NCHCProject\\jupyter_notebook\\TestShp_Kh.shp",layerName="TestShp_Kh",epsg=3826)
將tif檔轉成dem檔,並將dem檔上架伺服器為地形圖層
於3d的轉檔需要較久的時間,因此轉檔的函式會回傳一個id(如: server.tifToDem
)
可以透過此id,去跟server詢問進度
當轉檔成功可以透過server.save3dToServer
將此圖層上架至伺服器
server.save3dToServer
可以透過id或是DB位置將其上架至伺服器
from OViewPy.server import Server
from OViewPy.varstruct import GeoBoundary
from OViewPy.varstruct import LAYER_TYPE
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# tif檔轉成dem檔
id = server.tifToDem(inputTifFile="defaultTIF.tif", outputDemFile="defaultDEM2.dem")
# 回傳轉檔進度直到轉檔完成
server.getConvert3dProgressToFinish(id)
# dem檔轉成地形圖層
id = server.convertTerrain("testDem", "testDem.DB", "./defaultDEM2.dem", "4326")
# 將此地形圖層上架至伺服器
server.save3dToServer(dbLayerName="testDem", layerName="testDem", layerType=LAYER_TYPE.OV_TERRAIN.name, dbUrl="./testDem.DB")
將傾斜攝影上架至伺服器
透過綁定的server物件,並提供欲設定的圖層名稱(layerName
)及輸出格式(exportType
),將傾斜攝影轉檔並上架至伺服器
由於3d的轉檔需要較久的時間,因此轉檔的函式會回傳一個id(如: server.convertPhotogrammetry
)
可以透過此id,去跟server詢問進度
當轉檔成功透過server.save3dToServer
依DB位置將圖層上架至伺服器(若輸出檔案格式為3DTILES則不上架)
參數名稱 | Type | 預設值 | 可輸入值 | 說明 |
---|---|---|---|---|
layerName | string | None | --- | 上架後的圖層名稱 |
layerDBFile | string | 預設名稱與layerName相同 | --- | 轉檔後產生的DB檔名稱 |
inputFileName | string | None | --- | 欲轉檔檔案位置 |
terrainDBFile | string | None | --- | 初始地形圖層位置 |
terrainName | string | None | --- | 初始地形圖層名稱 |
exportType | string | None | NORMAL、I3S、3DTILES | 輸出檔案格式 |
from OViewPy.server import Server
from OViewPy.varstruct import LAYER_TYPE
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 設定layer名稱
layerName = "photogrammetry"
# 設定exportType(可輸入'NORMAL' or 'I3S' or '3DTILES')
exportType = "NORMAL"
# 轉檔傾斜攝影圖層,並會生成其對應之DB
id = server.convertPhotogrammetry(layerName=layerName,
layerDBFile=layerName + ".DB",
inputFileName="C:\\Users\\vaness.chen\\Desktop\\3DTEST\\基本圖資\\模型\\一門三節坊\\Acute3D\\一門三節坊\\Data\\LODTreeExport.xml",
terrainDBFile="C:\\Users\\vaness.chen\\Desktop\\3DTEST\\基本圖資\\高程\\Terrain20M.DB",
terrainName="terrain",
exportType=exportType)
# 回傳轉檔進度直到轉檔完成
server.getConvert3dProgressToFinish(id)
# 將此圖層上架至伺服器
if exportType.upper() == "NORMAL":
server.save3dToServer(dbLayerName=layerName, layerName=layerName, layerType=LAYER_TYPE.OV_PHOTOGRAMMETRYMODEL.name, dbUrl = layerName + ".DB")
elif exportType.upper() == "I3S":
server.save3dToServer(dbLayerName=layerName, layerName=layerName, layerType=LAYER_TYPE.OV_OGCI3S.name, dbUrl = layerName + ".DB")
將管線圖層轉檔並上架至伺服器
透過綁定的server物件,並提供欲設定的圖層名稱(layerName
)、檔案格式(mlayerType
)及輸出格式(exportType
),將管線圖層轉檔並上架至伺服器
由於3d的轉檔需要較久的時間,因此轉檔的函式會回傳一個id(如: server.convertPipeline
)
可以透過此id,去跟server詢問進度
當轉檔成功透過server.save3dToServer
依DB位置將圖層上架至伺服器(若輸出檔案格式為3DTILES則不上架)
參數名稱 | Type | 預設值 | 可輸入值 | 說明 |
---|---|---|---|---|
layerName | string | None | --- | 上架後的圖層名稱 |
terrainName | string | None | --- | 初始地形圖層名稱 |
terrainDBFile | string | None | --- | 初始地形圖層位置 |
sourceFile | string | None | --- | 欲轉檔檔案位置 |
epsg | int | None | --- | 座標參考系統 |
mlayerType | string | None | PIPELINE、MANHOLE、EQUIPMENT | 欲轉檔檔案格式 |
exportType | string | None | NORMAL、I3S、3DTILES | 輸出檔案格式 |
layerDBFile | string | 預設名稱與layerName相同 | --- | 轉檔後產生的DB檔名稱 |
from OViewPy.server import Server
from OViewPy.varstruct import LAYER_TYPE
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 設定layer名稱
layerName = "EQUIPMENTTry"
# 設定mlayerType(可輸入'PIPELINE' or 'MANHOLE' or 'EQUIPMENT')
mlayerType = "EQUIPMENT"
# 設定exportType(可輸入'NORMAL' or 'I3S' or '3DTILES')
exportType = "NORMAL"
# 轉檔管線、人手孔及設備圖層,並會生成其對應之DB
id = server.convertPipeline(layerName=layerName,
terrainName="terrain",
terrainDBFile="C:\\Users\\vaness.chen\\Desktop\\3DTEST\\基本圖資\\高程\\Terrain20M.DB",
sourceFile="C:\\Users\\vaness.chen\\Downloads\\台中全區SHP_T\\台中全區SHP_T1\\一般供電_設備.shp",
epsg="3826",
mlayerType=mlayerType,
exportType=exportType,
layerDBFile=layerName + ".DB",
)
# 回傳轉檔進度直到轉檔完成
server.getConvert3dProgressToFinish(id)
# 將此圖層上架至伺服器
if exportType.upper() == "NORMAL":
server.save3dToServer(dbLayerName=layerName, layerName=layerName, layerType=LAYER_TYPE.OV_PIPELINE.name, dbUrl = layerName + ".DB")
elif exportType.upper() == "I3S":
server.save3dToServer(dbLayerName=layerName, layerName=layerName, layerType=LAYER_TYPE.OV_OGCI3S.name, dbUrl = layerName + ".DB")
將點雲圖層轉檔並上架至伺服器
透過綁定的server物件,並提供欲設定的圖層名稱(layerName
)及輸出格式(exportType
),將點雲圖層轉檔並上架至伺服器
由於3d的轉檔需要較久的時間,因此轉檔的函式會回傳一個id(如: server.convertPointcloud
)
可以透過此id,去跟server詢問進度
當轉檔成功透過server.save3dToServer
依DB位置將圖層上架至伺服器(若輸出檔案格式為3DTILES則不上架)
參數名稱 | Type | 預設值 | 可輸入值 | 說明 |
---|---|---|---|---|
layerName | string | None | --- | 上架後的圖層名稱 |
layerDBFile | string | 預設名稱與layerName相同 | --- | 轉檔後產生的DB檔名稱 |
pointcloudFileNames | string | None | --- | 欲轉檔檔案位置 |
terrainName | string | None | --- | 初始地形圖層名稱 |
terrainDBFile | string | None | --- | 初始地形圖層位置 |
sourceEPSG | int | None | --- | 座標參考系統 |
exportType | string | None | NORMAL、I3S、3DTILES | 輸出檔案格式 |
from OViewPy.server import Server
from OViewPy.varstruct import LAYER_TYPE
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 設定layer名稱
layerName = "PointcloudTry"
# 設定exportType(可輸入'NORMAL' or 'I3S' or '3DTILES')
exportType = "NORMAL"
# 轉檔管線圖層,並會生成其對應之DB
id = server.convertPointcloud(layerName=layerName,
layerDBFile=layerName + ".DB",
pointcloudFileNames="C:\\Users\\vaness.chen\\Downloads\\點雲圖層\\點雲圖層\\field-1.las",
terrainName="terrain",
terrainDBFile="C:\\Users\\vaness.chen\\Desktop\\3DTEST\\基本圖資\\高程\\Terrain20M.DB",
sourceEPSG="3826",
exportType=exportType
)
# 回傳轉檔進度直到轉檔完成
server.getConvert3dProgressToFinish(id)
# 將此圖層上架至伺服器
if exportType.upper() == "NORMAL":
server.save3dToServer(dbLayerName=layerName, layerName=layerName, layerType=LAYER_TYPE.OV_POINTCLOUD.name, dbUrl = layerName + ".DB")
elif exportType.upper() == "I3S":
server.save3dToServer(dbLayerName=layerName, layerName=layerName, layerType=LAYER_TYPE.OV_OGCI3S.name, dbUrl = layerName + ".DB")
將shp檔轉成ModelSet並上架至伺服器
透過綁定的server物件,並提供欲設定的圖層名稱(layerName
)及輸出格式(exportType
),將shp檔轉檔模型集並上架至伺服器
由於3d的轉檔需要較久的時間,因此轉檔的函式會回傳一個id(如: server.shpToModelSet
)
可以透過此id,去跟server詢問進度
當轉檔成功透過server.save3dToServer
依DB位置將圖層上架至伺服器(若輸出檔案格式為3DTILES則不上架)
參數名稱 | Type | 預設值 | 可輸入值 | 說明 |
---|---|---|---|---|
layerName | string | None | --- | 上架後的圖層名稱 |
layerDBFile | string | 預設名稱與layerName相同 | --- | 轉檔後產生的DB檔名稱 |
terrainName | string | None | --- | 初始地形圖層名稱 |
terrainDBFile | string | None | --- | 初始地形圖層位置 |
sourceFileName | string | None | --- | 欲轉檔檔案位置 |
heightField | string | None | --- | 屋頂高欄位的名稱 |
epsg | int | None | --- | 座標參考系統 |
exportType | string | None | NORMAL、I3S、3DTILES | 輸出檔案格式 |
from OViewPy.server import Server
from OViewPy.varstruct import LAYER_TYPE
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 設定layer名稱
layerName = "shpModelSetTry"
# 設定exportType(可輸入'NORMAL' or 'I3S' or '3DTILES')
exportType = "NORMAL"
# 轉檔管線圖層,並會生成其對應之DB
id = server.shpToModelSet(layerName=layerName,
layerDBFile=layerName + ".DB",
terrainName="terrain",
terrainDBFile="C:\\Users\\vaness.chen\\Desktop\\3DTEST\\基本圖資\\高程\\Terrain20M.DB",
sourceFileName="C:\\Users\\vaness.chen\\Desktop\\3DTEST\\基本圖資\\模型\\modelset練習用\\TaipeiBuilding2.shp",
heightField="屋頂高程",
epsg=4326,
exportType=exportType)
# 回傳轉檔進度直到轉檔完成
server.getConvert3dProgressToFinish(id)
# 將此圖層上架至伺服器
if exportType.upper() == "NORMAL":
server.save3dToServer(dbLayerName=layerName, layerName=layerName, layerType=LAYER_TYPE.OV_MODELSET.name, dbUrl = layerName + ".DB")
elif exportType.upper() == "I3S":
server.save3dToServer(dbLayerName=layerName, layerName=layerName, layerType=LAYER_TYPE.OV_OGCI3S.name, dbUrl = layerName + ".DB")
將huge檔轉成Model並上架至伺服器
透過綁定的server物件,並提供欲設定的圖層名稱(layerName
)及輸出格式(exportType
),將huge檔轉檔模型並上架至伺服器
由於3d的轉檔需要較久的時間,因此轉檔的函式會回傳一個id(如: server.hugeModelToModelLayer
)
可以透過此id,去跟server詢問進度
當轉檔成功透過server.save3dToServer
依DB位置將圖層上架至伺服器(若輸出檔案格式為3DTILES則不上架)
參數名稱 | Type | 預設值 | 可輸入值 | 說明 |
---|---|---|---|---|
dbPath | string | 預設名稱與layerName相同 | --- | 轉檔後產生的DB檔名稱 |
layerName | string | None | --- | 上架後的圖層名稱 |
terrainDBFile | string | None | --- | 初始地形圖層位置 |
terrainName | string | None | --- | 初始地形圖層名稱 |
sourceFileName | string | None | --- | 欲轉檔檔案位置 |
exportType | string | None | NORMAL、I3S、3DTILES | 輸出檔案格式 |
from OViewPy.server import Server
from OViewPy.varstruct import LAYER_TYPE
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 設定layer名稱
layerName = "hugeModelTry"
# 設定exportType(可輸入'NORMAL' or 'I3S' or '3DTILES')
exportType = "NORMAL"
# 轉檔HugeModel圖層,並會生成其對應之DB
id = server.hugeModelToModelLayer(dbPath=layerName + ".DB",
layerName=layerName,
terrainDBFile="C:\\Users\\vaness.chen\\Desktop\\3DTEST\\基本圖資\\高程\\Terrain20M.DB",
terrainName="terrain",
sourceFileName="C:\\Users\\vaness.chen\\Desktop\\3DTEST\\基本圖資\\模型\\HugeModel練習用\\-Z_Y.obj",
exportType=exportType
)
# 回傳轉檔進度直到轉檔完成
server.getConvert3dProgressToFinish(id)
# 將此圖層上架至伺服器
if exportType.upper() == "NORMAL":
server.save3dToServer(dbLayerName=layerName, layerName=layerName, layerType=LAYER_TYPE.OV_MODEL.name, dbUrl = layerName + ".DB")
elif exportType.upper() == "I3S":
server.save3dToServer(dbLayerName=layerName, layerName=layerName, layerType=LAYER_TYPE.OV_OGCI3S.name, dbUrl = layerName + ".DB")
Layer Module (2D Layer)
取得圖層物件
此Module分為RasterLayer
與VectorLayer
兩種圖層,在初始化圖層時請選擇正確的圖層分類。
第一個參數(server
)放置已綁定的Server物件,第二個參數(layerName
)放置要取得的圖層名稱。
取得圖層物件後,即可透過getLayerInfo
取得圖層相關資訊。
from OViewPy.server import Server
from OViewPy.layer import RasterLayer,VectorLayer
server = Server(url="http://127.0.0.1:8080")
raster = RasterLayer(server=server,layerName="GlobalPreview_Rough")
vector = VectorLayer(server=server,layerName="Town_MOI")
print(raster.layerInfo)
print(vector.layerInfo)
透過getMapImage
可取得給定範圍內的地圖圖片,此Function的參數如下:
此Function適用於
RasterLayer
與VectorLayer
。
參數名稱 | Type | 預設值 | 說明 |
---|---|---|---|
boundary | GeoBoundary | None | 欲取得圖片範圍。如未給值,將直接取得完整圖片。 |
width | int | 512 | 圖片寬度 |
height | int | 512 | 圖片高度 |
crs | string | EPSG:4326 | 座標參考系統 |
format | string | image/png | 圖片格式 |
from OViewPy.server import Server
from OViewPy.layer import VectorLayer
from OViewPy.varstruct import GeoBoundary
from OViewPy.da import da
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 綁定Layer物件
layer = VectorLayer(server=server,layerName="Town_MOI")
# 取得圖片,取得成功會回傳圖片bytes資料
img = layer.getMapImage(
boundary=GeoBoundary(147522.218692, 2422004.773002,
351690.114369, 2813163.248085),
crs="EPSG:3826",
width=512,
height=512,
format="image/png"
)
# 顯示圖片
da.showImg(img)
如果圖層物件為VectorLayer
,可透過getVectorEntity
取得一定範圍內的向量資料。
此Function的參數如下:
參數名稱 | Type | 預設值 | 說明 |
---|---|---|---|
bound | GeoBoundary/GeoPolygon | None | 欲取得向量資料範圍。如未給值,將直接取得完整圖層向量資料。 |
epsg | int | 4326 | 座標參考系統 |
sql | string | "" | 搜尋條件 |
from OViewPy.server import Server
from OViewPy.layer import VectorLayer
from OViewPy.varstruct import GeoBoundary
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 綁定Layer物件
map = VectorLayer(server=server, layerName="Town_MOI")
# 設定搜尋條件
sql = "County_ID=64"
# 取得向量資料
ret = map.getVectorEntity(epsg=3826,sql=sql)
print("Geo:", ret["geo"][0].ToDict())
print("Attr:", ret["attr"][0].ToDict())
OViewLayer Module
此Module分為TerrainLayer
、PipeLineLayer
、ModelLayer
、ModelSetLayer
等4種3D模型圖層。
第一個參數(server
)放置已綁定的Server物件,第二個參數(layerName
)放置要取得的圖層名稱。
取得圖層物件後,即可透過getLayerInfo
取得圖層相關資訊。
from OViewPy.server import Server
from OViewPy.oviewlayer import TerrainLayer, PipeLineLayer, ModelLayer, ModelSetLayer
server = Server(url="http://127.0.0.1:8080")
Terrain = TerrainLayer(server=server, layerName="gebco_2021_geotiff_retransfer")
PipeLine = PipeLineLayer(server=server, layerName="TaichungPipeline")
Model = ModelLayer(server=server, layerName="ChungHsingBIM")
ModelSet = ModelSetLayer(server=server, layerName="TaichungKMZ")
print(Terrain.layerInfo)
print(PipeLine.layerInfo)
print(Model.layerInfo)
print(ModelSet.layerInfo)
TerrainLayer
getDEMMatrix
TerrainLayer
可透過getDEMMatrix
取得地形網格資料,此Function的參數如下:
參數名稱 | Type | 預設值 | 說明 |
---|---|---|---|
boundary | GeoBoundary | None | 欲取得地形網格範圍。 |
cellDemSize | int | 500 | 地形網格數,將取得n*n個網格資料。 |
epsg | int | 4326 | boundary EPSG |
from OViewPy.server import Server
from OViewPy.oviewlayer import TerrainLayer
from OViewPy.varstruct import GeoBoundary
server = Server(url="http://127.0.0.1:8080")
Terrain = TerrainLayer(
server=server, layerName="gebco_2021_geotiff_retransfer")
boundary = GeoBoundary(119.981273, 21.892673,
122.010898, 25.424327)
matrix = Terrain.getDEMMatrix(boundary=boundary, cellDemSize=500, epsg=4326)
print(type(matrix))
hillshadeAnalysis
取得山體陰影分析,分析結果將存為GeoTiff,此Function的參數如下:
參數名稱 | Type | 預設值 | 說明 |
---|---|---|---|
boundary | GeoBoundary | None | 欲取得地形網格範圍。 |
cellDemSize | int | 500 | 地形網格數,將取得n*n個網格資料。 |
epsg | int | 4326 | boundary EPSG |
azimuth | int | 30 | 太陽方位角 |
altitude | int | 30 | 太陽高度角 |
savePath | string | "." | 檔案儲存位置 |
fileName | string | "defaultDEM" | 檔案名稱 |
width | int | 21600 | 圖片寬 |
height | int | 21600 | 圖片高 |
from OViewPy.server import Server
from OViewPy.oviewlayer import TerrainLayer
from OViewPy.varstruct import GeoBoundary
server = Server(url="http://127.0.0.1:8080")
Terrain = TerrainLayer(
server=server, layerName="gebco_2021_geotiff_retransfer")
boundary = GeoBoundary(119.981273, 21.892673,
122.010898, 25.424327)
Terrain.hillshadeAnalysis(boundary=boundary, cellDemSize=500, epsg=4326,
azimuth=150, altitude=60,
savePath=".", fileName="defaultHillShade", width=10800, height=21600)
slopeAnalysis
取得坡度分析,分析結果將存為GeoTiff,此Function的參數如下:
參數名稱 | Type | 預設值 | 說明 |
---|---|---|---|
boundary | GeoBoundary | None | 欲取得地形網格範圍。 |
cellDemSize | int | 500 | 地形網格數,將取得n*n個網格資料。 |
epsg | int | 4326 | boundary EPSG |
savePath | string | "." | 檔案儲存位置 |
fileName | string | "defaultDEM" | 檔案名稱 |
width | int | 21600 | 圖片寬 |
height | int | 21600 | 圖片高 |
from OViewPy.server import Server
from OViewPy.oviewlayer import TerrainLayer
from OViewPy.varstruct import GeoBoundary
server = Server(url="http://127.0.0.1:8080")
Terrain = TerrainLayer(
server=server, layerName="gebco_2021_geotiff_retransfer")
boundary = GeoBoundary(119.981273, 21.892673,
122.010898, 25.424327)
Terrain.slopeAnalysis(boundary=boundary, cellDemSize=500, epsg=4326,
savePath=".", fileName="defaultSlope", width=10800, height=21600)
aspectAnalysis
取得坡向分析,分析結果將存為GeoTiff,此Function的參數如下:
參數名稱 | Type | 預設值 | 說明 |
---|---|---|---|
boundary | GeoBoundary | None | 欲取得地形網格範圍。 |
cellDemSize | int | 500 | 地形網格數,將取得n*n個網格資料。 |
epsg | int | 4326 | boundary EPSG |
savePath | string | "." | 檔案儲存位置 |
fileName | string | "defaultDEM" | 檔案名稱 |
width | int | 21600 | 圖片寬 |
height | int | 21600 | 圖片高 |
from OViewPy.server import Server
from OViewPy.oviewlayer import TerrainLayer
from OViewPy.varstruct import GeoBoundary
server = Server(url="http://127.0.0.1:8080")
Terrain = TerrainLayer(
server=server, layerName="gebco_2021_geotiff_retransfer")
boundary = GeoBoundary(119.981273, 21.892673,
122.010898, 25.424327)
Terrain.aspectAnalysis(boundary=boundary, cellDemSize=500, epsg=4326,
savePath=".", fileName="defaultAspect", width=10800, height=21600)
contourLineAnalysis
取得等高線分析,分析結果將存為png/GeoJson,此Function的參數如下:
參數名稱 | Type | 預設值 | 說明 |
---|---|---|---|
boundary | GeoBoundary | None | 欲取得地形網格範圍。 |
cellDemSize | int | 500 | 地形網格數,將取得n*n個網格資料。 |
epsg | int | 4326 | boundary EPSG |
savePath | string | "." | 檔案儲存位置 |
fileName | string | "defaultDEM" | 檔案名稱 |
fileType | string | "image" | 儲存類型,"image" / "geojson" |
width | int | 21600 | 圖片寬 |
height | int | 21600 | 圖片高 |
from OViewPy.server import Server
from OViewPy.oviewlayer import TerrainLayer
from OViewPy.varstruct import GeoBoundary
server = Server(url="http://127.0.0.1:8080")
Terrain = TerrainLayer(
server=server, layerName="gebco_2021_geotiff_retransfer")
boundary = GeoBoundary(119.981273, 21.892673,
122.010898, 25.424327)
Terrain.contourLineAnalysis(boundary=boundary, cellDemSize=500, epsg=4326,fileType="image",
savePath=".", fileName="defaultContourLine", width=10800, height=21600)
Terrain.contourLineAnalysis(boundary=boundary, cellDemSize=500, epsg=4326,fileType="geojson",
savePath=".", fileName="defaultContourLine")
OViewEntityLayer
除了TerrainLayer
外,其餘三種圖層皆屬於OViewEntityLayer
,可透過getVectorEntity
取得圖層Entity。
此Function參數如下:
參數名稱 | Type | 預設值 | 說明 |
---|---|---|---|
bound | GeoBoundary/GeoPolygon | None | 欲取得向量資料範圍。如未給值,將直接取得完整圖層向量資料。 |
epsg | int | 4326 | 座標參考系統 |
sql | string | "" | 搜尋條件 |
from OViewPy.server import Server
from OViewPy.oviewlayer import PipeLineLayer, ModelLayer, ModelSetLayer
server = Server(url="http://127.0.0.1:8080")
PipeLine = PipeLineLayer(server=server, layerName="TaichungPipeline")
# Model = ModelLayer(server=server, layerName="ChungHsingBIM")
# ModelSet = ModelSetLayer(server=server, layerName="TaichungKMZ")
ret = PipeLine.getVectorEntity()
print("Geo:", ret["geo"][0].ToDict())
print("Attr:", ret["attr"][0].ToDict())
Data Access Module
使用資料處理模組
此模組可將取得的資料轉換成Python常用的Numpy、Shapely等資料格式,以供開發者方便計算。
圖片(Bytes)與Numpy Array轉換
from OViewPy.server import Server
from OViewPy.layer import VectorLayer
from OViewPy.varstruct import GeoBoundary
from OViewPy.da import da
import cv2
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 綁定Layer物件
layer = VectorLayer(server=server,layerName="Town_MOI")
# 取得圖片,取得成功會回傳圖片bytes資料
img = layer.getMapImage(
boundary=GeoBoundary(147522.218692, 2422004.773002,
351690.114369, 2813163.248085),
crs="EPSG:3826",
width=512,
height=512,
format="image/png"
)
# 將圖片轉換成Numpy Array
npArray = da.imgToNumPyArray(img)
# 透過cv2讀取Numpy Array
image = cv2.imdecode(npArray, cv2.IMREAD_UNCHANGED)
# 處理成高斯模糊
blurred = cv2.GaussianBlur(image, (51, 51), 0)
# 將處理後的圖片轉成jpg編碼
blurred = cv2.imencode('.jpg',blurred)[1]
# 將Numpy Array 轉回 Bytes格式
blurred = da.numPyArrayToImg(blurred)
# 顯示圖片
da.showImg(blurred)
# 儲存圖片
da.saveImg(img=blurred, savePath=".", imgName="高斯模糊", imgType="jpg")
向量格式轉換成Numpy Array
from OViewPy.server import Server
from OViewPy.layer import VectorLayer
from OViewPy.varstruct import GeoBoundary
from OViewPy.da import da
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 綁定Layer物件
map = VectorLayer(server=server, layerName="Town_MOI")
# 設定範圍
geo = GeoBoundary(147522.218692, 2422004.773002,
351690.114369, 2813163.248085)
# 取得向量資料
ret = map.getVectorEntity(bound=geo,epsg=3826)
# 將向量資料轉換成Numpy
npRet = da.vectorEntityToNumPyArray(ret["geo"])
# 顯示資料類型
print(type(npRet[0]))
向量格式轉換成Shapely
from OViewPy.server import Server
from OViewPy.layer import VectorLayer
from OViewPy.varstruct import GeoBoundary
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 綁定Layer物件
map = VectorLayer(server=server,layerName="Town_MOI")
# 設定範圍
geo = GeoBoundary(147522.218692, 2422004.773002,
351690.114369, 2813163.248085)
# 取得向量資料
ret = map.getVectorEntity(bound=geo)
# 將向量資料轉換成Numpy
shpRet = da.vectorEntityToShapely(ret["geo"])
# 顯示資料類型
print(type(shpRet[0]))
向量格式轉換成TIF
from OViewPy.server import Server
from OViewPy.oviewlayer import TerrainLayer
from OViewPy.varstruct import GeoBoundary
from OViewPy.da import da
# 綁定Server物件
server = Server(url="http://127.0.0.1:8080")
# 綁定Layer物件
Terrain = TerrainLayer(server=server, layerName="terrain")
# 設定範圍
boundary = GeoBoundary(119.981273, 21.892673,
122.010898, 25.424327)
# 取得向量資料
matrix = Terrain.getDEMMatrix(boundary=boundary, cellDemSize=400, epsg=4326)
# numpyArray輸出成tif檔
da.numPyArrayToTIF(matrix, boundary=boundary, width=1500, height=1500)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file OViewPy-1.2.1.tar.gz
.
File metadata
- Download URL: OViewPy-1.2.1.tar.gz
- Upload date:
- Size: 29.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.15.0 pkginfo/1.8.3 requests/2.27.1 setuptools/44.1.1 requests-toolbelt/0.10.1 tqdm/4.64.1 CPython/2.7.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e3b85fb3c7adef73ef3400df2d8d2ac39d5c3ea59bba25974d2ae86da742c05b |
|
MD5 | d79af174cb9413a2739a44862e030d32 |
|
BLAKE2b-256 | 8401231cbc43b1bc1d28319a6b33ba5c4afd312653e5d935bc5fc2ad69adfe35 |
File details
Details for the file OViewPy-1.2.1-py3-none-any.whl
.
File metadata
- Download URL: OViewPy-1.2.1-py3-none-any.whl
- Upload date:
- Size: 23.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.15.0 pkginfo/1.8.3 requests/2.27.1 setuptools/44.1.1 requests-toolbelt/0.10.1 tqdm/4.64.1 CPython/2.7.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 63d83e6db2ae5cff9c45518fbfb3a937d3e1bab97c0d91b16e515b53d0a237c9 |
|
MD5 | 9749f26ee1659217abcf58e510548d93 |
|
BLAKE2b-256 | 79dc4a568c347340501cfb1be49ee666a84e012a488a20ef28393318bd853a4e |