sql >> データベース >  >> RDS >> PostgreSQL

Postgis+ブースト::ジオメトリ+C++

    この操作にPostGISが必要かどうかは疑わしいです。

    また、「それを有効にする」方法があるのではないかと思います。ポリゴンには明確な自己交差があるため:

    BoostGeometry自体で検証と修正を行う方法は次のとおりです。

    Live On Coliru

    #include <boost/geometry.hpp>
    #include <boost/geometry/geometries/geometries.hpp>
    #include <boost/geometry/io/io.hpp>
    #include <boost/geometry/algorithms/equals.hpp>
    #include <iostream>
    
    namespace bg = boost::geometry;
    namespace bgm = boost::geometry::model;
    
    template<typename G>
    bool check(G const& g) {
        std::string reason;
        bool valid = bg::is_valid(g, reason);
    
        if (valid) std::cout << "Valid (dsv): " << bg::dsv(g) << "\n";
        else       std::cout << "Invalid: " << reason << "\n";
    
        return valid;
    }
    
    int main() {
        using pt = bgm::d2::point_xy<double>;
        using poly = bgm::polygon<pt>;
    
        poly p;
        bg::read_wkt("POLYGON((0 0, 10 0, 10 11, 11 10, 0 10))", p);
    
        while (!check(p)) {
            auto same = p;
            bg::correct(p);
    
            if (bg::equals(p, same)) {
                std::cout << "Out of ideas\n";
                break;
            }
        }
    }
    

    そして、出力に注意してください:

    Invalid: Geometry is defined as closed but is open
    Invalid: Geometry has invalid self-intersections. A self-intersection point was found at (10, 10); method: i; operations: u/i; segment IDs {source, multi, ring, segment}: {0, -1, -1, 1}/{0, -1, -1, 3}
    Out of ideas
    

    ソースにそのような自己交差が実際に含まれている場合、何が必要かを判断するのは困難です。おそらくあなたは見たいと思うでしょう




    1. ロック待機タイムアウトが例外を超えないようにする方法。

    2. Python、9タプルUTC日付をMySQL日時形式に変換

    3. MySqlのビューの一意の長いIDを生成します

    4. OracleDeveloperVMを使用して学習およびテストするための事前構築されたOracleデータベース