PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgis + boost::geometry + C++

Съмнявам се, че имате нужда от PostGIS за тази операция.

Също така се съмнявам, че има начин да го "направя валиден". Тъй като многоъгълникът има ясно самопресичане:

Ето как правите проверката и корекцията в самата Boost Geometry:

На живо в 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да генерирам списък с месеци в PostgreSQL?

  2. Не може да се вмъкне JSON от PostgreSQL към elasticsearch. Получаване на грешка - „Изключение при изпълнение на JDBC заявка“

  3. ГРЕШКА:не можах да осъществи достъп до файл “$libdir/plpython2” – ГРЕШКА:не можа да получи достъп до файл “$libdir/plpython3”

  4. SQLite работи, но мигрираната база данни на PostgreSQL причинява ГРЕШКА - Django 3.0

  5. JPA 2 @SequenceGenerator @GeneratedValue, генериращ уникално нарушение на ограничението