{-# 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