PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Postgis + boost ::hình học + C ++

Tôi nghi ngờ bạn cần PostGIS cho hoạt động này.

Tôi cũng nghi ngờ có một cách để "làm cho nó hợp lệ". Vì đa giác có một giao điểm rõ ràng:

Đây là cách bạn thực hiện xác thực và sửa chữa trong chính Boost Geometry:

Trực tiếp trên 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;
        }
    }
}

Và lưu ý đầu ra:

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

Nếu nguồn của bạn thực sự chứa các giao điểm tự như vậy, thật khó để biết bạn muốn gì. Có lẽ bạn muốn xem




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL hai tiêu chí từ một nhóm

  2. Trong Postgresql, buộc duy nhất trên sự kết hợp của hai cột

  3. Có cách nào để tải dữ liệu văn bản vào cơ sở dữ liệu trong PostgreSQL không?

  4. Lỗi mã hóa với sqlalchemy và postgresql

  5. Làm cách nào để thực thi tính duy nhất giống tập hợp giữa nhiều cột?