{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}
module Data.Geospatial.Internal.Geometry.GeoMultiLine (
GeoMultiLine(..)
, unGeoMultiLine
, splitGeoMultiLine, mergeGeoLines
) where
import Data.Geospatial.Internal.BasicTypes
import Data.Geospatial.Internal.Geometry.Aeson
import Data.Geospatial.Internal.Geometry.GeoLine
import Data.LineString
import Control.DeepSeq
import Control.Lens (makeLenses)
import Control.Monad (mzero)
import Data.Aeson (FromJSON (..),
ToJSON (..),
Value (..))
import qualified Data.Vector as Vector
import GHC.Generics (Generic)
newtype GeoMultiLine = GeoMultiLine { _unGeoMultiLine :: Vector.Vector (LineString GeoPositionWithoutCRS) } deriving (Show, Eq, Generic, NFData)
makeLenses ''GeoMultiLine
splitGeoMultiLine:: GeoMultiLine -> Vector.Vector GeoLine
splitGeoMultiLine = Vector.map GeoLine . _unGeoMultiLine
mergeGeoLines :: Vector.Vector GeoLine -> GeoMultiLine
mergeGeoLines = GeoMultiLine . Vector.map _unGeoLine
instance ToJSON GeoMultiLine where
toJSON = makeGeometryGeoAeson "MultiLineString" . _unGeoMultiLine
instance FromJSON GeoMultiLine where
parseJSON (Object o) = readGeometryGeoAeson "MultiLineString" GeoMultiLine o
parseJSON _ = mzero