03_數據查詢-iObjects Python with JupyterHub for K8s

數據查詢-iObjects Python with JupyterHub for K8s

這裏演示如何在JupyterHub中使用iObjects python進行空間數據的查詢操做,從而提取出本身關心的信息。java

查詢結果寫入到另外的數據集中,而後可使用其餘的工具(如iDesktop/iClient等)打開。python

from iobjectspy import (Point2D,
                        QueryParameter,
                        open_datasource,
                        create_datasource,
                        SpatialQueryMode)
import os
# 設置示例數據路徑
#example_data_dir = ''
example_data_dir = '/home/jovyan/data/smdata/'

# 設置結果輸出路徑
out_dir = os.path.join(example_data_dir, 'out')

if not os.path.exists(out_dir):
    os.makedirs(out_dir)
def _write_result_recordset(recordset):
    """將查詢的結果記錄集寫入數據源中"""

    record_out_path = os.path.join(out_dir, 'out_query_data.udb')
    if not os.path.exists(record_out_path):
        ds = create_datasource(record_out_path)
    else:
        ds = open_datasource(record_out_path)
    assert ds is not None, '打開結果數據源失敗'

    result_dt = ds.write_recordset(recordset, out_dataset_name=recordset.dataset.name + '_query')

    if result_dt is not None:
        print('寫入查詢結果記錄集到數據集 ' + ds.connection_info.server + '|' + result_dt.name + ' 成功')
    else:
        print('寫入查詢結果記錄集失敗')
    ds.close()


def attribute_filter_query_test():
    """對數據集 landr 進行屬性查詢,並將查詢結果輸出到結果數據源中"""

    ds = open_datasource(os.path.join(example_data_dir, 'example_data.udb'))
    assert ds is not None, '打開數據源失敗'

    dataset = ds['landr']
    assert dataset is not None, '獲取數據集失敗'

    recordset = dataset.query_with_filter('R_AREA > 500 and R_AREA < 5000', cursor_type='STATIC')
    assert recordset is not None, '查詢記錄集失敗'

    print('屬性查詢結果記錄數爲: ' + str(recordset.get_record_count()))

    _write_result_recordset(recordset)

    ds.close()


def bounds_query_test():
    """對數據集 landr 進行地理範圍查詢,並將查詢結果輸出到結果數據源中"""

    ds = open_datasource(os.path.join(example_data_dir, 'example_data.udb'))
    assert ds is not None, '打開數據源失敗'

    dataset = ds['landr']
    assert dataset is not None, '獲取數據集失敗'

    rc = ds['adminR'].get_geometries('SmID == 2')[0].bounds
    recordset = dataset.query_with_bounds(rc, cursor_type='STATIC')
    assert recordset is not None, '查詢記錄集失敗'

    print('範圍查詢結果記錄數爲: ' + str(recordset.get_record_count()))

    _write_result_recordset(recordset)

    ds.close()


def distance_query_test():
    """對數據集 landp 進行距離查詢, 查詢距離爲100米, 並將查詢結果輸出到結果數據源中"""

    ds = open_datasource(os.path.join(example_data_dir, 'example_data.udb'))
    assert ds is not None, '打開數據源失敗'

    dataset = ds['landp']
    assert dataset is not None, '獲取數據集失敗'

    recordset = dataset.query_with_distance(Point2D(315.782892179537, 260.119529494306), 100, unit='Meter',
                                            cursor_type='STATIC')
    assert recordset is not None, '查詢記錄集失敗'

    print('距離查詢結果記錄數爲: ' + str(recordset.get_record_count()))

    _write_result_recordset(recordset)

    ds.close()


def spatial_query_test():
    """對數據集 landp 進行空間查詢查詢, 並將查詢結果輸出到結果數據源中"""

    ds = open_datasource(os.path.join(example_data_dir, 'example_data.udb'))
    assert ds is not None, '打開數據源失敗'

    dataset = ds['landp']
    assert dataset is not None, '獲取數據集失敗'

    query_geo = ds['adminR'].get_geometries('SmID == 2')[0]
    query_parameter = (QueryParameter().set_spatial_query_mode(SpatialQueryMode.CONTAIN).
                       set_spatial_query_object(query_geo).set_cursor_type('static'))

    recordset = dataset.query(query_parameter)

    assert recordset is not None, '查詢記錄集失敗'

    print('空間查詢結果記錄數爲: ' + str(recordset.get_record_count()))

    _write_result_recordset(recordset)

    ds.close()
if __name__ == '__main__':
    # 屬性查詢
    attribute_filter_query_test()

    # 範圍查詢
    bounds_query_test()

    # 距離查詢
    distance_query_test()

    # 空間查詢
    spatial_query_test()
java -cp /opt/conda/lib/python3.6/site-packages/iobjectspy/_jsuperpy/jars/com.supermap.jsuperpy-9.1.1.jar com.supermap.jsuperpy.ApplicationExample 127.0.0.1 49289
[iObjectsPy]: Connection gateway-service successful, Python callback port bind 39229

屬性查詢結果記錄數爲: 319
寫入查詢結果記錄集到數據集 /home/jovyan/data/smdata/out/out_query_data.udb|landr_query 成功
範圍查詢結果記錄數爲: 96
寫入查詢結果記錄集到數據集 /home/jovyan/data/smdata/out/out_query_data.udb|landr_query_1 成功
距離查詢結果記錄數爲: 458
寫入查詢結果記錄集到數據集 /home/jovyan/data/smdata/out/out_query_data.udb|landp_query 成功
空間查詢結果記錄數爲: 49
寫入查詢結果記錄集到數據集 /home/jovyan/data/smdata/out/out_query_data.udb|landp_query_1 成功
相關文章
相關標籤/搜索