OViewPy 1.2.1

Creator: railscoder56

Last updated:

Add to Cart

Description:

OViewPy 1.2.1

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)

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.