{-| Module : Data.Geometry.Geos.Serialize Maintainer : pfrance@gmail.com Functions to read and write geometries in WKB and WKT formats. Empty Points cannot be represented in WKB; an IllegalArgumentException will be thrown if one is written. The WKB specification does not support representing 'LinearRing', they will be written as 'LineString' Note the WKT is not able to represent an SRID, so conversions of geometries which contain an SRID into WKT will be lossy. -} {-# LANGUAGE ScopedTypeVariables #-} module Data.Geometry.Geos.Serialize ( readHex , readLotsOfHex , writeHex , readWkt , writeWkt ) where import Data.Geometry.Geos.Raw.Base import Data.Geometry.Geos.Geometry import qualified Data.Geometry.Geos.Raw.Serialize as S import qualified Data.Geometry.Geos.Raw.Geometry as R import qualified Data.ByteString.Char8 as BC readHex :: BC.ByteString -> Maybe (Some Geometry) readHex bs = runGeosM $ do r <- S.createReader g <- S.readHex r bs convertGeometryFromRaw g readLotsOfHex :: [BC.ByteString] -> Maybe [Some Geometry] readLotsOfHex bs = runGeosM $ do r <- S.createReader x <- traverse (S.readHex r) bs traverse convertGeometryFromRaw x writeHex :: Geometry a -> BC.ByteString writeHex g = runGeos $ do w <- S.createWriter r :: R.Geom <- convertGeometryToRaw g S.writeHex w r readWkt :: BC.ByteString -> Maybe (Some Geometry) readWkt bs = runGeosM $ do r <- S.createWktReader g <- S.readWkt r bs convertGeometryFromRaw g writeWkt :: Geometry a -> BC.ByteString writeWkt g = runGeos $ do w <- S.createWktWriter r :: R.Geom <- convertGeometryToRaw g S.writeWkt w r