You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@baremaps.apache.org by bc...@apache.org on 2024/03/01 21:48:08 UTC

(incubator-baremaps) branch remove-proj4-epsg created (now 86361aab)

This is an automated email from the ASF dual-hosted git repository.

bchapuis pushed a change to branch remove-proj4-epsg
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git


      at 86361aab Remove the dependency to proj4j-epsg

This branch includes the following new commits:

     new 86361aab Remove the dependency to proj4j-epsg

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(incubator-baremaps) 01/01: Remove the dependency to proj4j-epsg

Posted by bc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bchapuis pushed a commit to branch remove-proj4-epsg
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git

commit 86361aab4c170282c0de3ca6fff5104e2d25400f
Author: Bertil Chapuis <bc...@gmail.com>
AuthorDate: Fri Mar 1 22:47:55 2024 +0100

    Remove the dependency to proj4j-epsg
---
 baremaps-core/pom.xml                              |  5 --
 .../java/org/apache/baremaps/utils/CRSUtils.java   | 53 ++++++++++++++++++++++
 .../org/apache/baremaps/utils/GeometryUtils.java   |  6 +--
 .../baremaps/utils/ProjectionTransformer.java      |  3 +-
 baremaps-core/src/main/resources/proj4/nad/srid    |  4 ++
 .../EntityDataTypeGeometryBuilderTest.java         |  3 +-
 pom.xml                                            |  5 --
 7 files changed, 62 insertions(+), 17 deletions(-)

diff --git a/baremaps-core/pom.xml b/baremaps-core/pom.xml
index 5552c114..accf8138 100644
--- a/baremaps-core/pom.xml
+++ b/baremaps-core/pom.xml
@@ -118,11 +118,6 @@ limitations under the License.
       <groupId>org.locationtech.proj4j</groupId>
       <artifactId>proj4j</artifactId>
     </dependency>
