使用 org.geolatte.geom 构造 LineString
Construct LineString using org.geolatte.geom
如何使用 org.hibernate:hibernate-spatial
库将以下 MySQL 表达式转换为相应的 org.geolatte.geom.LineString
。
LineString(Point(-1, start_timestamp), Point(1, end_timestamp));
DSL.linestring
需要 org.geolatte.geom.crs.CoordinateReferenceSystem
,但我不确定在这种特殊情况下应该使用哪个。
到目前为止我尝试过的
C2D position1 = new C2D(-1, 1546301554.000000);
C2D position2 = new C2D(1, 1546301559.000000);
GeographicCoordinateReferenceSystem gcrs = CoordinateReferenceSystems.mkGeographic(UNKNOWN_Angular);
LineString<C2D> lineString = DSL.linestring(gcrs, position1, position2);
目标是使用 LineString
找到重叠的日期。我只使用 SQL 让它工作,但我有点不确定如何使用 geolatte 实现 LineString
,主要是我应该使用哪个 CoordinateReferenceSystem。 LineString
将作为 Geometry
字段存储在数据库 table.
中
LineString
将包含两个Point
,其中y坐标将对应start_datetime和end_datetime。
更新:
也许这种方法更可取
C2D position1 = new C2D(-1, 1546301554 (EPOCH START TIMESTAMP));
C2D position2 = new C2D(1, 1546301559 (EPOCH END TIMESTAMP));
ProjectedCoordinateReferenceSystem test = CoordinateReferenceSystems.mkProjected(UNKNOWN_LINEAR);
LineString<C2D> lineString = DSL.linestring(test, position1, position2);
您实际上在这里使用的是 geolatte-geom
库,而不是 hibernate-spatial
(尽管后者确实包括前者作为依赖项)。您的代码不起作用,因为您混合了两种方法(直接和通过 DSL),并且混合了笛卡尔坐标和地理坐标。此外,对于 angular(地理)坐标,经度的允许范围为 [-180, 180],纬度的允许范围为 [-90,+90]。所以我不确定你在哪个坐标系中工作。
最好的方法是:
import static org.geolatte.geom.builder.Dsl.*
GeographicCoordinateReferenceSystem gcrs = CoordinateReferenceSystems.mkGeographic(UNKNOWN_Angular);
Linestring<G2D> ls = linestring(gcrs, g(-1, 50.4), g(1, 50.4));
看看介绍图书馆的README。
如何使用 org.hibernate:hibernate-spatial
库将以下 MySQL 表达式转换为相应的 org.geolatte.geom.LineString
。
LineString(Point(-1, start_timestamp), Point(1, end_timestamp));
DSL.linestring
需要 org.geolatte.geom.crs.CoordinateReferenceSystem
,但我不确定在这种特殊情况下应该使用哪个。
到目前为止我尝试过的
C2D position1 = new C2D(-1, 1546301554.000000);
C2D position2 = new C2D(1, 1546301559.000000);
GeographicCoordinateReferenceSystem gcrs = CoordinateReferenceSystems.mkGeographic(UNKNOWN_Angular);
LineString<C2D> lineString = DSL.linestring(gcrs, position1, position2);
目标是使用 LineString
找到重叠的日期。我只使用 SQL 让它工作,但我有点不确定如何使用 geolatte 实现 LineString
,主要是我应该使用哪个 CoordinateReferenceSystem。 LineString
将作为 Geometry
字段存储在数据库 table.
LineString
将包含两个Point
,其中y坐标将对应start_datetime和end_datetime。
更新: 也许这种方法更可取
C2D position1 = new C2D(-1, 1546301554 (EPOCH START TIMESTAMP));
C2D position2 = new C2D(1, 1546301559 (EPOCH END TIMESTAMP));
ProjectedCoordinateReferenceSystem test = CoordinateReferenceSystems.mkProjected(UNKNOWN_LINEAR);
LineString<C2D> lineString = DSL.linestring(test, position1, position2);
您实际上在这里使用的是 geolatte-geom
库,而不是 hibernate-spatial
(尽管后者确实包括前者作为依赖项)。您的代码不起作用,因为您混合了两种方法(直接和通过 DSL),并且混合了笛卡尔坐标和地理坐标。此外,对于 angular(地理)坐标,经度的允许范围为 [-180, 180],纬度的允许范围为 [-90,+90]。所以我不确定你在哪个坐标系中工作。
最好的方法是:
import static org.geolatte.geom.builder.Dsl.*
GeographicCoordinateReferenceSystem gcrs = CoordinateReferenceSystems.mkGeographic(UNKNOWN_Angular);
Linestring<G2D> ls = linestring(gcrs, g(-1, 50.4), g(1, 50.4));
看看介绍图书馆的README。