{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE FlexibleContexts #-}
module Database.Postgis.Trivial.Traversable.Geometry where
import GHC.Base hiding ( foldr )
import Control.Monad ( mapM_ )
import Control.Exception ( throw )
import Control.Applicative ( (<$>) )
import Database.Postgis.Trivial.PGISConst
import Database.Postgis.Trivial.Types
import Database.Postgis.Trivial.Internal
import Database.Postgis.Trivial.Cast
data Point p = Point SRID p
instance Castable p => Geometry (Point p) where
putGeometry :: Putter (Point p)
putGeometry (Point SRID
srid p
v) = do
SRID -> Word32 -> (Bool, Bool) -> Put
putHeader SRID
srid Word32
pgisPoint (forall a. PointND a => (Bool, Bool)
dimProps @(Cast p))
Putter (Cast p)
forall a. PointND a => Putter a
putPointND (p -> Cast p
forall p. Castable p => p -> Cast p
toPointND p
v::Cast p)
getGeometry :: Get (Point p)
getGeometry = do
Header
h <- Get Header
getHeaderPre
(Cast p
v::Cast p, SRID
srid) <- if Header -> Word32
lookupType Header
hWord32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
==Word32
pgisPoint
then Header -> HeaderGetter (Cast p) -> Get (Cast p, SRID)
forall a. Header -> HeaderGetter a -> Get (a, SRID)
makeResult Header
h (HeaderGetter ()
skipHeader HeaderGetter () -> HeaderGetter (Cast p) -> HeaderGetter (Cast p)
forall a b.
ReaderT Header Get a
-> ReaderT Header Get b -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> HeaderGetter (Cast p)
forall a. PointND a => HeaderGetter a
getPointND)
else GeometryError -> Get (Cast p, SRID)
forall a e. Exception e => e -> a
throw (GeometryError -> Get (Cast p, SRID))
-> GeometryError -> Get (Cast p, SRID)
forall a b. (a -> b) -> a -> b
$
String -> GeometryError
GeometryError String
"invalid data for point geometry"
Point p -> Get (Point p)
forall a. a -> Get a
forall (m :: * -> *) a. Monad m => a -> m a
return (SRID -> p -> Point p
forall p. SRID -> p -> Point p
Point SRID
srid (Cast p -> p
forall p. Castable p => Cast p -> p
fromPointND Cast p
v::p))
data LineString t p = LineString SRID (t p)
instance (GeoChain t, Trans t p) => Geometry (LineString t p) where
putGeometry :: Putter (LineString t p)
putGeometry (LineString SRID
srid t p
vs) = do
SRID -> Word32 -> (Bool, Bool) -> Put
putHeader SRID
srid Word32
pgisLinestring (forall a. PointND a => (Bool, Bool)
dimProps @(Cast p))
Putter (t (Cast p))
forall a. PointND a => Putter (t a)
forall (t :: * -> *) a. (GeoChain t, PointND a) => Putter (t a)
putChain (t p -> t (Cast p)
forall (t :: * -> *) p. Trans t p => t p -> t (Cast p)
transTo t p
vs::t (Cast p))
getGeometry :: Get (LineString t p)
getGeometry = do
Header
h <- Get Header
getHeaderPre
(t (Cast p)
vs::t (Cast p), SRID
srid) <- if Header -> Word32
lookupType Header
hWord32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
==Word32
pgisLinestring
then Header -> HeaderGetter (t (Cast p)) -> Get (t (Cast p), SRID)
forall a. Header -> HeaderGetter a -> Get (a, SRID)
makeResult Header
h (HeaderGetter ()
skipHeader HeaderGetter ()
-> HeaderGetter (t (Cast p)) -> HeaderGetter (t (Cast p))
forall a b.
ReaderT Header Get a
-> ReaderT Header Get b -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> HeaderGetter (t (Cast p))
forall a. (Traversable t, PointND a) => HeaderGetter (t a)
forall (t :: * -> *) a.
(GeoChain t, Traversable t, PointND a) =>
HeaderGetter (t a)
getChain)
else GeometryError -> Get (t (Cast p), SRID)
forall a e. Exception e => e -> a
throw (GeometryError -> Get (t (Cast p), SRID))
-> GeometryError -> Get (t (Cast p), SRID)
forall a b. (a -> b) -> a -> b
$
String -> GeometryError
GeometryError String
"invalid data for linestring geometry"
LineString t p -> Get (LineString t p)
forall a. a -> Get a
forall (m :: * -> *) a. Monad m => a -> m a
return (SRID -> t p -> LineString t p
forall (t :: * -> *) p. SRID -> t p -> LineString t p
LineString SRID
srid (t (Cast p) -> t p
forall (t :: * -> *) p. Trans t p => t (Cast p) -> t p
transFrom t (Cast p)
vs::t p))
data Polygon t2 t1 p = Polygon SRID (t2 (t1 p))
instance (Repl t2 (t1 (Cast p)), GeoChain t2, GeoChain t1, Trans t1 p) =>
Geometry (Polygon t2 t1 p) where
putGeometry :: Putter (Polygon t2 t1 p)
putGeometry (Polygon SRID
srid t2 (t1 p)
vss) = do
SRID -> Word32 -> (Bool, Bool) -> Put
putHeader SRID
srid Word32
pgisPolygon (forall a. PointND a => (Bool, Bool)
dimProps @(Cast p))
Putter Int
putChainLen Putter Int -> Putter Int
forall a b. (a -> b) -> a -> b
$ t2 (t1 p) -> Int
forall p. t2 p -> Int
forall (t :: * -> *) p. GeoChain t => t p -> Int
count t2 (t1 p)
vss
(t1 p -> Put) -> t2 (t1 p) -> Put
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (\t1 p
vs -> Putter (t1 (Cast p))
forall a. PointND a => Putter (t1 a)
forall (t :: * -> *) a. (GeoChain t, PointND a) => Putter (t a)
putChain (t1 p -> t1 (Cast p)
forall (t :: * -> *) p. Trans t p => t p -> t (Cast p)
transTo t1 p
vs :: t1 (Cast p))) t2 (t1 p)
vss
getGeometry :: Get (Polygon t2 t1 p)
getGeometry = do
Header
h <- Get Header
getHeaderPre
(t2 (t1 (Cast p))
vss::t2 (t1 (Cast p)), SRID
srid) <- if Header -> Word32
lookupType Header
hWord32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
==Word32
pgisPolygon
then Header
-> HeaderGetter (t2 (t1 (Cast p))) -> Get (t2 (t1 (Cast p)), SRID)
forall a. Header -> HeaderGetter a -> Get (a, SRID)
makeResult Header
h (HeaderGetter ()
skipHeader HeaderGetter () -> ReaderT Header Get Int -> ReaderT Header Get Int
forall a b.
ReaderT Header Get a
-> ReaderT Header Get b -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ReaderT Header Get Int
getChainLen ReaderT Header Get Int
-> (Int -> HeaderGetter (t2 (t1 (Cast p))))
-> HeaderGetter (t2 (t1 (Cast p)))
forall a b.
ReaderT Header Get a
-> (a -> ReaderT Header Get b) -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Int
-> HeaderGetter (t1 (Cast p)) -> HeaderGetter (t2 (t1 (Cast p)))
forall (t :: * -> *) b.
Repl t b =>
Int -> HeaderGetter b -> HeaderGetter (t b)
`repl` HeaderGetter (t1 (Cast p))
forall a. (Traversable t1, PointND a) => HeaderGetter (t1 a)
forall (t :: * -> *) a.
(GeoChain t, Traversable t, PointND a) =>
HeaderGetter (t a)
getChain))
else GeometryError -> Get (t2 (t1 (Cast p)), SRID)
forall a e. Exception e => e -> a
throw (GeometryError -> Get (t2 (t1 (Cast p)), SRID))
-> GeometryError -> Get (t2 (t1 (Cast p)), SRID)
forall a b. (a -> b) -> a -> b
$
String -> GeometryError
GeometryError String
"invalid data for polygon geometry"
Polygon t2 t1 p -> Get (Polygon t2 t1 p)
forall a. a -> Get a
forall (m :: * -> *) a. Monad m => a -> m a
return (SRID -> t2 (t1 p) -> Polygon t2 t1 p
forall (t2 :: * -> *) (t1 :: * -> *) p.
SRID -> t2 (t1 p) -> Polygon t2 t1 p
Polygon SRID
srid (t1 (Cast p) -> t1 p
forall (t :: * -> *) p. Trans t p => t (Cast p) -> t p
transFrom (t1 (Cast p) -> t1 p) -> t2 (t1 (Cast p)) -> t2 (t1 p)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> t2 (t1 (Cast p))
vss::t2 (t1 p)))
data MultiPoint t p = MultiPoint SRID (t p)
instance (Repl t (Cast p), GeoChain t, Trans t p) =>
Geometry (MultiPoint t p) where
putGeometry :: Putter (MultiPoint t p)
putGeometry (MultiPoint SRID
srid t p
vs) = do
SRID -> Word32 -> (Bool, Bool) -> Put
putHeader SRID
srid Word32
pgisMultiPoint (forall a. PointND a => (Bool, Bool)
dimProps @(Cast p))
Putter Int
putChainLen Putter Int -> Putter Int
forall a b. (a -> b) -> a -> b
$ t p -> Int
forall p. t p -> Int
forall (t :: * -> *) p. GeoChain t => t p -> Int
count t p
vs
(p -> Put) -> t p -> Put
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (\p
v -> do
Putter (Point p)
forall a. Geometry a => Putter a
putGeometry (SRID -> p -> Point p
forall p. SRID -> p -> Point p
Point SRID
srid p
v :: Point p)
) t p
vs
getGeometry :: Get (MultiPoint t p)
getGeometry = do
Header
h <- Get Header
getHeaderPre
(t (Cast p)
vs::t (Cast p), SRID
srid) <- if Header -> Word32
lookupType Header
hWord32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
==Word32
pgisMultiPoint
then Header -> HeaderGetter (t (Cast p)) -> Get (t (Cast p), SRID)
forall a. Header -> HeaderGetter a -> Get (a, SRID)
makeResult Header
h (
HeaderGetter ()
skipHeader HeaderGetter () -> ReaderT Header Get Int -> ReaderT Header Get Int
forall a b.
ReaderT Header Get a
-> ReaderT Header Get b -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ReaderT Header Get Int
getChainLen ReaderT Header Get Int
-> (Int -> HeaderGetter (t (Cast p))) -> HeaderGetter (t (Cast p))
forall a b.
ReaderT Header Get a
-> (a -> ReaderT Header Get b) -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Int -> HeaderGetter (Cast p) -> HeaderGetter (t (Cast p))
forall (t :: * -> *) b.
Repl t b =>
Int -> HeaderGetter b -> HeaderGetter (t b)
`repl` (HeaderGetter ()
skipHeader HeaderGetter () -> HeaderGetter (Cast p) -> HeaderGetter (Cast p)
forall a b.
ReaderT Header Get a
-> ReaderT Header Get b -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> HeaderGetter (Cast p)
forall a. PointND a => HeaderGetter a
getPointND))
)
else GeometryError -> Get (t (Cast p), SRID)
forall a e. Exception e => e -> a
throw (GeometryError -> Get (t (Cast p), SRID))
-> GeometryError -> Get (t (Cast p), SRID)
forall a b. (a -> b) -> a -> b
$
String -> GeometryError
GeometryError String
"invalid data for multipoint geometry"
MultiPoint t p -> Get (MultiPoint t p)
forall a. a -> Get a
forall (m :: * -> *) a. Monad m => a -> m a
return (SRID -> t p -> MultiPoint t p
forall (t :: * -> *) p. SRID -> t p -> MultiPoint t p
MultiPoint SRID
srid (t (Cast p) -> t p
forall (t :: * -> *) p. Trans t p => t (Cast p) -> t p
transFrom t (Cast p)
vs::t p))
data MultiLineString t2 t1 p = MultiLineString SRID (t2 (t1 p))
instance (Repl t2 (t1 (Cast p)), GeoChain t2, GeoChain t1, Trans t1 p) =>
Geometry (MultiLineString t2 t1 p) where
putGeometry :: Putter (MultiLineString t2 t1 p)
putGeometry (MultiLineString SRID
srid t2 (t1 p)
vss) = do
SRID -> Word32 -> (Bool, Bool) -> Put
putHeader SRID
srid Word32
pgisMultiLinestring (forall a. PointND a => (Bool, Bool)
dimProps @(Cast p))
Putter Int
putChainLen Putter Int -> Putter Int
forall a b. (a -> b) -> a -> b
$ t2 (t1 p) -> Int
forall p. t2 p -> Int
forall (t :: * -> *) p. GeoChain t => t p -> Int
count t2 (t1 p)
vss
(t1 p -> Put) -> t2 (t1 p) -> Put
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (\t1 p
vs -> do
Putter (LineString t1 p)
forall a. Geometry a => Putter a
putGeometry (SRID -> t1 p -> LineString t1 p
forall (t :: * -> *) p. SRID -> t p -> LineString t p
LineString SRID
srid t1 p
vs :: LineString t1 p)
) t2 (t1 p)
vss
getGeometry :: Get (MultiLineString t2 t1 p)
getGeometry = do
Header
h <- Get Header
getHeaderPre
(t2 (t1 (Cast p))
vss::t2 (t1 (Cast p)), SRID
srid) <- if Header -> Word32
lookupType Header
hWord32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
==Word32
pgisMultiLinestring
then Header
-> HeaderGetter (t2 (t1 (Cast p))) -> Get (t2 (t1 (Cast p)), SRID)
forall a. Header -> HeaderGetter a -> Get (a, SRID)
makeResult Header
h (
HeaderGetter ()
skipHeader HeaderGetter () -> ReaderT Header Get Int -> ReaderT Header Get Int
forall a b.
ReaderT Header Get a
-> ReaderT Header Get b -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ReaderT Header Get Int
getChainLen ReaderT Header Get Int
-> (Int -> HeaderGetter (t2 (t1 (Cast p))))
-> HeaderGetter (t2 (t1 (Cast p)))
forall a b.
ReaderT Header Get a
-> (a -> ReaderT Header Get b) -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Int
-> HeaderGetter (t1 (Cast p)) -> HeaderGetter (t2 (t1 (Cast p)))
forall (t :: * -> *) b.
Repl t b =>
Int -> HeaderGetter b -> HeaderGetter (t b)
`repl` (HeaderGetter ()
skipHeader HeaderGetter ()
-> HeaderGetter (t1 (Cast p)) -> HeaderGetter (t1 (Cast p))
forall a b.
ReaderT Header Get a
-> ReaderT Header Get b -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> HeaderGetter (t1 (Cast p))
forall a. (Traversable t1, PointND a) => HeaderGetter (t1 a)
forall (t :: * -> *) a.
(GeoChain t, Traversable t, PointND a) =>
HeaderGetter (t a)
getChain))
)
else GeometryError -> Get (t2 (t1 (Cast p)), SRID)
forall a e. Exception e => e -> a
throw (GeometryError -> Get (t2 (t1 (Cast p)), SRID))
-> GeometryError -> Get (t2 (t1 (Cast p)), SRID)
forall a b. (a -> b) -> a -> b
$
String -> GeometryError
GeometryError String
"invalid data for multilinestring geometry"
MultiLineString t2 t1 p -> Get (MultiLineString t2 t1 p)
forall a. a -> Get a
forall (m :: * -> *) a. Monad m => a -> m a
return (SRID -> t2 (t1 p) -> MultiLineString t2 t1 p
forall (t2 :: * -> *) (t1 :: * -> *) p.
SRID -> t2 (t1 p) -> MultiLineString t2 t1 p
MultiLineString SRID
srid (t1 (Cast p) -> t1 p
forall (t :: * -> *) p. Trans t p => t (Cast p) -> t p
transFrom (t1 (Cast p) -> t1 p) -> t2 (t1 (Cast p)) -> t2 (t1 p)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> t2 (t1 (Cast p))
vss::t2 (t1 p)))
data MultiPolygon t3 t2 t1 p = MultiPolygon SRID (t3 (t2 (t1 p)))
instance (Repl t3 (t2 (t1 (Cast p))), Repl t2 (t1 (Cast p)), GeoChain t3, GeoChain t2,
GeoChain t1, Trans t1 p) => Geometry (MultiPolygon t3 t2 t1 p) where
putGeometry :: Putter (MultiPolygon t3 t2 t1 p)
putGeometry (MultiPolygon SRID
srid t3 (t2 (t1 p))
vsss) = do
SRID -> Word32 -> (Bool, Bool) -> Put
putHeader SRID
srid Word32
pgisMultiPolygon (forall a. PointND a => (Bool, Bool)
dimProps @(Cast p))
Putter Int
putChainLen Putter Int -> Putter Int
forall a b. (a -> b) -> a -> b
$ t3 (t2 (t1 p)) -> Int
forall p. t3 p -> Int
forall (t :: * -> *) p. GeoChain t => t p -> Int
count t3 (t2 (t1 p))
vsss
(t2 (t1 p) -> Put) -> t3 (t2 (t1 p)) -> Put
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (\t2 (t1 p)
vss -> do
Putter (Polygon t2 t1 p)
forall a. Geometry a => Putter a
putGeometry (SRID -> t2 (t1 p) -> Polygon t2 t1 p
forall (t2 :: * -> *) (t1 :: * -> *) p.
SRID -> t2 (t1 p) -> Polygon t2 t1 p
Polygon SRID
srid t2 (t1 p)
vss :: Polygon t2 t1 p)
) t3 (t2 (t1 p))
vsss
getGeometry :: Get (MultiPolygon t3 t2 t1 p)
getGeometry = do
Header
h <- Get Header
getHeaderPre
(t3 (t2 (t1 (Cast p)))
vsss::t3 (t2 (t1 (Cast p))), SRID
srid) <- if Header -> Word32
lookupType Header
hWord32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
==Word32
pgisMultiPolygon
then Header
-> HeaderGetter (t3 (t2 (t1 (Cast p))))
-> Get (t3 (t2 (t1 (Cast p))), SRID)
forall a. Header -> HeaderGetter a -> Get (a, SRID)
makeResult Header
h (do
HeaderGetter ()
skipHeader HeaderGetter () -> ReaderT Header Get Int -> ReaderT Header Get Int
forall a b.
ReaderT Header Get a
-> ReaderT Header Get b -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ReaderT Header Get Int
getChainLen ReaderT Header Get Int
-> (Int -> HeaderGetter (t3 (t2 (t1 (Cast p)))))
-> HeaderGetter (t3 (t2 (t1 (Cast p))))
forall a b.
ReaderT Header Get a
-> (a -> ReaderT Header Get b) -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Int
-> HeaderGetter (t2 (t1 (Cast p)))
-> HeaderGetter (t3 (t2 (t1 (Cast p))))
forall (t :: * -> *) b.
Repl t b =>
Int -> HeaderGetter b -> HeaderGetter (t b)
`repl` (HeaderGetter ()
skipHeader HeaderGetter () -> ReaderT Header Get Int -> ReaderT Header Get Int
forall a b.
ReaderT Header Get a
-> ReaderT Header Get b -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ReaderT Header Get Int
getChainLen
ReaderT Header Get Int
-> (Int -> HeaderGetter (t2 (t1 (Cast p))))
-> HeaderGetter (t2 (t1 (Cast p)))
forall a b.
ReaderT Header Get a
-> (a -> ReaderT Header Get b) -> ReaderT Header Get b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Int
-> HeaderGetter (t1 (Cast p)) -> HeaderGetter (t2 (t1 (Cast p)))
forall (t :: * -> *) b.
Repl t b =>
Int -> HeaderGetter b -> HeaderGetter (t b)
`repl` HeaderGetter (t1 (Cast p))
forall a. (Traversable t1, PointND a) => HeaderGetter (t1 a)
forall (t :: * -> *) a.
(GeoChain t, Traversable t, PointND a) =>
HeaderGetter (t a)
getChain)))
)
else GeometryError -> Get (t3 (t2 (t1 (Cast p))), SRID)
forall a e. Exception e => e -> a
throw (GeometryError -> Get (t3 (t2 (t1 (Cast p))), SRID))
-> GeometryError -> Get (t3 (t2 (t1 (Cast p))), SRID)
forall a b. (a -> b) -> a -> b
$
String -> GeometryError
GeometryError String
"invalid data for multipolygon geometry"
MultiPolygon t3 t2 t1 p -> Get (MultiPolygon t3 t2 t1 p)
forall a. a -> Get a
forall (m :: * -> *) a. Monad m => a -> m a
return (SRID -> t3 (t2 (t1 p)) -> MultiPolygon t3 t2 t1 p
forall (t3 :: * -> *) (t2 :: * -> *) (t1 :: * -> *) p.
SRID -> t3 (t2 (t1 p)) -> MultiPolygon t3 t2 t1 p
MultiPolygon SRID
srid ((t1 (Cast p) -> t1 p
forall (t :: * -> *) p. Trans t p => t (Cast p) -> t p
transFrom (t1 (Cast p) -> t1 p) -> t2 (t1 (Cast p)) -> t2 (t1 p)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (t2 (t1 (Cast p)) -> t2 (t1 p))
-> t3 (t2 (t1 (Cast p))) -> t3 (t2 (t1 p))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> t3 (t2 (t1 (Cast p)))
vsss::t3 (t2 (t1 p))))
putPoint :: Castable p => SRID -> p -> Geo (Point p)
putPoint :: forall p. Castable p => SRID -> p -> Geo (Point p)
putPoint SRID
srid p
p = Point p -> Geo (Point p)
forall g. g -> Geo g
Geo (SRID -> p -> Point p
forall p. SRID -> p -> Point p
Point SRID
srid p
p)
getPoint :: Geo (Point p) -> (SRID, p)
getPoint :: forall p. Geo (Point p) -> (SRID, p)
getPoint (Geo (Point SRID
srid p
p)) = (SRID
srid, p
p)
putLS :: SRID -> t p -> Geo (LineString t p)
putLS :: forall (t :: * -> *) p. SRID -> t p -> Geo (LineString t p)
putLS SRID
srid t p
ps = LineString t p -> Geo (LineString t p)
forall g. g -> Geo g
Geo (SRID -> t p -> LineString t p
forall (t :: * -> *) p. SRID -> t p -> LineString t p
LineString SRID
srid t p
ps)
getLS :: Geo (LineString t p) -> (SRID, t p)
getLS :: forall (t :: * -> *) p. Geo (LineString t p) -> (SRID, t p)
getLS (Geo (LineString SRID
srid t p
vs)) = (SRID
srid, t p
vs)
putPoly :: SRID -> t2 (t1 p) -> Geo (Polygon t2 t1 p)
putPoly :: forall (t2 :: * -> *) (t1 :: * -> *) p.
SRID -> t2 (t1 p) -> Geo (Polygon t2 t1 p)
putPoly SRID
srid t2 (t1 p)
pss = Polygon t2 t1 p -> Geo (Polygon t2 t1 p)
forall g. g -> Geo g
Geo (SRID -> t2 (t1 p) -> Polygon t2 t1 p
forall (t2 :: * -> *) (t1 :: * -> *) p.
SRID -> t2 (t1 p) -> Polygon t2 t1 p
Polygon SRID
srid t2 (t1 p)
pss)
getPoly :: Geo (Polygon t2 t1 p) -> (SRID, t2 (t1 p))
getPoly :: forall (t2 :: * -> *) (t1 :: * -> *) p.
Geo (Polygon t2 t1 p) -> (SRID, t2 (t1 p))
getPoly (Geo (Polygon SRID
srid t2 (t1 p)
vss)) = (SRID
srid, t2 (t1 p)
vss)
putMPoint :: SRID -> t p -> Geo (MultiPoint t p)
putMPoint :: forall (t :: * -> *) p. SRID -> t p -> Geo (MultiPoint t p)
putMPoint SRID
srid t p
ps = MultiPoint t p -> Geo (MultiPoint t p)
forall g. g -> Geo g
Geo (SRID -> t p -> MultiPoint t p
forall (t :: * -> *) p. SRID -> t p -> MultiPoint t p
MultiPoint SRID
srid t p
ps)
getMPoint :: Geo (MultiPoint t p) -> (SRID, t p)
getMPoint :: forall (t :: * -> *) p. Geo (MultiPoint t p) -> (SRID, t p)
getMPoint (Geo (MultiPoint SRID
srid t p
vs)) = (SRID
srid, t p
vs)
putMLS :: SRID -> t2 (t1 p) -> Geo (MultiLineString t2 t1 p)
putMLS :: forall (t2 :: * -> *) (t1 :: * -> *) p.
SRID -> t2 (t1 p) -> Geo (MultiLineString t2 t1 p)
putMLS SRID
srid t2 (t1 p)
pss = MultiLineString t2 t1 p -> Geo (MultiLineString t2 t1 p)
forall g. g -> Geo g
Geo (SRID -> t2 (t1 p) -> MultiLineString t2 t1 p
forall (t2 :: * -> *) (t1 :: * -> *) p.
SRID -> t2 (t1 p) -> MultiLineString t2 t1 p
MultiLineString SRID
srid t2 (t1 p)
pss)
getMLS :: Geo (MultiLineString t2 t1 p) -> (SRID, t2 (t1 p))
getMLS :: forall (t2 :: * -> *) (t1 :: * -> *) p.
Geo (MultiLineString t2 t1 p) -> (SRID, t2 (t1 p))
getMLS (Geo (MultiLineString SRID
srid t2 (t1 p)
vs)) = (SRID
srid, t2 (t1 p)
vs)
putMPoly :: SRID -> t3 (t2 (t1 p)) -> Geo (MultiPolygon t3 t2 t1 p)
putMPoly :: forall (t3 :: * -> *) (t2 :: * -> *) (t1 :: * -> *) p.
SRID -> t3 (t2 (t1 p)) -> Geo (MultiPolygon t3 t2 t1 p)
putMPoly SRID
srid t3 (t2 (t1 p))
psss = MultiPolygon t3 t2 t1 p -> Geo (MultiPolygon t3 t2 t1 p)
forall g. g -> Geo g
Geo (SRID -> t3 (t2 (t1 p)) -> MultiPolygon t3 t2 t1 p
forall (t3 :: * -> *) (t2 :: * -> *) (t1 :: * -> *) p.
SRID -> t3 (t2 (t1 p)) -> MultiPolygon t3 t2 t1 p
MultiPolygon SRID
srid t3 (t2 (t1 p))
psss)
getMPoly :: Geo (MultiPolygon t3 t2 t1 p) -> (SRID, t3 (t2 (t1 p)))
getMPoly :: forall (t3 :: * -> *) (t2 :: * -> *) (t1 :: * -> *) p.
Geo (MultiPolygon t3 t2 t1 p) -> (SRID, t3 (t2 (t1 p)))
getMPoly (Geo (MultiPolygon SRID
srid t3 (t2 (t1 p))
vs)) = (SRID
srid, t3 (t2 (t1 p))
vs)