From 07d4dc41368647c6fdd6b5c2be6061eb8dd3ab8d Mon Sep 17 00:00:00 2001 From: Isaac Brodsky Date: Wed, 3 Jun 2026 16:47:41 -0700 Subject: [PATCH 1/2] Bump to 4.5.0, add reverseDirectedEdge --- CHANGELOG.md | 5 +++++ README.md | 6 +++--- h3version.properties | 2 +- src/main/c/h3-java/src/jniapi.c | 17 +++++++++++++++++ src/main/java/com/uber/h3core/H3Core.java | 10 ++++++++++ .../java/com/uber/h3core/NativeMethods.java | 2 ++ .../java/com/uber/h3core/TestDirectedEdges.java | 4 ++++ 7 files changed, 42 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d10bc7..d39ae95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ file [H3Core.java](./src/main/java/com/uber/h3core/H3Core.java), and support for the Linux x64 and Darwin x64 platforms. ## Unreleased Changes +### Added +- `reverseDirectedEdge` function. + +### Changed +- Upgraded the core library to v4.5.0. ## [4.4.0] - 2025-12-12 ### Added diff --git a/README.md b/README.md index f1ec693..7eb0ab6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Coverage Status](https://coveralls.io/repos/github/uber/h3-java/badge.svg?branch=master)](https://coveralls.io/github/uber/h3-java?branch=master) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.uber/h3/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.uber/h3) -[![H3 Version](https://img.shields.io/badge/h3-v4.4.1-blue.svg)](https://github.com/uber/h3/releases/tag/v4.4.1) +[![H3 Version](https://img.shields.io/badge/h3-v4.5.0-blue.svg)](https://github.com/uber/h3/releases/tag/v4.5.0) This library provides Java bindings for the [H3 Core Library](https://github.com/uber/h3). For API reference, please see the [H3 Documentation](https://h3geo.org/). @@ -18,14 +18,14 @@ Add it to your pom.xml: com.uber h3 - 4.4.0 + 4.5.0 ``` Or, using Gradle: ```gradle -compile("com.uber:h3:4.4.0") +compile("com.uber:h3:4.5.0") ``` Encode a location into a hexagon address: diff --git a/h3version.properties b/h3version.properties index af844af..a5957e5 100644 --- a/h3version.properties +++ b/h3version.properties @@ -1 +1 @@ -h3.git.reference=v4.4.1 +h3.git.reference=v4.5.0 diff --git a/src/main/c/h3-java/src/jniapi.c b/src/main/c/h3-java/src/jniapi.c index 37d42b8..7451114 100644 --- a/src/main/c/h3-java/src/jniapi.c +++ b/src/main/c/h3-java/src/jniapi.c @@ -1394,6 +1394,23 @@ Java_com_uber_h3core_NativeMethods_directedEdgeToBoundary(JNIEnv *env, } } +/* + * Class: com_uber_h3core_NativeMethods + * Method: reverseDirectedEdge + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_com_uber_h3core_NativeMethods_reverseDirectedEdge( + JNIEnv *env, jobject thiz, jlong h3) { + H3Index out; + H3Error err = reverseDirectedEdge(h3, &out); + if (err) { + ThrowH3Exception(env, err); + return -1; + } + + return out; +} + /* * Class: com_uber_h3core_NativeMethods * Method: maxFaceCount diff --git a/src/main/java/com/uber/h3core/H3Core.java b/src/main/java/com/uber/h3core/H3Core.java index 412c07a..c1529a7 100644 --- a/src/main/java/com/uber/h3core/H3Core.java +++ b/src/main/java/com/uber/h3core/H3Core.java @@ -1228,6 +1228,16 @@ public List directedEdgeToBoundary(String h3) { return directedEdgeToBoundary(stringToH3(h3)); } + /** Returns the directed edge with origin and destination cells reversed. */ + public long reverseDirectedEdge(long h3) { + return h3Api.reverseDirectedEdge(h3); + } + + /** Returns the directed edge with origin and destination cells reversed. */ + public String reverseDirectedEdge(String h3) { + return h3ToString(reverseDirectedEdge(stringToH3(h3))); + } + /** * Find all icosahedron faces intersected by a given H3 index, represented as integers from 0-19. * diff --git a/src/main/java/com/uber/h3core/NativeMethods.java b/src/main/java/com/uber/h3core/NativeMethods.java index fb5845b..4dc3902 100644 --- a/src/main/java/com/uber/h3core/NativeMethods.java +++ b/src/main/java/com/uber/h3core/NativeMethods.java @@ -140,6 +140,8 @@ native void polygonToCells( native int directedEdgeToBoundary(long h3, double[] verts); + native long reverseDirectedEdge(long h3); + native int maxFaceCount(long h3); native void getIcosahedronFaces(long h3, int[] faces); diff --git a/src/test/java/com/uber/h3core/TestDirectedEdges.java b/src/test/java/com/uber/h3core/TestDirectedEdges.java index b7243e4..d8fdde4 100644 --- a/src/test/java/com/uber/h3core/TestDirectedEdges.java +++ b/src/test/java/com/uber/h3core/TestDirectedEdges.java @@ -60,6 +60,10 @@ void unidirectionalEdges() { List boundary = h3.directedEdgeToBoundary(edge); assertEquals(2, boundary.size()); + + String reversed = h3.reverseDirectedEdge(edge); + assertEquals(adjacent, h3.getDirectedEdgeOrigin(reversed)); + assertEquals(start, h3.getDirectedEdgeDestination(reversed)); } @Test From 87466821a2f5e780362234f565528fb84f71ef53 Mon Sep 17 00:00:00 2001 From: Isaac Brodsky Date: Wed, 3 Jun 2026 16:57:07 -0700 Subject: [PATCH 2/2] PR number --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d39ae95..2202323 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,10 +7,10 @@ for the Linux x64 and Darwin x64 platforms. ## Unreleased Changes ### Added -- `reverseDirectedEdge` function. +- `reverseDirectedEdge` function. (#207) ### Changed -- Upgraded the core library to v4.5.0. +- Upgraded the core library to v4.5.0. (#207) ## [4.4.0] - 2025-12-12 ### Added