@@ -27,7 +27,13 @@ use geozero::geojson::GeoJson;
2727use geozero:: wkb:: Ewkb ;
2828
2929use crate :: ewkb_to_geo;
30+ use crate :: geometry:: GeometryDataType ;
3031use crate :: geometry:: ewkt_str_to_geo;
32+ use crate :: geometry:: geo_to_ewkb;
33+ use crate :: geometry:: geo_to_ewkt;
34+ use crate :: geometry:: geo_to_json;
35+ use crate :: geometry:: geo_to_wkb;
36+ use crate :: geometry:: geo_to_wkt;
3137
3238pub const LONGITUDE_MIN : f64 = -180.0 ;
3339pub const LONGITUDE_MAX : f64 = 180.0 ;
@@ -69,6 +75,34 @@ pub fn geography_from_geojson(json_str: &str) -> Result<Vec<u8>> {
6975 . map_err ( |e| ErrorCode :: GeometryError ( e. to_string ( ) ) )
7076}
7177
78+ pub fn geography_format ( ewkb : & [ u8 ] , format_type : GeometryDataType ) -> Result < String > {
79+ let geo = Ewkb ( ewkb)
80+ . to_geo ( )
81+ . map_err ( |e| ErrorCode :: GeometryError ( e. to_string ( ) ) ) ?;
82+
83+ match format_type {
84+ GeometryDataType :: WKB => {
85+ let bytes = geo_to_wkb ( geo) ?;
86+ Ok ( bytes
87+ . iter ( )
88+ . map ( |b| format ! ( "{:02X}" , b) )
89+ . collect :: < Vec < _ > > ( )
90+ . join ( "" ) )
91+ }
92+ GeometryDataType :: EWKB => {
93+ let bytes = geo_to_ewkb ( geo, Some ( GEOGRAPHY_SRID ) ) ?;
94+ Ok ( bytes
95+ . iter ( )
96+ . map ( |b| format ! ( "{:02X}" , b) )
97+ . collect :: < Vec < _ > > ( )
98+ . join ( "" ) )
99+ }
100+ GeometryDataType :: WKT => geo_to_wkt ( geo) ,
101+ GeometryDataType :: EWKT => geo_to_ewkt ( geo, Some ( GEOGRAPHY_SRID ) ) ,
102+ GeometryDataType :: GEOJSON => geo_to_json ( geo) ,
103+ }
104+ }
105+
72106pub fn check_srid ( srid : Option < i32 > ) -> Result < ( ) > {
73107 if let Some ( srid) = srid
74108 && srid != GEOGRAPHY_SRID
0 commit comments