数据获取
主要用于从数采软件场景内获取模型对象、属性、图层、文件等信息
1. 获取文件列表
获取数采软件场景下的已经打开的文件列表,包含文件id、文件名
import asyncio
from dimine_python_sdk.conn import open_client
async def main():
async with open_client() as client:
# 获取文件列表
files = await client.get_files()
for file in files:
print(file.name)
print(file.id)
if __name__ == '__main__':
asyncio.run(main())
2. 获取图层信息
获取文件下的图层信息,包含图层id、图层名称、图层类型
import asyncio
from dimine_python_sdk.conn import open_client
async def main():
async with open_client() as client:
# 获取文件列表
files = await client.get_files()
# 获取最后一个文件下的图层
layers = await client.get_layers(file_id=files[len(files)-1].id)
for layer in layers:
print(layer.id)
print(layer.name)
print(layer.layer_type)
if __name__ == '__main__':
asyncio.run(main())
3. 获取特定图层的模型
通过指定图层ID来获取特定图层下的模型:
import asyncio
from dimine_python_sdk.conn import open_client
async def main():
async with open_client() as client:
# 获取文件列表
files = await client.get_files()
# 获取文件的所有图层
layers = await client.get_layers(file_id=files[0].id)
# 获取第一个图层的所有模型
if len(layers) > 0:
geometries = await client.get_geometry(
file_id=files[0].id,
layer_id=layers[0].id,
entity_types=["point", "line", "shell"]
)
print(f"图层 '{layers[0].name}' 包含 {len(geometries)} 个模型")
for geometry in geometries:
print(f" - {geometry.type}: {geometry.geometry}")
if __name__ == '__main__':
asyncio.run(main())
3. 获取模型对象
获取模型对象,包含模型对象id、模型对象类型、模型对象颜色、所属要素、所属图层、属性数组、模型对象几何信息
import asyncio
from dimine_python_sdk.conn import open_client
async def main():
async with open_client() as client:
# 获取文件列表
files = await client.get_files()
# 获取最后一个文件下的图层
layers = await client.get_layers(file_id=files[len(files)-1].id)
# 获取最后图层下的模型对象数组
geometries = await client.get_geometry(file_id=files[len(files)-1].id, layer_id=layers[0].id, ["point"])
for geometry in geometries:
print(geometry.id) # 模型对象id
print(geometry.type) # 模型对象类型
print(geometry.color) # 展示颜色
print(geometry.feature) # 所属要素
print(geometry.layer) # 所属图层
print(geometry.properties) # 属性数组
print(geometry.geometry) # 模型对象几何信息:点: np.ndarray(3,), 线: np.ndarray(N,3), 实体: TINGeometry
if __name__ == '__main__':
asyncio.run(main())
4. 获取特定类型的模型
可以通过entity_types参数过滤获取特定类型的模型:
import asyncio
from dimine_python_sdk.conn import open_client
async def main():
async with open_client() as client:
# 获取文件列表
files = await client.get_files()
layers = await client.get_layers(file_id=files[0].id)
# 获取文件下所有图层中的所有类型的模型
geometries = await client.get_geometry(file_id=files[0].id, layer_id=layers[0].id, entity_types=["point", "line"])
for geometry in geometries:
print(f"类型: {geometry.type}, 坐标: {geometry.geometry}")
if __name__ == '__main__':
asyncio.run(main())
5. 获取特定要素的模型
可以通过features参数过滤获取特定要素关联的模型:
import asyncio
from dimine_python_sdk.conn import open_client
async def main():
async with open_client() as client:
# 获取文件列表
files = await client.get_files()
layers = await client.get_layers(file_id=files[0].id)
features = await client.get_features(files[0].id)
# 获取特定要素的模型
geometries = await client.get_geometry(
file_id=files[0].id,
layer_id=layers[0].id,
entity_types=["point", "line", "shell"],
features=[features[0].name] # 只获取第一个要素的模型
)
for geometry in geometries:
print(f"要素: {geometry.feature}, 类型: {geometry.type}")
if __name__ == '__main__':
asyncio.run(main())
5. 获取要素信息
获取文件中的要素定义,包括要素名称和属性定义:
import asyncio
from dimine_python_sdk.conn import open_client
from dimine_python_sdk.models.types import FeatureInfo, PropertyInfo
async def main():
async with open_client() as client:
# 获取文件列表
files = await client.get_files()
features = await client.get_features(files[0].id)
for feature in features:
print(f"要素名称: {feature.name}")
print("属性定义:")
for prop in feature.properties:
print(f" - {prop.name}: {prop.type}")
if __name__ == '__main__':
asyncio.run(main())
6. 获取特定类型的模型
可以通过entity_types参数过滤获取特定类型的模型:
import asyncio
from dimine_python_sdk.conn import open_client
async def main():
async with open_client() as client:
# 获取文件列表
files = await client.get_files()
layers = await client.get_layers(file_id=files[0].id)
# 获取文件下所有图层中的所有类型的模型
geometries = await client.get_geometry(file_id=files[0].id, layer_id=layers[0].id, entity_types=["point", "line"])
for geometry in geometries:
print(f"类型: {geometry.type}, 坐标: {geometry.geometry}")
if __name__ == '__main__':
asyncio.run(main())
7. 获取特定要素的模型
可以通过features参数过滤获取特定要素关联的模型:
import asyncio
from dimine_python_sdk.conn import open_client
async def main():
async with open_client() as client:
# 获取文件列表
files = await client.get_files()
layers = await client.get_layers(file_id=files[0].id)
features = await client.get_features(files[0].id)
# 获取特定要素的模型
geometries = await client.get_geometry(
file_id=files[0].id,
layer_id=layers[0].id,
entity_types=["point", "line", "shell"],
features=[features[0].name] # 只获取第一个要素的模型
)
for geometry in geometries:
print(f"要素: {geometry.feature}, 类型: {geometry.type}")
if __name__ == '__main__':
asyncio.run(main())
8. 获取实体(Shell)模型信息
实体模型使用三角网(TIN)表示,包含顶点和面片信息:
import asyncio
from dimine_python_sdk.conn import open_client
from dimine_python_sdk.models.types import Shell
async def main():
async with open_client() as client:
# 获取文件列表
files = await client.get_files()
layers = await client.get_layers(file_id=files[0].id)
# 获取所有实体模型
geometries = await client.get_geometry(
file_id=files[0].id,
layer_id=layers[0].id,
entity_types=["shell"]
)
for geometry in geometries:
if isinstance(geometry, Shell):
print(f"实体ID: {geometry.id}")
print(f"顶点数: {geometry.geometry.points.shape[0]}")
print(f"面片数: {geometry.geometry.faces.shape[0]}")
print(f"顶点坐标: {geometry.geometry.points}")
print(f"面片索引: {geometry.geometry.faces}")
print(f"颜色: {geometry.color}")
if __name__ == '__main__':
asyncio.run(main())