wkt-geom 0.0.5 → 0.0.6
raw patch · 7 files changed
+103/−12 lines, 7 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.Ewkb: toByteString :: EndianType -> GeospatialGeometry -> ByteString
+ Data.Ewkb: toByteString :: EndianType -> SridType -> GeospatialGeometry -> ByteString
Files
- CHANGELOG.md +4/−0
- src/Data/Ewkb.hs +6/−3
- src/Data/Wkb.hs +2/−0
- test/Data/Internal/Ewkb/LineSpec.hs +28/−0
- test/Data/Internal/Ewkb/PointSpec.hs +28/−0
- test/Data/SpecHelper.hs +24/−7
- wkt-geom.cabal +11/−2
CHANGELOG.md view
@@ -1,6 +1,10 @@ # Changelog All notable changes to this project will be documented in this file. +## [0.0.6] - 2019-02-11+### Fixed+- EWKB toByteString was missing SRID [https://github.com/indicatrix/wkt-geom/pull/9].+ ## [0.0.5] - 2019-01-07 ### Added - Add serializers back into ByteString [https://github.com/indicatrix/wkt-geom/issues/7].
src/Data/Ewkb.hs view
@@ -34,7 +34,10 @@ parseHexByteString :: Hex.Hex -> Either String Geospatial.GeospatialGeometry parseHexByteString = Hex.safeConvert parseByteString -toByteString :: Endian.EndianType -> Geospatial.GeospatialGeometry -> LazyByteString.ByteString-toByteString endianType =+-- |+-- Produce the binary representation of EWKB given its EndianType (Little or Big - Intel is Little) and SRID (4326 for example).+toByteString :: Endian.EndianType -> EwkbGeometry.SridType -> Geospatial.GeospatialGeometry -> LazyByteString.ByteString+toByteString endianType sridType = ByteStringBuilder.toLazyByteString . WkbGeospatial.builderGeospatialGeometry- EwkbGeometry.builderWkbGeom endianType+ mkBuilder endianType+ where mkBuilder eType gType = EwkbGeometry.builderEwkbGeom eType (EwkbGeometry.EwkbGeom gType sridType)
src/Data/Wkb.hs view
@@ -34,6 +34,8 @@ parseHexByteString :: Hex.Hex -> Either String Geospatial.GeospatialGeometry parseHexByteString = Hex.safeConvert parseByteString +-- |+-- Produce the binary representation of WKB given its EndianType (Little or Big - Intel is Little). Use EWKB when you know the SRID. toByteString :: Endian.EndianType -> Geospatial.GeospatialGeometry -> LazyByteString.ByteString toByteString endianType = ByteStringBuilder.toLazyByteString . WkbGeospatial.builderGeospatialGeometry Geometry.builderWkbGeom endianType
+ test/Data/Internal/Ewkb/LineSpec.hs view
@@ -0,0 +1,28 @@+{-# LANGUAGE OverloadedStrings #-}++module Data.Internal.Ewkb.LineSpec where++import Test.Hspec (Spec, describe)++import qualified Data.SpecHelper as SpecHelper++spec :: Spec+spec = do+ testEwkbLineParsing+ testEwkbMultiLineParsing+++-- Test Wkb Line Parsing++testEwkbLineParsing :: Spec+testEwkbLineParsing =+ describe "Test ewkb line parsing" $+ SpecHelper.testRoundTripEwkbGeometryParsing "line" SpecHelper.genLine+++-- Test Wkb MultiLine Parsing++testEwkbMultiLineParsing :: Spec+testEwkbMultiLineParsing =+ describe "Test ewkb multiline parsing" $+ SpecHelper.testRoundTripEwkbGeometryParsing "multiLine" SpecHelper.genMultiLine
+ test/Data/Internal/Ewkb/PointSpec.hs view
@@ -0,0 +1,28 @@+{-# LANGUAGE OverloadedStrings #-}++module Data.Internal.Ewkb.PointSpec where++import Test.Hspec (Spec, describe)++import qualified Data.SpecHelper as SpecHelper++spec :: Spec+spec = do+ testEwkbPointParsing+ testEwkbMultiPointParsing+++-- Test Wkb Point Parsing++testEwkbPointParsing :: Spec+testEwkbPointParsing =+ describe "Test ewkb point parsing" $+ SpecHelper.testRoundTripEwkbGeometryParsing "point" SpecHelper.genPoint+++-- Test Wkb MultiPoint Parsing++testEwkbMultiPointParsing :: Spec+testEwkbMultiPointParsing =+ describe "Test ewkb multipoint parsing" $+ SpecHelper.testRoundTripEwkbGeometryParsing "multipoint" SpecHelper.genMultiPoint
test/Data/SpecHelper.hs view
@@ -4,12 +4,15 @@ import qualified Data.LinearRing as LinearRing import qualified Data.LineString as LineString import qualified Data.Sequence as Sequence+import qualified Data.Word as Word import qualified HaskellWorks.Hspec.Hedgehog as HedgehogHspec import Hedgehog import qualified Hedgehog.Gen as Gen import qualified Hedgehog.Range as Range import Test.Hspec (Spec, it) +import qualified Data.Ewkb as Ewkb+import qualified Data.Internal.Ewkb.Geometry as EwkbGeometry import qualified Data.Internal.Wkb.Endian as Endian import qualified Data.Internal.Wkb.Geometry as Geometry import qualified Data.Wkb as Wkb@@ -18,21 +21,35 @@ type GeometryGenerator = Gen Geospatial.GeoPositionWithoutCRS -> Gen Geospatial.GeospatialGeometry -roundTripWkb :: Endian.EndianType -> Geospatial.GeospatialGeometry -> Either String Geospatial.GeospatialGeometry-roundTripWkb endianType = Wkb.parseByteString . Wkb.toByteString endianType- testRoundTripWkbGeometryParsing :: String -> GeometryGenerator -> Spec testRoundTripWkbGeometryParsing name generator =- mapM_ (testRoundTripWkbGeometryParsing' name generator) coordPointGenerators+ mapM_ (testRoundTripGeometryParsing' roundTripWkb name generator) coordPointGenerators -testRoundTripWkbGeometryParsing' :: String -> GeometryGenerator -> (Geometry.CoordinateType, Gen Geospatial.GeoPositionWithoutCRS) -> Spec-testRoundTripWkbGeometryParsing' name generator (coordType, genCoordPoint) =+testRoundTripEwkbGeometryParsing :: String -> GeometryGenerator -> Spec+testRoundTripEwkbGeometryParsing name generator =+ mapM_ (testRoundTripGeometryParsing' roundTripEwkb name generator) coordPointGenerators++testRoundTripGeometryParsing' :: (Endian.EndianType -> Geospatial.GeospatialGeometry -> PropertyT IO ()) -> String -> GeometryGenerator -> (Geometry.CoordinateType, Gen Geospatial.GeoPositionWithoutCRS) -> Spec+testRoundTripGeometryParsing' f name generator (coordType, genCoordPoint) = it ("round trips wkb " ++ name ++ ": " ++ show coordType) $ HedgehogHspec.require $ property $ do geometry <- forAll $ generator genCoordPoint endianType <- forAll genEndianType- roundTripWkb endianType geometry === Right geometry+ f endianType geometry +roundTripWkb :: MonadTest m => Endian.EndianType -> Geospatial.GeospatialGeometry -> m ()+roundTripWkb endianType geometry =+ let+ p = Wkb.parseByteString . Wkb.toByteString endianType+ in+ p geometry === Right geometry++roundTripEwkb :: MonadTest m => Endian.EndianType -> Geospatial.GeospatialGeometry -> m ()+roundTripEwkb endianType geometry =+ let+ p = Ewkb.parseByteString . Ewkb.toByteString endianType (EwkbGeometry.Srid (4326 :: Word.Word32))+ in+ p geometry === Right geometry -- Generators
wkt-geom.cabal view
@@ -1,5 +1,5 @@ name: wkt-geom-version: 0.0.5+version: 0.0.6 synopsis: A parser of WKT, WKB and eWKB. description: Well Known Text (WKT), Well Known Binary (WKB) and the PostgreSQL extension Extended Well Know Binary (eWKB) are vector geometry representations. .@@ -8,7 +8,7 @@ homepage: https://github.com/indicatrix/wkt-geom#readme license: Apache-2.0 license-file: LICENSE-author: Andrew Newmnan, Dominic Endrei+author: Andrew Newman, Dominic Endrei maintainer: andrewfnewman@gmail.com copyright: 2017-2019 Wkt-Geom Project category: Data@@ -17,6 +17,11 @@ , CHANGELOG.md cabal-version: >=1.10 +flag error-check+ manual: True+ default: False+ description: Compile with error-checking+ library hs-source-dirs: src exposed-modules: Data.Ewkb@@ -56,6 +61,8 @@ type: exitcode-stdio-1.0 hs-source-dirs: test other-modules: Data.Internal.Ewkb.GeometrySpec+ , Data.Internal.Ewkb.LineSpec+ , Data.Internal.Ewkb.PointSpec , Data.Internal.Wkb.EndianSpec , Data.Internal.Wkb.GeometryCollectionSpec , Data.Internal.Wkb.GeometrySpec@@ -97,6 +104,8 @@ default-language: Haskell2010 ghc-options: -Wall -threaded+ if flag(error-check)+ ghc-options: -Werror source-repository head type: git