Polygon simplification

Polygons can be simplified from an original, higher resolution to a simplified, lower resolution such that the simplified versions of the polygons do not introduce errors and also do not render boundaries shared with other polygons invalid.

TECHNICAL FIELD

The subject matter described herein relates to spatial data, for example spatial data representing areas or volumes as polygons or polyhedrons.

BACKGROUND

Polygons can be stored in databases (including but not limited to high speed, in main-memory databases such as HANA available from SAG AG or Walldorf, Germany) to support various applications, such as for example definitions of sales regions, disaster regions, geographical or political boundaries, and the like. For simplicity of explanation, discussions herein of polygons are intended to refer to both two-dimensional polygons.

Column-oriented data structures serving as a basis for column-stores have recently matured into a powerful component of today's enterprise applications. Column-stores can be found as standalone in-main memory database systems (e.g. the SAP HANA platform, available from SAP AG of Walldorf, Germany), or alternatively, integrated into other types of systems, including for example business software systems such as enterprise resource planning (ERP) systems or the like. Column store based data management architectures have proven to be superior to traditional row-stores in terms of performance, in particular for online analytical processing (OLAP) analytical workloads that are common in data warehousing and business intelligence (BI) applications. One reason for this improved performance relative to previously available approaches is the ability to efficiently process (compressed) column-oriented, in-main memory data structures through hardware-optimized scans. Several recent developments have added to improvements in performance and functionality, such as transactional environments or compression techniques.

For traditional warehouse and BI applications, the primary focus in terms of information needs has been on transactional data. Such data includes information about products, manufacturers, suppliers, customers, sales and shipment transactions, and the like. While storage and query processing techniques have been highly optimized for analytical workloads operating on such data, the aspect that the majority of the data also have some geographic component has mostly been neglected. Although information about point-of-sales or customer records typically contains address information, characteristics of such data, including tailored functionality such as spatial and topological predicates, have received little attention. A typical current approach is to geocode address information and to manage respective latitude and longitude information for addresses in extra fields. This approach is also applied in conventional column-oriented data management architectures in support of BI applications. With such arrangements, geographic coordinates corresponding to addresses are managed in standard columns that simply contain floating-point numbers. In other words, geographic data is not handled in a native way but managed and queried using techniques that are employed for traditional numeric and textual data.

An intuitive approach to add spatial features to column stores is to employ some of the proven spatial index structures that are used in relational database management systems (DBMS). Viable candidates for such an approach are R-Tree variants, K-d Trees, or Quadtrees, among many other (specialized) spatial index structures. However, these index structures are mainly targeted towards efficient access to secondary storage structures and therefore focus on block-optimized read and write operations. For column-organized data managed in an in-memory database, however, such tree-based index structures are not appropriate. There are several reasons for this limitation. First, column stores gain their performance through optimized scans of vector data that is not chunked into blocks. Second, tree-based index structures like the ones mentioned above incur overhead in space and time complexity because an index itself needs to be managed. In particular, nodes in these tree structures are linked in support of search and update procedures. Thus, they do not provide for continuous scans of in main-memory structures but require following link structures.

SUMMARY