-    <!-- TODO: Remove this dependency due to license incompatibility -->
-    <dependency>
-      <groupId>org.locationtech.proj4j</groupId>
-      <artifactId>proj4j-epsg</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.postgresql</groupId>
       <artifactId>postgresql</artifactId>
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/utils/CRSUtils.java b/baremaps-core/src/main/java/org/apache/baremaps/utils/CRSUtils.java
new file mode 100644
index 00000000..a29ea0d9
--- /dev/null
+++ b/baremaps-core/src/main/java/org/apache/baremaps/utils/CRSUtils.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.baremaps.utils;
+
+import org.locationtech.proj4j.CRSFactory;
+import org.locationtech.proj4j.CoordinateReferenceSystem;
+import org.locationtech.proj4j.UnknownAuthorityCodeException;
+
+/**
+ * Utility methods for creating coordinate reference systems.
+ */
+public class CRSUtils {
+
+  /**
+   * Creates a coordinate reference system from the provided SRID.
+   * <p>
+   * This method first looks into the minimal set of authority codes stored in the proj4/nad/srid
+   * resource file.
+   * <p>
+   * If the authority code is not found, it tries to create a CRS from the EPSG code that may be
+   * stored in the proj4/nad/epsg resource file of the proj4j-epsg module.
+   * <p>
+   * The proj4j-epsg module is not included in baremaps by default due to licensing issues. It can
+   * be added to the classpath to enable the creation of CRS from EPSG codes.
+   *
+   * @param srid the SRID
+   * @return the coordinate reference system
+   */
+  public static CoordinateReferenceSystem createFromSrid(int srid) {
+    var factory = new CRSFactory();
+    try {
+
+      return factory.createFromName(String.format("SRID:%s", srid));
+    } catch (UnknownAuthorityCodeException e) {
+      return factory.createFromName(String.format("EPSG:%s", srid));
+    }
+  }
+}
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/utils/GeometryUtils.java b/baremaps-core/src/main/java/org/apache/baremaps/utils/GeometryUtils.java
index 58da9902..96ebd207 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/utils/GeometryUtils.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/utils/GeometryUtils.java
@@ -77,10 +77,8 @@ public class GeometryUtils {
    */
   public static CoordinateTransform coordinateTransform(Integer sourceSrid, Integer targetSrid) {
     CRSFactory crsFactory = new CRSFactory();
-    CoordinateReferenceSystem sourceCRS =
-        crsFactory.createFromName(String.format("EPSG:%d", sourceSrid));
-    CoordinateReferenceSystem targetCRS =
-        crsFactory.createFromName(String.format("EPSG:%d", targetSrid));
+    CoordinateReferenceSystem sourceCRS = CRSUtils.createFromSrid(sourceSrid);
+    CoordinateReferenceSystem targetCRS = CRSUtils.createFromSrid(targetSrid);
     CoordinateTransformFactory coordinateTransformFactory = new CoordinateTransformFactory();
     return coordinateTransformFactory.createTransform(sourceCRS, targetCRS);
   }
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/utils/ProjectionTransformer.java b/baremaps-core/src/main/java/org/apache/baremaps/utils/ProjectionTransformer.java
index 01d14823..5ca14833 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/utils/ProjectionTransformer.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/utils/ProjectionTransformer.java
@@ -24,7 +24,6 @@ import java.util.stream.Stream;
 import org.locationtech.jts.geom.*;
 import org.locationtech.jts.geom.impl.CoordinateArraySequence;
 import org.locationtech.jts.geom.util.GeometryTransformer;
-import org.locationtech.proj4j.CRSFactory;
 import org.locationtech.proj4j.CoordinateTransform;
 import org.locationtech.proj4j.ProjCoordinate;
 import org.slf4j.Logger;
@@ -56,7 +55,7 @@ public class ProjectionTransformer extends GeometryTransformer {
     this.targetSrid = targetSrid;
     this.transform = GeometryUtils.coordinateTransform(sourceSrid, targetSrid);
 
-    var targetCRS = new CRSFactory().createFromName(String.format("EPSG:%s", targetSrid));
+    var targetCRS = CRSUtils.createFromSrid(targetSrid);
     var lonlatTranform = GeometryUtils.coordinateTransform(4326, sourceSrid);
     min = lonlatTranform
         .transform(new ProjCoordinate(Math.toDegrees(targetCRS.getProjection().getMinLongitude()),
diff --git a/baremaps-core/src/main/resources/proj4/nad/srid b/baremaps-core/src/main/resources/proj4/nad/srid
new file mode 100644
index 00000000..d0dc9b25
--- /dev/null
+++ b/baremaps-core/src/main/resources/proj4/nad/srid
@@ -0,0 +1,4 @@
+# WGS 84
+<4326> +proj=longlat +datum=WGS84 +no_defs  <>
+# WGS 84 / Pseudo-Mercator
+<3857> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs  <>
\ No newline at end of file
diff --git a/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/EntityDataTypeGeometryBuilderTest.java b/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/EntityDataTypeGeometryBuilderTest.java
index 182775d4..c9fb84f3 100644
--- a/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/EntityDataTypeGeometryBuilderTest.java
+++ b/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/EntityDataTypeGeometryBuilderTest.java
@@ -34,6 +34,7 @@ import org.apache.baremaps.openstreetmap.model.Node;
 import org.apache.baremaps.openstreetmap.model.Relation;
 import org.apache.baremaps.openstreetmap.model.Way;
 import org.apache.baremaps.openstreetmap.store.MockDataMap;
+import org.apache.baremaps.utils.CRSUtils;
 import org.junit.jupiter.api.Test;
 import org.locationtech.jts.geom.Coordinate;
 import org.locationtech.jts.geom.GeometryFactory;
@@ -52,7 +53,7 @@ class EntityDataTypeGeometryBuilderTest {
 
   static final CRSFactory CRS_FACTORY = new CRSFactory();
 
-  static final CoordinateReferenceSystem EPSG_4326 = CRS_FACTORY.createFromName("EPSG:4326");
+  static final CoordinateReferenceSystem EPSG_4326 = CRSUtils.createFromSrid(4326);
 
   static final CoordinateTransform COORDINATE_TRANSFORM = new CoordinateTransform() {
     @Override
diff --git a/pom.xml b/pom.xml
index d68733bd..ad5ac0ae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -356,11 +356,6 @@ limitations under the License.
         <artifactId>proj4j</artifactId>
         <version>${version.lib.proj4j}</version>
       </dependency>
-      <dependency>
-        <groupId>org.locationtech.proj4j</groupId>
-        <artifactId>proj4j-epsg</artifactId>
-        <version>${version.lib.proj4j}</version>
-      </dependency>
       <dependency>
         <groupId>org.postgresql</groupId>
         <artifactId>postgresql</artifactId>