Skip to content

数据获取

主要用于从数采软件场景内获取模型对象、属性、图层、文件等信息

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())