PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgis + boost::geometri + C++

Saya ragu Anda membutuhkan PostGIS untuk operasi ini.

Saya juga ragu ada cara untuk "membuatnya valid". Karena poligon memiliki perpotongan diri yang jelas:

Inilah cara Anda melakukan validasi dan koreksi di Boost Geometry itu sendiri:

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;
        }
    }
}

Dan perhatikan outputnya:

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

Jika sumber Anda benar-benar berisi persimpangan-diri seperti itu, sulit untuk mengatakan apa yang Anda inginkan. Mungkin Anda ingin melihat




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. buat kolom untuk tanggal otomatis di postgresql

  2. Postgres:PILIH nama kolom berdasarkan nilai Boolean

  3. Kembalikan Nilai Boolean sebagai TRUE atau FALSE di Select (PostgreSQL/pgAdmin)

  4. bundel gagal - Tidak dapat menemukan pustaka klien PostgreSQL (libpq)

  5. PostgreSQL memeriksa apakah array berisi elemen apa pun dari array sebelah kiri