7 CellBoundary childBoundary{};
8 if (
const auto errB = cellToBoundary(index, &childBoundary); errB != E_SUCCESS) {
12 if (childBoundary.numVerts == 0) {
18 polygon.reserve(childBoundary.numVerts + 1);
21 const double firstLat = radsToDegs(childBoundary.verts[0].lat);
22 const double firstLng = radsToDegs(childBoundary.verts[0].lng);
24 polygon.emplace_back(QVariant::fromValue(QGeoCoordinate{firstLat, firstLng, 0}));
26 double prevLng = firstLng;
29 for (
auto i = 1; i < childBoundary.numVerts; ++i) {
30 const double lat = radsToDegs(childBoundary.verts[i].lat);
31 double lng = radsToDegs(childBoundary.verts[i].lng);
35 if (
const double delta = lng - prevLng; delta > 180.0) {
38 }
else if (delta < -180.0) {
43 polygon.emplace_back(QVariant::fromValue(QGeoCoordinate{lat, lng, 0}));
48 polygon.emplace_back(QVariant::fromValue(QGeoCoordinate{firstLat, firstLng, 0}));
54 static std::optional<QVariantList>
getSharedEdge(
const H3Index cell1,
const H3Index cell2) {
55 CellBoundary boundary1{}, boundary2{};
57 if (cellToBoundary(cell1, &boundary1) != E_SUCCESS || cellToBoundary(cell2, &boundary2) != E_SUCCESS) {
61 if (boundary1.numVerts == 0 || boundary2.numVerts == 0) {
66 std::vector<LatLng> sharedVertices;
68 for (
int i = 0; i < boundary1.numVerts; ++i) {
69 for (
int j = 0; j < boundary2.numVerts; ++j) {
70 const double latDiff = std::abs(boundary1.verts[i].lat - boundary2.verts[j].lat);
71 const double lngDiff = std::abs(boundary1.verts[i].lng - boundary2.verts[j].lng);
73 if (
constexpr double EPSILON = 1e-9; latDiff < EPSILON && lngDiff < EPSILON) {
74 sharedVertices.emplace_back(boundary1.verts[i]);
80 if (sharedVertices.size() != 2) {
89 const double lat1 = radsToDegs(sharedVertices[0].lat);
90 const double lng1 = radsToDegs(sharedVertices[0].lng);
91 const double lat2 = radsToDegs(sharedVertices[1].lat);
92 double lng2 = radsToDegs(sharedVertices[1].lng);
95 if (
const double delta = lng2 - lng1; delta > 180.0) {
97 }
else if (delta < -180.0) {
101 line.emplace_back(QVariant::fromValue(QGeoCoordinate{lat1, lng1, 0}));
102 line.emplace_back(QVariant::fromValue(QGeoCoordinate{lat2, lng2, 0}));