zoukankan      html  css  js  c++  java
  • WebGIS中基于控制点库进行SHP数据坐标转换的一种查询优化策略

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

    1.前言

    目前项目中基于控制点库进行SHP数据的坐标转换,流程大致为:遍历图层要素,获取每个要素的坐标串,查询控制点库,分别进行坐标转换,构建新的要素,最后构建新的图层。此方法效率如下:

    a.控制点库有100W个控制点对。

    b.待转换SHP数据有5K个面要素。

    转换完毕大概需要120分钟。

    此效率是相对较低的,如果想对更多包含大量要素的图层组数据进行批量转换,耗时会成倍增长。这里,我们进行了一些列优化探索。

    2.思路分析

    以上方法,耗时最多的是大表查询,即在控制点库中查询对应参考坐标。

    对大表查询有很多种优化策略,比如将大表改成多个小表,根据业务建立相关索引等等。这里我们一起探讨另外一种方法,流程图如下:

                           

    该思路的核心为:遍历获得单个feature后,便根据该feature的extent建立包含局部信息的视图,减少不必要的全表查询。

    最后结果测试为:

    a.控制点库有100W个控制点对。

    b.待转换SHP数据有5K个面要素。

    转换完毕大概需要5分钟。

    3.进一步优化

    以上方法是利用视图来进行查询优化,但是每个视图建立完后还需要控制代码销毁。这个过程会影响效率。

    3.1事务临时表

    临时表分为了会话临时表和事务临时表。

    会话临时表是指:该临时表肯定与会话有关。会话在不退出时,则些临时表中的数据存在,会话退出,该临时表中的数据也会随之消失。并且,在多用户操作的情况下,一个会话从来不阻塞另一个会话使用临时表。即使锁定临时表,一个会话也不会阻塞其他会话使用临时表。

    事务临时表是指:该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断。

    根据业务需求,这里选用事务临时表,主要利用其事务结束后会自动将数据做TRUNCATE的功能。

    事务临时表的构建规则如下:

    Create global temporary table table_name
    (col1 type1, col2 type2 …)
    On commit delete rows;

    3.2测试结果

    使用事务临时表进行改造后,测试结果如下:

    a.控制点库有100W个控制点对。

    b.待转换SHP数据有5K个面要素。

    转换完毕大概需要2.5分钟。

    4.总结

    这里的核心思想还是进行大表改小表,不过将小表设计为临时表,此种方法在过滤查询数据时效果十分明显。

                                                                            -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

  • 相关阅读:
    二分排序之三行代码
    最短路径—Floyd算法
    最小生成树 Kruskal算法
    最小生成树-Prim算法
    最短路径之迪杰斯特拉(Dijkstra)算法
    C函数指针
    Linux进程的实际用户ID和有效用户ID
    C++ 之Boost 实用工具类及简单使用
    ELK之消息队列选择redis_kafka_rabbitmq
    Python文件操作
  • 原文地址:https://www.cnblogs.com/naaoveGIS/p/5468249.html
Copyright © 2011-2022 走看看