In various aspects of the current subject matter, data structures and approaches consistent with those described herein can support intelligent resolution reduction (also referred to as “simplification” of polygons stored within a database. A simplification approach can include dissection of a first polygon into line segments or paths, omission of one or more points (e.g. a second point occupying a same pixel as a preceding point in the simplified resolution version of the polygon), increasing a local resolution for a part (e.g. a line segment, a path, etc.) of a polygon if omission of a point results in an error. The simplification approach can also include validation of the dissection results, for example by use of an inverse mapping of paths or line segments to polygons within which the paths or line segments are included. An increase in a local resolution required for a path can also be applied to the path appearing in a second polygon whose boundary is shared with the first polygon.

DETAILED DESCRIPTION

Application developers can use polygons as content to display in native applications and web browsers, either in a stand-alone fashion or overlaid onto geographical maps as well as in other potential applications for representing areas or volumes. Polygonal representations are typically stored in a database with a very high level of detail or resolution and thus can consume a significant amount of storage space and also bandwidth when being transmitted from a server to a client over a network. However, some polygons defining very large geographical regions (e.g. an outline of a country) or other areas or volumes may not be displayed at their highest level of detail but rather “far from above” or where fine-grained detail may be less important. Accordingly, an ability to deliver a coarser grained, simplified version of a polygon can result in savings in transmission time between a server and one or more client machines, thereby improving user interaction speed, computation performance, etc. Simplification of polygons can also facilitate displaying a large number of polygons at once, which in sum could not be handled by a client machine at full resolution.

Consistent with implementations of the current subject matter, polygons and multi-polygons can be simplified for display at lower resolution while preserving an overall topology represented at a higher resolution at which a polygon or multi-polygon is stored. Polygon simplification can be achieved using an approach that includes a dissection process and a validation process.

The dissection process can include decomposing a plurality of polygons internally into a sequence of paths. Each path (e.g. a line that can be straight or alternatively, can include one or more curves) includes points with exactly two neighbors. An example of this feature is illustrated in the view of part of a polygon100shown inFIG. 1in which paths are shown as straight line segments. An example line segment102in the polygon connects a first point104, which is shared with a first neighboring line segment106, with a second point110, which is shared with a second neighboring line segment112. The first neighboring line segment106is defined by the first point104and a third point114, which is in turn shared with yet another line segment116, and so forth. The decomposed sequences can be stored, for example in one or more columns of a database. The dissection constructs an internal graph representation in which nodes are all points contained in the polygon. An edge between two nodes is inserted if the nodes follow another in at least one polygon.

It will be understood that the term path as used herein need not refer only to straight line segments as shown inFIG. 1. Rather, a path can include a straight or non-straight line that includes a plurality of points. In some examples, a path can include all or some of a shared boundary between two neighboring polygons. For example, a path can define a border between two geographic areas such as countries. A second path can define a border between one of the two geographic areas and a third geographic area. Paths can optionally be stored with some amount of compression as line segments, such as is described in the following paragraphs.

An example of storage of the line segments into which paths of one or more polygons can be decomposed can be explained by reference to storage of line segments generally, for example storage of a set of line segments into which a linestring is decomposed. In the case of a polygon, such a linestring generally closes back upon itself such that a last point of a last line segment of the linestring forming the polygon is the same as a first point of a first line segment of a first linestring forming the polygon.FIG. 2shows a table200listing an example set of linestrings as a set of X, Y pairs that are connected to form at least part of a polygon.

The data representing lines segments of polygons in a spatial data set can optionally be compressed by applying a dictionary compression approach. In such an approach, the linestrings listed inFIG. 2can be broken down (e.g. decomposed) into individual line segments, which can be stored in a set of dimensional dictionaries, one for each dimension. For two-dimensional data as in the current example, two dimensional dictionaries can be used to retain the X and Y coordinates, respectively, for each of the points appearing in at least one line segment of a linestring in the example set.FIG. 3AandFIG. 3Bshow the two dimensional dictionaries300,350, which list each coordinate dimension for the two-dimensional data set that includes the linestrings listed in the table200ofFIG. 2. It will be readily understood that a three-dimensional data set would have three such dimensional dictionaries, while a four-dimensional or greater data set would have a number of dimensional dictionaries corresponding to the existent number of dimensions.

FIG. 4shows a line segment table400illustrating how the polygon linestrings shown in the table200ofFIG. 2are represented as a set of line segments using the dimensional dictionaries300and350. In the line segment table400, the values in the docID column refer to the linestring to which the line segment defined in each row of the line segment table400belong. Such values can optionally be considered to be rowID values referring back to the table100listing the linestrings. The line segments are atomic, with each linestring being representable as a combination of one or more atomic line segments defined using the dimensional dictionaries, such as those explained with reference toFIG. 3AandFIG. 3B. Representation of line segments in this manner requires a column corresponding to each dimension for each of the start point or vertex and the end point or vertex that combine to form the line segments in the compressed data. Each line segment can then be identified by four index vectors, each indicating a position within the dimensional dictionaries300,350at which the coordinate values of the start and end vertices of the liens segment are stored.

A polygon stored in the manner discussed above can be simplified, for example to provide a lower resolution version of the polygon for display on or transmission to a device that does not require or is otherwise not capable of displaying a polygon at the same resolution at which the polygon is stored in the database. Consistent with implementations of the current subject matter by omitting points in one or more of the line strings of a polygon. Points that that occupy a same pixel as another preceding point can be omitted. A level of simplification can be characterized by an absolute or relative change in pixel size (resolution), for example in meters or some other dimension. In other words, the polygon can have an original resolution (also referred to as a first resolution) at which details on the polygon are resolvable at a first physical distance (e.g. one meter) and a simplified resolution (also referred to as a second resolution) at which details on the polygon are resolvable at a second physical distance (e.g. ten meters, 1 km, etc.), which is greater than the first physical distance.

The simplified resolution can be characterized by a pixel size, for example in meters or some other dimension. In other words, the simplified resolution into which the polygon is projected from its original resolution can have a simplified resolution pixel size that relates to an original resolution pixel size by a simplification factor. As an example, an original resolution can include a one meter per pixel original resolution pixel size. The simplified resolution can include a simplification factor of 10 such that the simplified resolution pixel size is 10 meters per pixel.

A polygon stored can be simplified consistent with implementations of the current subject matter by omitting points in one or more of the line strings of a polygon. Points that occupy a same pixel as another preceding point in the simplified resolution can be omitted. For a polygon that is represented in a database as a sequence of paths or line segments, a reduction in resolution can cause points defining more than one line segment in the original resolution polygon to occur in the same pixel at the simplified resolution. Alternatively, for a non-linear path containing a plurality of points, two or more successive points may occupy a same pixel in the simplified resolution version of the polygon such that a second of the two successive points in the same pixel can be omitted. For a path that is compressed as line segments, the polygon can be simplified by a process that includes omitting one or more points and thereby redefining the two line segments that define the omitted point as a single line segment that spans between a starting point of the first of the two line segments and an ending point of the second of the two line segments.

In another option, interpolation to create a replacement line segment that replaces two or more line segments of a polygon can be used in place of or in addition to omission of points to convert a polygon to a simplified resolution. Referring again toFIG. 1, a part of the example polygon100can be simplified by omission of the first point104and replacement of the line segment102and the first neighboring line segment106with a new line segment120that spans between the second point110and the third point114.

A point can be omitted if only a small error is caused by the omission. In other words, an error caused by removing any given point from the original resolution of the polygon as part of simplifying the polygon (e.g., a relative or absolute error introduced in a circumference, an area, or some other characteristic of a polygon simplified consistent with implementations of the current subject matter when compared to the original, unsimplified polygon) can be compared with a maximum allowable error value (which can be predefined, or alternatively, determined at runtime based on one or more calculated criteria). If the error for removal of a point exceeds the maximum allowable error value, the point is not omitted in the simplified resolution version of the polygon. Additional error criteria can also be considered. For example, boundaries of polygons (including reduced resolution polygons consistent with the descriptions herein) can be required to fulfill specific properties (e.g. the boundary can be required to be non-zero, and to not be self-intersecting). In general, determining of whether a point can be omitted includes determining whether an impermissible error is caused by removal of the point. An impermissible error is one that exceeds a threshold error in the circumference, area, etc. of the polygon and/or an error that results in the simplified polygon violating one or more specific properties. To avoid such an error, a local resolution of the part of the polygon (e.g. for at least one path, line segment, set of adjoining points, etc.) can be increased relative to the simplified resolution into which the simplified version of the polygon is to be rendered.

In some implementations of the current subject matter, errors can be quantified as a level of area-wise inaccuracy of a polygon. Simplified polygons in an area represented at a simplified resolution can be binned by levels of inaccuracy. An aggregation of the errors (for example a summation or other aggregating function such as an average, etc.) can be performed on the binned simplified polygons. The aggregation of errors can be reported to a user along with the simplified representation of the polygons to indicate expected levels of uncertainty to a user. The expected levels of uncertainty can be useful in speeding up queries during data exploration, for example by indicating a maximum possible level of certainty that might be obtainable from the simplified representation.

The validation process can include verifying that any boundaries of a polygon that are shared with an adjacent polygon are rendered at a same scale in both polygons. For example, errors identified in the dissecting process can be remedied by effectively increasing the resolution of part of a first polygon to eliminate the error. However, a second polygon whose boundary is shared with the part of the first polygon whose resolution was increased may not have required a similar increase in resolution. In such a scenario, the shared boundary would be rendered at one resolution in the first polygon and at a second resolution in the second polygon, identifying any parts of the simplified polygon that result in the simplified polygon being invalid. To support correcting such situations, an inverse mapping is maintained between paths in the simplified resolution and the polygons to which such paths belong. Using this inverse mapping, when a resolution of a path of a first polygon is required to be increased to avoid an error, the resolution of a corresponding path in a second polygon is similarly increased to avoid misalignment of the first and second polygons along the shared boundary. A corresponding path refers to a path that forms at least part of a shared boundary between the first and second polygons. Use of the inverse mapping as part of the validation process can include determining that a path in a first polygon is required to be rendered at a finer resolution in a simplified version of the first polygon than the simplified resolution, identifying a second polygon whose boundaries also include the path, and causing the path represented in the second polygon to also be rendered at the finer resolution in a simplified version of the second polygon.

FIG. 5shows a process flow chart500illustrating features of a method consistent with implementations of the current subject matter. Depending on the specific implementation, one or more of the method features may be included or omitted. At502, a plurality of original polygons represented in a spatial database at a first level of resolution is identified to be projected within a computer-rendered image at a second level of resolution that is coarser than the first level of resolution. The second level of resolution includes a simplified resolution pixel size. At504, the plurality of original polygons are is each decomposed internally into a sequence comprising a plurality of paths connecting a plurality of points. At506, a point of the plurality of points for a polygon of the plurality of polygons is omitted such that two adjacent points do not occupy a same pixel of the simplified resolution pixel size in the simplified polygon. At510, a local resolution of a part of the simplified polygon is increased relative to the simplified resolution. The part includes a path within which omission of a point results in an error exceeding a threshold error and/or rendering the simplified polygon invalid.

At512, the simplified polygon is validated, for example by verifying that any boundaries of the simplified polygon that are shared with a second simplified polygon of the plurality of polygons are rendered at a same scale in both the simplified polygon and the second simplified polygon.

The approaches discussed above can be seamlessly integrated into any column store system, such as for example an in-main memory high performance database system. As an illustrative, non-limiting example, the following description of an overall architecture, update handling, dictionary coding principles, and memory scan optimizations of such a system is provided with reference toFIG. 6andFIG. 7.

FIG. 6shows a diagram100illustrating a layered architecture of an example of such a system, in which the database distinguishes between compile time and run time of a database request similarly to classical systems. As shown inFIG. 1, the layers can include an engine layer602, a column store layer604, and a persistence layer606. Multiple components, such as a transaction manger, an authorization manager, a meta data (replication) manager, session management, etc., can be clustered around a distributed data flow execution environment610. Within this environment, different sets of plan operators provide an abstraction from a column-oriented storage model to a corresponding data model. The engine can support a wide range of different set of operators ranging from relational operators (for the core SQL data model) to text or graph processing operators (e.g. for more elaborated and partially domain and vendor-specific data models). The general architectural design decouples the access primitives of the storage system from the different model-specific views on the data. The set of geo operators providing the functionality of geo-aware methods on top of geo-agnostic data structures complements this set of plan operators and automatically takes advantage of all functional and non-functional characteristics of the column store layer.

The column store layer604provides a transactionally consistent view to the engine layer602following the multi-version concurrency control (MVCC) principle. All operations of a query on top of this layer are transparently embedded into a sphere of control with access only to the correct underlying version of data.

The database also includes a write-optimized delta store and a read-optimized main store. All data modifications are reflected within the delta store, e.g., inserts of new versions of existing entities are represented within the delta. Deletes are either directly reflected in the delta or signaled via an additional bit-vector for the main store. As the delta grows over time, a merge process eventually moves delta entries to the read-optimized main structure. Modifications coming from the user or directly within the system can be encapsulated within the column store layer604and transparent for the engine layer602.

A column store engine can apply dictionary encoding to all columns, independent of their cardinality of number of distinct values. As shown in diagram700ofFIG. 7, a column then results in two data structures: a dictionary, which maps the user-values to Value IDs, and a bit compressed vector with Value IDs representing the columns of the original table. Due to frequent modifications and its temporary characteristics, the dictionary of the delta is unsorted. The dictionary of the read-optimized main, however, is sorted with respect to the user values. A merge then includes two phases. In a first phase, a new dictionary is constructed, consolidating the entries of the main and delta dictionaries and generating new Value IDs. In a second phase, the main bit compressed vectors are recreated by physically generating a new image of the bit compressed vector that includes the old entries (ignoring deletes) and new entries of the delta. Numerous highly optimized versions of the process exist to speed up the merge process for specific scenarios. Again, the layer above does not notice such internal and asynchronous reorganization steps. This database design can provide a basis for a seamless integration of data-model specific operators relying on core column store data structures. All updates, reorganizations, efficient scan implementations, etc. can be completely transparent for the engine layer602and can be exploited via well-defined scan methods. This arrangement allows for easy adoption of the techniques and transfer into other columnar systems.

FIG. 8shows a block diagram of an in-memory relational database server800consistent with some implementations of the current subject matter. A connection and session management component802of an in-memory database system804creates and manages sessions and connections for the database clients806. For each session a set of parameters810is maintained such as for example auto commit settings or the current transaction isolation level. Once a session is established, database clients806can use logical (e.g. SQL) statements to communicate with the in-memory database system804. For analytical applications the multidimensional query language MDX can also be supported.

Each statement can be processed in the context of a transaction. New sessions can be implicitly assigned to a new transaction. A transaction manager812can coordinate transactions, control transactional isolation, and keep track of running and closed transactions. When a transaction is committed or rolled back, the transaction manager812can inform the involved engines about this event so they can execute necessary actions. The transaction manager812can cooperate with a persistence layer to achieve atomic and durable transactions.

Requests received from the database clients806can be analyzed and executed by a set of request processing and execution control components816, which can include a request parser820that analyses a request from a database client806and dispatches it to a responsible component. Transaction control statements can, for example, be forwarded to the transaction manager812, data definition statements can be dispatched to a metadata manager822and object invocations can be forwarded to an in-memory object store824. Data manipulation statements can be forwarded to an optimizer826, which creates an optimized execution plan that is provided to an execution layer830. The execution layer830can act as a controller that invokes the different engines and routes intermediate results to a next phase in execution of the execution plan.

Built-in support can be offered for domain-specific models (such as for financial planning) scripting capabilities that allow to run application-specific calculations inside an in-memory database system. A scripting language, for example SQL Script832, which is based on side effect free functions that operate on tables using SQL queries for set processing, can be used to enable optimizations and parallelization. The MDX language834can be used to provide support for multidimensional queries. A planning engine836can allow financial planning applications to execute basic planning operations in the database layer. An example of a basic planning operation is to create a new version of a data set as a copy of an existing one while applying filters and transformations. For example, planning data for a new year can be created as a copy of the data from the previous year. This operation requires filtering by year and updating the time dimension. Another example of a planning operation can be a disaggregation operation that distributes target values from higher to lower aggregation levels based on a distribution function.

Features such as SQL Script832, MDX834, and planning engine836operations can be implemented using a common infrastructure called a calculation engine838. Metadata can be accessed via the metadata manager component822. Metadata can include a variety of objects, such as for example definitions of relational tables, columns, views, indexes, SQL Script functions, object store metadata, and the like. All of these types of metadata can be stored in a common catalog for all stores (in-memory row store, in-memory column store, object store, disk based). Metadata can be stored in tables in row store. In multi-tenant systems and in distributed systems, central metadata can be shared across servers and tenants as discussed in greater detail below. How metadata is stored and shared can be hidden from the components that use the metadata manager822.

One or more relational engines840, for example an in-memory row store842, an in-memory column store844, a disk-based store846, and the in-memory object store824mentioned above can communicate with the request processing and execution control components816, the metadata manager822, and the in-memory persistence layer814. The row store842and column store844are each relational in-memory data engines that can store data in a row-based or column-based way, respectively. Some data, such as for example tracing data, need not be kept in memory all the time. The disk-based store846can handle such data. Data in the disk-based store146can be primarily stored in disk storage850and only moved to memory buffers (e.g. the persistence layer814) when accessed.

When a table is created, the table can be specified in the store in which it is located. Table can be moved to different stores at a time after their creation. Certain SQL extensions can optionally be available only for specific stores (such as for example the “merge” command for a column store). However, standard SQL can be used on all tables. It is also possible to combine tables from different stores in one statement (e.g. using a join, sub query, union, or the like).

As row based tables and columnar tables can be combined in one SQL statement, the corresponding engines must be able to consume intermediate results created by the other. Two engines can differ in the way they process data. Row store operations, for example, can process data in a row-at-a-time fashion using iterators. Column store operations (such as for example scan, aggregate, and so on) can require that the entire column is available in contiguous memory locations. To exchange intermediate results, a row store can provide results to a column store materialized as complete rows in memory while a column store can expose results using the iterator interface needed by a row store.

The persistence layer814can be responsible for durability and atomicity of transactions and can ensure that the database is restored to the most recent committed state after a restart and that transactions are either completely executed or completely undone. To achieve this goal in an efficient way, the persistence layer814can use a combination of write-ahead logs, shadow paging and save points. The persistence layer814can offer interfaces for writing and reading data and can also contain a logger852that manages the transaction log. Log entries can be written implicitly by the persistence layer814when data are written via a persistence interface or explicitly by using a log interface.

An authorization manager854can be invoked by other components of the architecture to check whether a user has the required privileges to execute the requested operations. Privileges can be granted to users or roles. A privilege grants the right to perform a specified operation (such as for example create, update, select, execute, and the like) on a specified object (such as for example a table, view, SQL Script function, and the like). Analytic privileges that represent filters or hierarchy drill down limitations for analytical queries can also be supported. Analytical privileges can grant access to values with a certain combination of dimension attributes. This could for example be used to restrict access to a cube with sales data to values with dimension attributes such as region=“US” and year=“2010.”