wkt-geom 0.0.1 → 0.0.2
raw patch · 19 files changed
+112/−110 lines, 19 filesdep +containersdep ~geojsonPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: containers
Dependency ranges changed: geojson
API changes (from Hackage documentation)
- Data.Internal.Wkb.Point: coordPoints :: EndianType -> CoordinateType -> Word32 -> Get (Vector GeoPositionWithoutCRS)
+ Data.Internal.Wkb.Point: coordPoints :: EndianType -> CoordinateType -> Word32 -> Get (Seq GeoPositionWithoutCRS)
- Data.Internal.Wkt.Common: emptySet :: Parser (Vector a)
+ Data.Internal.Wkt.Common: emptySet :: Parser (Seq a)
- Data.Internal.Wkt.GeometryCollection: emptyGeometryCollection :: Vector GeospatialGeometry
+ Data.Internal.Wkt.GeometryCollection: emptyGeometryCollection :: Seq GeospatialGeometry
- Data.Internal.Wkt.GeometryCollection: geometryCollection :: Parser (Vector GeospatialGeometry)
+ Data.Internal.Wkt.GeometryCollection: geometryCollection :: Parser (Seq GeospatialGeometry)
- Data.Wkt: emptyGeometryCollection :: Vector GeospatialGeometry
+ Data.Wkt: emptyGeometryCollection :: Seq GeospatialGeometry
- Data.Wkt: geometryCollection :: Parser (Vector GeospatialGeometry)
+ Data.Wkt: geometryCollection :: Parser (Seq GeospatialGeometry)
Files
- src/Data/Internal/Wkb/GeometryCollection.hs +2/−2
- src/Data/Internal/Wkb/Line.hs +2/−2
- src/Data/Internal/Wkb/Point.hs +4/−5
- src/Data/Internal/Wkb/Polygon.hs +9/−9
- src/Data/Internal/Wkt/Common.hs +3/−3
- src/Data/Internal/Wkt/GeometryCollection.hs +7/−7
- src/Data/Internal/Wkt/Line.hs +6/−7
- src/Data/Internal/Wkt/Point.hs +8/−9
- src/Data/Internal/Wkt/Polygon.hs +10/−9
- test/Data/SpecHelper.hs +10/−10
- test/Data/WkbGeometryCollectionSpec.hs +2/−2
- test/Data/WkbLineSpec.hs +2/−2
- test/Data/WkbPointSpec.hs +2/−2
- test/Data/WkbPolygonSpec.hs +5/−5
- test/Data/WktGeometryCollectionSpec.hs +3/−3
- test/Data/WktLineSpec.hs +10/−12
- test/Data/WktPointSpec.hs +2/−2
- test/Data/WktPolygonSpec.hs +14/−15
- wkt-geom.cabal +11/−4
src/Data/Internal/Wkb/GeometryCollection.hs view
@@ -6,7 +6,7 @@ import qualified Control.Monad as Monad import qualified Data.Binary.Get as BinaryGet import qualified Data.Geospatial as Geospatial-import qualified Data.Vector as Vector+import qualified Data.Sequence as Sequence import qualified Data.Internal.Wkb.Endian as Endian import qualified Data.Internal.Wkb.Geometry as Geometry@@ -17,7 +17,7 @@ -> BinaryGet.Get Geospatial.GeospatialGeometry geometryCollection getGeospatialGeometry endianType _ = do numberOfGeometries <- Endian.fourBytes endianType- geoSpatialGeometries <- Vector.generateM (fromIntegral numberOfGeometries) (const getGeospatialGeometry)+ geoSpatialGeometries <- Sequence.replicateM (fromIntegral numberOfGeometries) getGeospatialGeometry pure $ Geospatial.Collection geoSpatialGeometries enclosedFeature :: (Endian.EndianType -> BinaryGet.Get Geometry.WkbGeometryType)
src/Data/Internal/Wkb/Line.hs view
@@ -7,7 +7,7 @@ import qualified Data.Binary.Get as BinaryGet import qualified Data.Geospatial as Geospatial import qualified Data.LineString as LineString-import qualified Data.Vector as Vector+import qualified Data.Sequence as Sequence import qualified Data.Internal.Wkb.Endian as Endian import qualified Data.Internal.Wkb.Geometry as Geometry@@ -22,7 +22,7 @@ multiLine :: (Endian.EndianType -> BinaryGet.Get Geometry.WkbGeometryType) -> Endian.EndianType -> Geometry.CoordinateType -> BinaryGet.Get Geospatial.GeospatialGeometry multiLine getWkbGeom endianType _ = do numberOfLines <- Endian.fourBytes endianType- geoLines <- Vector.generateM (fromIntegral numberOfLines) (const $ GeometryCollection.enclosedFeature getWkbGeom Geometry.LineString geoLine)+ geoLines <- Sequence.replicateM (fromIntegral numberOfLines) (GeometryCollection.enclosedFeature getWkbGeom Geometry.LineString geoLine) pure $ Geospatial.MultiLine $ Geospatial.mergeGeoLines geoLines geoLine :: Endian.EndianType -> Geometry.CoordinateType -> BinaryGet.Get Geospatial.GeoLine
src/Data/Internal/Wkb/Point.hs view
@@ -7,8 +7,7 @@ import qualified Data.Binary.Get as BinaryGet import qualified Data.Geospatial as Geospatial-import qualified Data.Vector as Vector-import qualified Data.Vector.Storable as VectorStorable+import qualified Data.Sequence as Sequence import qualified Data.Word as Word import qualified Data.Internal.Wkb.Endian as Endian@@ -23,7 +22,7 @@ multiPoint :: (Endian.EndianType -> BinaryGet.Get Geometry.WkbGeometryType) -> Endian.EndianType -> Geometry.CoordinateType -> BinaryGet.Get Geospatial.GeospatialGeometry multiPoint getWkbGeom endianType _ = do numberOfPoints <- Endian.fourBytes endianType- geoPoints <- Vector.generateM (fromIntegral numberOfPoints) (const $ GeometryCollection.enclosedFeature getWkbGeom Geometry.Point geoPoint)+ geoPoints <- Sequence.replicateM (fromIntegral numberOfPoints) (GeometryCollection.enclosedFeature getWkbGeom Geometry.Point geoPoint) pure $ Geospatial.MultiPoint $ Geospatial.mergeGeoPoints geoPoints geoPoint :: Endian.EndianType -> Geometry.CoordinateType -> BinaryGet.Get Geospatial.GeoPoint@@ -31,9 +30,9 @@ p <- coordPoint endianType coordType pure $ Geospatial.GeoPoint p -coordPoints :: Endian.EndianType -> Geometry.CoordinateType -> Word.Word32 -> BinaryGet.Get (VectorStorable.Vector Geospatial.GeoPositionWithoutCRS)+coordPoints :: Endian.EndianType -> Geometry.CoordinateType -> Word.Word32 -> BinaryGet.Get (Sequence.Seq Geospatial.GeoPositionWithoutCRS) coordPoints endianType coordType numberOfPoints =- VectorStorable.generateM (fromIntegral numberOfPoints) (const $ coordPoint endianType coordType)+ Sequence.replicateM (fromIntegral numberOfPoints) (coordPoint endianType coordType) coordPoint :: Endian.EndianType -> Geometry.CoordinateType -> BinaryGet.Get Geospatial.GeoPositionWithoutCRS coordPoint endianType coordType =
src/Data/Internal/Wkb/Polygon.hs view
@@ -7,13 +7,13 @@ import qualified Data.Binary.Get as BinaryGet import qualified Data.Geospatial as Geospatial import qualified Data.LinearRing as LinearRing-import qualified Data.Vector as Vector-import qualified Data.Vector.Storable as VectorStorable+import qualified Data.Sequence as Sequence import qualified Data.Internal.Wkb.Endian as Endian import qualified Data.Internal.Wkb.Geometry as Geometry import qualified Data.Internal.Wkb.GeometryCollection as GeometryCollection import qualified Data.Internal.Wkb.Point as Point+import qualified Data.SeqHelper as SeqHelper polygon :: Endian.EndianType -> Geometry.CoordinateType -> BinaryGet.Get Geospatial.GeospatialGeometry polygon endianType coordType = do@@ -23,7 +23,7 @@ multiPolygon :: (Endian.EndianType -> BinaryGet.Get Geometry.WkbGeometryType) -> Endian.EndianType -> Geometry.CoordinateType -> BinaryGet.Get Geospatial.GeospatialGeometry multiPolygon getWkbGeom endianType _ = do numberOfPolygons <- Endian.fourBytes endianType- geoPolygons <- Vector.generateM (fromIntegral numberOfPolygons) (const $ GeometryCollection.enclosedFeature getWkbGeom Geometry.Polygon getGeoPolygon)+ geoPolygons <- Sequence.replicateM (fromIntegral numberOfPolygons) (GeometryCollection.enclosedFeature getWkbGeom Geometry.Polygon getGeoPolygon) pure $ Geospatial.MultiPolygon $ Geospatial.mergeGeoPolygons geoPolygons getGeoPolygon :: Endian.EndianType -> Geometry.CoordinateType -> BinaryGet.Get Geospatial.GeoPolygon@@ -31,10 +31,10 @@ linearRings <- getLinearRings endianType coordType pure $ Geospatial.GeoPolygon linearRings -getLinearRings :: Endian.EndianType -> Geometry.CoordinateType -> BinaryGet.Get (Vector.Vector (LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS))+getLinearRings :: Endian.EndianType -> Geometry.CoordinateType -> BinaryGet.Get (Sequence.Seq (LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS)) getLinearRings endianType coordType = do numberOfRings <- Endian.fourBytes endianType- Vector.generateM (fromIntegral numberOfRings) (const $ getLinearRing endianType coordType)+ Sequence.replicateM (fromIntegral numberOfRings) (getLinearRing endianType coordType) getLinearRing :: Endian.EndianType -> Geometry.CoordinateType -> BinaryGet.Get (LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS) getLinearRing endianType coordType = do@@ -43,13 +43,13 @@ p1 <- Point.coordPoint endianType coordType p2 <- Point.coordPoint endianType coordType p3 <- Point.coordPoint endianType coordType- pts <- Point.coordPoints endianType coordType (numberOfPoints - 3)- if VectorStorable.last pts == p1 then- pure $ LinearRing.makeLinearRing p1 p2 p3 (VectorStorable.init pts)+ pts@(_ Sequence.:|> lastS) <- Point.coordPoints endianType coordType (numberOfPoints - 3)+ if lastS == p1 then+ pure $ LinearRing.makeLinearRing p1 p2 p3 (SeqHelper.sequenceHead pts) else Monad.fail $ "First and last points of linear ring are different: first="- ++ show p1 ++ " last=" ++ show (VectorStorable.last pts)+ ++ show p1 ++ " last=" ++ show lastS else Monad.fail $ "Must have at least four points for a linear ring: "
src/Data/Internal/Wkt/Common.hs view
@@ -6,13 +6,13 @@ import Control.Applicative ((<|>)) import qualified Data.Scientific as Scientific-import qualified Data.Vector as Vector+import qualified Data.Sequence as Sequence import qualified Text.Trifecta as Trifecta -emptySet :: Trifecta.Parser (Vector.Vector a)+emptySet :: Trifecta.Parser (Sequence.Seq a) emptySet = do _ <- Trifecta.string "empty"- pure Vector.empty+ pure Sequence.empty emptySets :: Trifecta.Parser ([a], [[a]]) emptySets = do
src/Data/Internal/Wkt/GeometryCollection.hs view
@@ -5,7 +5,7 @@ import Control.Applicative ((<|>)) import qualified Data.Geospatial as Geospatial-import qualified Data.Vector as Vector+import qualified Data.Sequence as Sequence import qualified Text.Trifecta as Trifecta import qualified Data.Internal.Wkt.Common as Wkt@@ -13,27 +13,27 @@ import qualified Data.Internal.Wkt.Point as Point import qualified Data.Internal.Wkt.Polygon as Polygon -geometryCollection :: Trifecta.Parser (Vector.Vector Geospatial.GeospatialGeometry)+geometryCollection :: Trifecta.Parser (Sequence.Seq Geospatial.GeospatialGeometry) geometryCollection = do _ <- Trifecta.string "geometrycollection" _ <- Trifecta.spaces Wkt.emptySet <|> bracketedAll -bracketedAll :: Trifecta.Parser (Vector.Vector Geospatial.GeospatialGeometry)+bracketedAll :: Trifecta.Parser (Sequence.Seq Geospatial.GeospatialGeometry) bracketedAll = do _ <- Trifecta.char '(' >> Trifecta.spaces x <- parseAll _ <- Trifecta.spaces >> Trifecta.char ')' pure x -parseAll :: Trifecta.Parser (Vector.Vector Geospatial.GeospatialGeometry)+parseAll :: Trifecta.Parser (Sequence.Seq Geospatial.GeospatialGeometry) parseAll = do let single = Geospatial.Point <$> Point.point <|> Geospatial.Line <$> Line.lineString <|> Geospatial.Polygon <$> Polygon.polygon multi = Geospatial.MultiPoint <$> Point.multiPoint <|> Geospatial.MultiLine <$> Line.multiLineString <|> Geospatial.MultiPolygon <$> Polygon.multiPolygon x <- single <|> multi xs <- Trifecta.many (Trifecta.char ',' >> Trifecta.spaces >> (single <|> multi))- pure $ Vector.cons x (Vector.fromList xs)+ pure $ x Sequence.:<| Sequence.fromList xs -emptyGeometryCollection :: Vector.Vector Geospatial.GeospatialGeometry-emptyGeometryCollection = Vector.empty+emptyGeometryCollection :: Sequence.Seq Geospatial.GeospatialGeometry+emptyGeometryCollection = Sequence.empty
src/Data/Internal/Wkt/Line.hs view
@@ -10,8 +10,7 @@ import Control.Applicative ((<|>)) import qualified Data.Geospatial as Geospatial import qualified Data.LineString as LineString-import qualified Data.Vector as Vector-import qualified Data.Vector.Storable as VectorStorable+import qualified Data.Sequence as Sequence import qualified Text.Trifecta as Trifecta import qualified Data.Internal.Wkt.Common as Wkt@@ -30,13 +29,13 @@ x <- Wkt.emptySet <|> manyLines pure $ Geospatial.GeoMultiLine x -manyLines :: Trifecta.Parser (Vector.Vector (LineString.LineString Geospatial.GeoPositionWithoutCRS))+manyLines :: Trifecta.Parser (Sequence.Seq (LineString.LineString Geospatial.GeoPositionWithoutCRS)) manyLines = do _ <- Trifecta.spaces >> Trifecta.char '(' x <- line xs <- Trifecta.many (Trifecta.char ',' >> Trifecta.spaces >> line) _ <- Trifecta.char ')' >> Trifecta.spaces- pure $ Vector.cons x (Vector.fromList xs)+ pure $ x Sequence.:<| Sequence.fromList xs line :: Trifecta.Parser (LineString.LineString Geospatial.GeoPositionWithoutCRS) line = do@@ -45,7 +44,7 @@ second <- commandPoint rest <- Trifecta.many commandPoint _ <- Trifecta.char ')' >> Trifecta.spaces- pure $ LineString.makeLineString first second (VectorStorable.fromList rest)+ pure $ LineString.makeLineString first second (Sequence.fromList rest) commandPoint :: Trifecta.Parser Geospatial.GeoPositionWithoutCRS commandPoint = do@@ -54,7 +53,7 @@ Point.justPoints emptyLine :: Geospatial.GeoLine-emptyLine = Geospatial.GeoLine $ LineString.makeLineString Geospatial.GeoEmpty Geospatial.GeoEmpty VectorStorable.empty+emptyLine = Geospatial.GeoLine $ LineString.makeLineString Geospatial.GeoEmpty Geospatial.GeoEmpty Sequence.empty emptyMultiLine :: Geospatial.GeoMultiLine-emptyMultiLine = Geospatial.mergeGeoLines Vector.empty+emptyMultiLine = Geospatial.mergeGeoLines Sequence.empty
src/Data/Internal/Wkt/Point.hs view
@@ -8,12 +8,11 @@ import Control.Applicative ((<|>)) import qualified Data.Geospatial as Geospatial+import qualified Data.Internal.Wkt.Common as Wkt import qualified Data.Scientific as Scientific-import qualified Data.Vector as Vector+import qualified Data.Sequence as Sequence import qualified Text.Trifecta as Trifecta -import qualified Data.Internal.Wkt.Common as Wkt- point :: Trifecta.Parser Geospatial.GeoPoint point = do _ <- Trifecta.string "point"@@ -27,24 +26,24 @@ xl <- Wkt.emptySet <|> manyPoints pure $ Geospatial.GeoMultiPoint xl -manyPoints :: Trifecta.Parser (Vector.Vector Geospatial.GeoPositionWithoutCRS)+manyPoints :: Trifecta.Parser (Sequence.Seq Geospatial.GeoPositionWithoutCRS) manyPoints = do _ <- Trifecta.char '(' >> Trifecta.spaces xl <- unbracketedPoints <|> bracketedPoints _ <- Trifecta.spaces >> Trifecta.char ')' >> Trifecta.spaces pure xl -unbracketedPoints :: Trifecta.Parser (Vector.Vector Geospatial.GeoPositionWithoutCRS)+unbracketedPoints :: Trifecta.Parser (Sequence.Seq Geospatial.GeoPositionWithoutCRS) unbracketedPoints = do x <- justPoints xs <- Trifecta.many (Trifecta.char ',' >> Trifecta.spaces >> justPoints)- pure $ Vector.cons x (Vector.fromList xs)+ pure $ x Sequence.<| Sequence.fromList xs -bracketedPoints :: Trifecta.Parser (Vector.Vector Geospatial.GeoPositionWithoutCRS)+bracketedPoints :: Trifecta.Parser (Sequence.Seq Geospatial.GeoPositionWithoutCRS) bracketedPoints = do x <- bracketedPoint xs <- Trifecta.many (Trifecta.char ',' >> Trifecta.spaces >> bracketedPoint)- pure $ Vector.cons x (Vector.fromList xs)+ pure $ x Sequence.<| Sequence.fromList xs bracketedPoint :: Trifecta.Parser Geospatial.GeoPositionWithoutCRS bracketedPoint = do@@ -64,4 +63,4 @@ emptyPoint = Geospatial.GeoPoint Geospatial.GeoEmpty emptyMultiPoint :: Geospatial.GeoMultiPoint-emptyMultiPoint = Geospatial.GeoMultiPoint Vector.empty+emptyMultiPoint = Geospatial.GeoMultiPoint Sequence.empty
src/Data/Internal/Wkt/Polygon.hs view
@@ -8,13 +8,13 @@ import Control.Applicative ((<|>)) import qualified Data.Geospatial as Geospatial import qualified Data.LinearRing as LinearRing-import qualified Data.Vector as Vector-import qualified Data.Vector.Storable as VectorStorable+import qualified Data.Sequence as Sequence import qualified Text.Trifecta as Trifecta import qualified Data.Internal.Wkt.Common as Wkt import qualified Data.Internal.Wkt.Line as Line import qualified Data.Internal.Wkt.Point as Point+import qualified Data.SeqHelper as SeqHelper polygon :: Trifecta.Parser Geospatial.GeoPolygon polygon = do@@ -30,21 +30,21 @@ xs <- Wkt.emptySet <|> multiPolygon' pure $ Geospatial.GeoMultiPolygon xs -polygon' :: Trifecta.Parser (Vector.Vector (LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS))+polygon' :: Trifecta.Parser (Sequence.Seq (LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS)) polygon' = do _ <- Trifecta.spaces >> Trifecta.char '(' x <- linearRing xs <- Trifecta.many (Trifecta.char ',' >> Trifecta.spaces >> linearRing) _ <- Trifecta.char ')' >> Trifecta.spaces- pure $ Vector.cons x (Vector.fromList xs)+ pure $ x Sequence.:<| Sequence.fromList xs -multiPolygon' :: Trifecta.Parser (Vector.Vector (Vector.Vector (LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS)))+multiPolygon' :: Trifecta.Parser (Sequence.Seq (Sequence.Seq (LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS))) multiPolygon' = do _ <- Trifecta.spaces >> Trifecta.char '(' x <- polygon' xs <- Trifecta.many (Trifecta.char ',' >> Trifecta.spaces >> polygon') _ <- Trifecta.char ')' >> Trifecta.spaces- pure $ Vector.cons x (Vector.fromList xs)+ pure $ x Sequence.:<| Sequence.fromList xs linearRing :: Trifecta.Parser (LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS) linearRing = do@@ -54,10 +54,11 @@ third <- Line.commandPoint rest <- Trifecta.many Line.commandPoint _ <- Trifecta.char ')' >> Trifecta.spaces- pure $ LinearRing.makeLinearRing first second third (VectorStorable.init $ VectorStorable.fromList rest)+ pure $ LinearRing.makeLinearRing first second third (SeqHelper.sequenceHead $ Sequence.fromList rest) emptyPolygon :: Geospatial.GeoPolygon-emptyPolygon = Geospatial.GeoPolygon Vector.empty+emptyPolygon = Geospatial.GeoPolygon Sequence.empty emptyMultiPolygon :: Geospatial.GeoMultiPolygon-emptyMultiPolygon = Geospatial.mergeGeoPolygons Vector.empty+emptyMultiPolygon = Geospatial.mergeGeoPolygons Sequence.empty+
test/Data/SpecHelper.hs view
@@ -1,9 +1,9 @@ module Data.SpecHelper where -import qualified Data.Geospatial as Geospatial-import qualified Data.LinearRing as LinearRing-import qualified Data.LineString as LineString-import qualified Data.Vector.Storable as VectorStorable+import qualified Data.Geospatial as Geospatial+import qualified Data.LinearRing as LinearRing+import qualified Data.LineString as LineString+import qualified Data.Sequence as Sequence point1 :: Geospatial.GeoPositionWithoutCRS point1 = Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.0)@@ -12,19 +12,19 @@ point2 = Geospatial.GeoPointXY (Geospatial.PointXY 3.0 4.0) lineString1 :: LineString.LineString Geospatial.GeoPositionWithoutCRS-lineString1 = LineString.makeLineString (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 3.0 4.0)) VectorStorable.empty+lineString1 = LineString.makeLineString (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 3.0 4.0)) Sequence.empty lineString2 :: LineString.LineString Geospatial.GeoPositionWithoutCRS-lineString2 = LineString.makeLineString (Geospatial.GeoPointXY (Geospatial.PointXY 1.5 2.5)) (Geospatial.GeoPointXY (Geospatial.PointXY 3.5 4.5)) VectorStorable.empty+lineString2 = LineString.makeLineString (Geospatial.GeoPointXY (Geospatial.PointXY 1.5 2.5)) (Geospatial.GeoPointXY (Geospatial.PointXY 3.5 4.5)) Sequence.empty lineString3 :: LineString.LineString Geospatial.GeoPositionWithoutCRS-lineString3 = LineString.makeLineString (Geospatial.GeoPointXY (Geospatial.PointXY 15 15)) (Geospatial.GeoPointXY (Geospatial.PointXY 20 20)) (VectorStorable.singleton (Geospatial.GeoPointXY (Geospatial.PointXY 20 20)))+lineString3 = LineString.makeLineString (Geospatial.GeoPointXY (Geospatial.PointXY 15 15)) (Geospatial.GeoPointXY (Geospatial.PointXY 20 20)) (Sequence.singleton (Geospatial.GeoPointXY (Geospatial.PointXY 20 20))) lineString4 :: LineString.LineString Geospatial.GeoPositionWithoutCRS-lineString4 = LineString.makeLineString (Geospatial.GeoPointXY (Geospatial.PointXY 15 15)) (Geospatial.GeoPointXY (Geospatial.PointXY 20 20)) (VectorStorable.singleton (Geospatial.GeoPointXY (Geospatial.PointXY 25 25)))+lineString4 = LineString.makeLineString (Geospatial.GeoPointXY (Geospatial.PointXY 15 15)) (Geospatial.GeoPointXY (Geospatial.PointXY 20 20)) (Sequence.singleton (Geospatial.GeoPointXY (Geospatial.PointXY 25 25))) linearRing1 :: LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS-linearRing1 = LinearRing.makeLinearRing (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 3.0 4.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 5.0 6.0)) VectorStorable.empty+linearRing1 = LinearRing.makeLinearRing (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 3.0 4.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 5.0 6.0)) Sequence.empty linearRing2 :: LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS-linearRing2 = LinearRing.makeLinearRing (Geospatial.GeoPointXY (Geospatial.PointXY 1.5 2.5)) (Geospatial.GeoPointXY (Geospatial.PointXY 3.5 4.5)) (Geospatial.GeoPointXY (Geospatial.PointXY 5.5 6.5)) VectorStorable.empty+linearRing2 = LinearRing.makeLinearRing (Geospatial.GeoPointXY (Geospatial.PointXY 1.5 2.5)) (Geospatial.GeoPointXY (Geospatial.PointXY 3.5 4.5)) (Geospatial.GeoPointXY (Geospatial.PointXY 5.5 6.5)) Sequence.empty
test/Data/WkbGeometryCollectionSpec.hs view
@@ -7,7 +7,7 @@ import qualified Data.ByteString.Lazy as LazyByteString import qualified Data.Geospatial as Geospatial import Data.Monoid ((<>))-import qualified Data.Vector as Vector+import qualified Data.Sequence as Sequence import qualified Data.Wkb as Wkb import Test.Hspec (Spec, describe, it, shouldBe) @@ -22,7 +22,7 @@ describe "Test wkb geometry collection" $ it "Parse valid wkb geometry collection" $ Wkb.parseByteString exampleWkbGeometryCollection `shouldBe` (Right . Geospatial.Collection $- Vector.fromList+ Sequence.fromList [ Geospatial.Point $ Geospatial.GeoPoint SpecHelper.point1 , Geospatial.Point $ Geospatial.GeoPoint SpecHelper.point2 , Geospatial.Line $ Geospatial.GeoLine SpecHelper.lineString3
test/Data/WkbLineSpec.hs view
@@ -6,7 +6,7 @@ import qualified Data.ByteString.Lazy as LazyByteString import qualified Data.Geospatial as Geospatial import Data.Monoid ((<>))-import qualified Data.Vector as Vector+import qualified Data.Sequence as Sequence import Test.Hspec (Spec, describe, it, shouldBe) import qualified Data.Wkb as Wkb@@ -39,7 +39,7 @@ testWkbMultiLineParsing = describe "Test wkb multi line" $ it "Parse valid wkb multi line" $- Wkb.parseByteString exampleWkbMultiLine `shouldBe` (Right $ Geospatial.MultiLine $ Geospatial.GeoMultiLine (Vector.fromList [SpecHelper.lineString1, SpecHelper.lineString2]))+ Wkb.parseByteString exampleWkbMultiLine `shouldBe` (Right $ Geospatial.MultiLine $ Geospatial.GeoMultiLine (Sequence.fromList [SpecHelper.lineString1, SpecHelper.lineString2])) exampleWkbMultiLine :: LazyByteString.ByteString exampleWkbMultiLine =
test/Data/WkbPointSpec.hs view
@@ -6,7 +6,7 @@ import qualified Data.ByteString.Lazy as LazyByteString import qualified Data.Geospatial as Geospatial import Data.Monoid ((<>))-import qualified Data.Vector as Vector+import qualified Data.Sequence as Sequence import Test.Hspec (Spec, describe, it, shouldBe) import qualified Data.Wkb as Wkb@@ -36,7 +36,7 @@ testWkbMultiPointParsing = describe "Test wkb multi point" $ it "Parse valid wkb multi point" $- Wkb.parseByteString exampleWkbMultiPoint `shouldBe` (Right $ Geospatial.MultiPoint (Geospatial.GeoMultiPoint (Vector.fromList [SpecHelper.point1, SpecHelper.point2])))+ Wkb.parseByteString exampleWkbMultiPoint `shouldBe` (Right $ Geospatial.MultiPoint (Geospatial.GeoMultiPoint (Sequence.fromList [SpecHelper.point1, SpecHelper.point2]))) exampleWkbMultiPoint :: LazyByteString.ByteString exampleWkbMultiPoint =
test/Data/WkbPolygonSpec.hs view
@@ -6,7 +6,7 @@ import qualified Data.ByteString.Lazy as LazyByteString import qualified Data.Geospatial as Geospatial import Data.Monoid ((<>))-import qualified Data.Vector as Vector+import qualified Data.Sequence as Sequence import Test.Hspec (Spec, describe, it, shouldBe) import qualified Data.Wkb as Wkb@@ -22,7 +22,7 @@ testWkbPolygonParsing = describe "Test wkb polygon" $ do it "Parse valid wkb polygon" $- Wkb.parseByteString exampleWkbPolygon `shouldBe` (Right $ Geospatial.Polygon $ Geospatial.GeoPolygon (Vector.singleton SpecHelper.linearRing1))+ Wkb.parseByteString exampleWkbPolygon `shouldBe` (Right $ Geospatial.Polygon $ Geospatial.GeoPolygon (Sequence.singleton SpecHelper.linearRing1)) it "Not parse bad wkb polygon" $ Wkb.parseByteString exampleBadWkbPolygon `shouldBe` Left "Could not parse wkb: First and last points of linear ring are different: first=GeoPointXY (PointXY {_xyX = 1.0, _xyY = 2.0}) last=GeoPointXY (PointXY {_xyX = 7.0, _xyY = 8.0})" @@ -63,9 +63,9 @@ describe "Test wkb multi polygon" $ it "Parse valid wkb multi polygon" $ Wkb.parseByteString exampleWkbMultiPolygon `shouldBe` (Right $ Geospatial.MultiPolygon $ Geospatial.GeoMultiPolygon- (Vector.fromList- [ Vector.singleton SpecHelper.linearRing1- , Vector.singleton SpecHelper.linearRing2+ (Sequence.fromList+ [ Sequence.singleton SpecHelper.linearRing1+ , Sequence.singleton SpecHelper.linearRing2 ])) exampleWkbMultiPolygon :: LazyByteString.ByteString
test/Data/WktGeometryCollectionSpec.hs view
@@ -4,7 +4,7 @@ import Control.Lens ((^?!)) import qualified Data.Geospatial as Geospatial-import qualified Data.Vector as Vector+import qualified Data.Sequence as Sequence import Test.Hspec (Spec, describe, it, shouldBe) import qualified Text.Trifecta as Trifecta @@ -25,9 +25,9 @@ it "Parse something with spaces" $ Wkt.parseString Wkt.geometryCollection "GeometryCollection ( POINT ( 1 2) , POINT (3 4) , LINESTRING (15 15 , 20 20, 25 25 ) ) " ^?! Trifecta._Success `shouldBe` exampleGeometryCollection -exampleGeometryCollection :: Vector.Vector Geospatial.GeospatialGeometry+exampleGeometryCollection :: Sequence.Seq Geospatial.GeospatialGeometry exampleGeometryCollection =- Vector.fromList+ Sequence.fromList [ Geospatial.Point $ Geospatial.GeoPoint SpecHelper.point1 , Geospatial.Point $ Geospatial.GeoPoint SpecHelper.point2 , Geospatial.Line $ Geospatial.GeoLine SpecHelper.lineString4
test/Data/WktLineSpec.hs view
@@ -2,17 +2,15 @@ module Data.WktLineSpec where -import Control.Lens ((^?), (^?!))-import qualified Data.Geospatial as Geospatial-import qualified Data.LineString as LineString-import qualified Data.Maybe as Maybe-import qualified Data.Vector as Vector-import qualified Data.Vector.Storable as VectorStorable-import Test.Hspec (Spec, describe, it, shouldBe,- shouldSatisfy)-import qualified Text.Trifecta as Trifecta+import Control.Lens ((^?), (^?!))+import qualified Data.Geospatial as Geospatial+import qualified Data.LineString as LineString+import qualified Data.Maybe as Maybe+import qualified Data.Sequence as Sequence+import Test.Hspec (Spec, describe, it, shouldBe, shouldSatisfy)+import qualified Text.Trifecta as Trifecta -import qualified Data.Wkt as Wkt+import qualified Data.Wkt as Wkt spec :: Spec spec = do@@ -51,7 +49,7 @@ exampleLine = Geospatial.GeoLine exampleLineString exampleMultiLine :: Geospatial.GeoMultiLine-exampleMultiLine = Geospatial.GeoMultiLine (Vector.singleton exampleLineString)+exampleMultiLine = Geospatial.GeoMultiLine (Sequence.singleton exampleLineString) exampleLineString :: LineString.LineString Geospatial.GeoPositionWithoutCRS-exampleLineString = LineString.makeLineString (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.5)) (VectorStorable.singleton (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 3.0)))+exampleLineString = LineString.makeLineString (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.5)) (Sequence.singleton (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 3.0)))
test/Data/WktPointSpec.hs view
@@ -5,7 +5,7 @@ import Control.Lens ((^?), (^?!)) import qualified Data.Geospatial as Geospatial import qualified Data.Maybe as Maybe-import qualified Data.Vector as Vector+import qualified Data.Sequence as Sequence import Test.Hspec (Spec, describe, expectationFailure, it, shouldBe, shouldSatisfy) import qualified Text.Trifecta as Trifecta@@ -57,4 +57,4 @@ examplePoint = Geospatial.GeoPoint (Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.0)) exampleMultiPoint :: Geospatial.GeoMultiPoint-exampleMultiPoint = Geospatial.GeoMultiPoint (Vector.fromList [Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.0), Geospatial.GeoPointXY (Geospatial.PointXY 2.0 2.0)])+exampleMultiPoint = Geospatial.GeoMultiPoint (Sequence.fromList [Geospatial.GeoPointXY (Geospatial.PointXY 1.0 2.0), Geospatial.GeoPointXY (Geospatial.PointXY 2.0 2.0)])
test/Data/WktPolygonSpec.hs view
@@ -2,15 +2,14 @@ module Data.WktPolygonSpec where -import Control.Lens ((^?!))-import qualified Data.Geospatial as Geospatial-import qualified Data.LinearRing as LinearRing-import qualified Data.Vector as Vector-import qualified Data.Vector.Storable as VectorStorable-import Test.Hspec (Spec, describe, it, shouldBe)-import qualified Text.Trifecta as Trifecta+import Control.Lens ((^?!))+import qualified Data.Geospatial as Geospatial+import qualified Data.LinearRing as LinearRing+import qualified Data.Sequence as Sequence+import Test.Hspec (Spec, describe, it, shouldBe)+import qualified Text.Trifecta as Trifecta -import qualified Data.Wkt as Wkt+import qualified Data.Wkt as Wkt spec :: Spec spec = do@@ -43,22 +42,22 @@ examplePolygon :: Geospatial.GeoPolygon examplePolygon =- Geospatial.GeoPolygon (Vector.singleton linearRingSingle)+ Geospatial.GeoPolygon (Sequence.singleton linearRingSingle) examplePolygonWithHole :: Geospatial.GeoPolygon examplePolygonWithHole = Geospatial.GeoPolygon linearRingDouble linearRingSingle :: LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS-linearRingSingle = LinearRing.makeLinearRing (Geospatial.GeoPointXY (Geospatial.PointXY 4.0 0.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 0.0 4.0)) (Geospatial.GeoPointXY (Geospatial.PointXY (-4.0) 0.0)) (VectorStorable.fromList [Geospatial.GeoPointXY (Geospatial.PointXY 0.0 (-4.0))])+linearRingSingle = LinearRing.makeLinearRing (Geospatial.GeoPointXY (Geospatial.PointXY 4.0 0.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 0.0 4.0)) (Geospatial.GeoPointXY (Geospatial.PointXY (-4.0) 0.0)) (Sequence.fromList [Geospatial.GeoPointXY (Geospatial.PointXY 0.0 (-4.0))]) -linearRingDouble :: Vector.Vector (LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS)-linearRingDouble = Vector.fromList+linearRingDouble :: Sequence.Seq (LinearRing.LinearRing Geospatial.GeoPositionWithoutCRS)+linearRingDouble = Sequence.fromList [ linearRingSingle- , LinearRing.makeLinearRing (Geospatial.GeoPointXY (Geospatial.PointXY 2.0 0.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 0.0 2.0)) (Geospatial.GeoPointXY (Geospatial.PointXY (-2.0) 0.0)) (VectorStorable.fromList [ Geospatial.GeoPointXY (Geospatial.PointXY 0.0 (-2.0))])+ , LinearRing.makeLinearRing (Geospatial.GeoPointXY (Geospatial.PointXY 2.0 0.0)) (Geospatial.GeoPointXY (Geospatial.PointXY 0.0 2.0)) (Geospatial.GeoPointXY (Geospatial.PointXY (-2.0) 0.0)) (Sequence.fromList [ Geospatial.GeoPointXY (Geospatial.PointXY 0.0 (-2.0))]) ] exampleMultiPolygon :: Geospatial.GeoMultiPolygon-exampleMultiPolygon = Geospatial.GeoMultiPolygon (Vector.singleton (Vector.singleton linearRingSingle))+exampleMultiPolygon = Geospatial.GeoMultiPolygon (Sequence.singleton (Sequence.singleton linearRingSingle)) exampleMultiPolygonWithHole :: Geospatial.GeoMultiPolygon-exampleMultiPolygonWithHole = Geospatial.GeoMultiPolygon (Vector.singleton linearRingDouble)+exampleMultiPolygonWithHole = Geospatial.GeoMultiPolygon (Sequence.singleton linearRingDouble)
wkt-geom.cabal view
@@ -1,5 +1,5 @@ name: wkt-geom-version: 0.0.1+version: 0.0.2 synopsis: A parser of WKT, WKB and eWKB. description: Well Known Text (WKT), Well Known Binary and the Postgresql extension Extended Well Know Binary (eWKB) are vector geometry representations. .@@ -39,7 +39,8 @@ build-depends: base < 5 && >= 4.8 , binary >= 0.8 , bytestring >= 0.10- , geojson >= 2.0.0+ , containers >= 0.5.10.1+ , geojson >= 3.0.1 , scientific >= 0.3.6 , trifecta >= 1.7 , utf8-string >= 1@@ -68,7 +69,8 @@ , binary >= 0.8 , ansi-wl-pprint >= 0.6 , bytestring >= 0.10- , geojson >= 2.0.0+ , containers >= 0.5.10.1+ , geojson >= 3.0.1 , hspec , lens , QuickCheck@@ -81,4 +83,9 @@ source-repository head type: git- location: https://github.com/githubuser/wkt-geom+ location: https://github.com/indicatrix/wkt-geom++source-repository this+ type: git+ location: https://github.com/indicatrix/hs-geojson.git+ tag: 0.0.2