Skip to content

Latest commit

 

History

History
119 lines (99 loc) · 5.29 KB

File metadata and controls

119 lines (99 loc) · 5.29 KB

0.3.2

Added

  • Added GpkgConnection for low-level GeoPackage SQL access with read-only and read-write modes, parameterized select/execute, and transaction support.
  • Added hasTable() helpers to GpkgConnection and GpkgReader.

0.3.1

Bug Fixes

  • WKB encoder: wrong geometry type for multi-part polylinesMultiLineString was encoded with WKB type 3002 (LineStringZM) instead of 5 (MultiLineString). This produced corrupt R-Tree spatial index entries (coordinates at 0.0 → Infinity), making affected features invisible in viewport queries.
  • WKB encoder: buffer overflow on multi-ring polygons with unclosed rings_ensureClosed() could add extra points not accounted for in the buffer size calculation, causing a RangeError crash.
  • WKB encoder: empty MultiPoint encoded as phantom Point(0,0) — replaced with a proper empty MultiPoint WKB (0 sub-points) so no phantom geometry pollutes the spatial index.
  • Replaced magic WKB type literals (4, 5) with named constants to prevent future type confusion bugs.

0.3.0

  • Added GeoPackage support for reading feature tables, inspecting metadata, streaming typed features, and reading full tables
  • Added GeoPackage writing helpers with explicit schema definition and streaming row insertion
  • Added GeoPackage spatial index helpers for building and validating R-Tree indexes
  • Added ShapefileStreamReader for streaming shapefile reads
  • Added polygon hole support
  • Improved WKB decoding, including Z and M handling
  • Improved SQL identifier safety and resource cleanup in GeoPackage workflows

0.2.4

fix the incorrect meta package version

0.2.3

Breaking Changes

  • ShapeProjectionType enum removed — the enum hard-coded a handful of EPSG codes and silently returned none for any unrecognised CRS
  • Shapefile.projectionType removed, replaced by Shapefile.epsgCode (int?) — null means no AUTHORITY tag was found in the .prj file
  • CShapeProjectionFile.projectionType removed, replaced by CShapeProjectionFile.epsgCode (int?)

Bug Fixes

  • readPrj() no longer defaults to WGS84 (EPSG:4326) when no AUTHORITY tag is present; it now correctly returns null
  • readPrj() now uses the last AUTHORITY["EPSG","…"] match, which is the coordinate system authority per the WKT CRS spec

Migration Guide

// Before (0.2.2)
if (shapefile.projectionType != ShapeProjectionType.none) {
  print(shapefile.projectionType.epsgCode); // String
}

// After (0.2.3)
if (shapefile.epsgCode != null) {
  print(shapefile.epsgCode); // int
}

0.2.2

Breaking Changes

  • Optional M values: M (measure) values are now optional per ESRI shapefile spec
    • BoundsM: minM and maxM are now nullable (double?)
    • BoundsZ: minM and maxM are now nullable (double?)
    • PolylineM, PolygonM, MultiPointM: arrayM is now nullable (List<double>?)
    • PolylineZ, PolygonZ, MultiPointZ: arrayM is now nullable (List<double>?)
    • Added hasM getter to check if M values are present
    • Note: PointM and PointZ still require M values (not optional for single points)
  • BoundsZ constructor order changed: Z values now come before optional M values
    • Old: BoundsZ(minX, minY, maxX, maxY, minM, maxM, minZ, maxZ)
    • New: BoundsZ(minX, minY, maxX, maxY, minZ, maxZ, [minM, maxM])

0.2.1

  • Relaxed meta dependency constraint (^1.15.0) for Flutter SDK compatibility
  • Updated README examples to use new API (read(), writeComplete())
  • Clarified MultiPatch is not yet implemented

0.2.0

Breaking Changes

  • Error handling refactored: Methods no longer return bool for success/failure
    • reader()read() (now returns void, throws on error)
    • writer()write() (now returns void, throws on error)
    • writerEntirety()writeComplete() (now returns void, throws on error)
    • analysis()analyze() (now returns void, throws on error)
  • All I/O methods now throw ShapefileException subclasses instead of returning false
  • Changed PointZ constructor parameter order for consistency
  • Removed minM/maxM parameters from methods - now using proper BoundsM classes
  • Changed type dependencies to immutable

Improvements

  • Switched bounds to use multiple classes (Bounds, BoundsM, BoundsZ) for type safety
  • Implemented MultiPoint, MultiPointM, and MultiPointZ in analyze() method
  • Reordered analyze() method cases for cleaner code organization
  • Improved test coverage for all geometry types (PointM, PolylineM/Z, PolygonM/Z)
  • Cleaned up duplicate tests and improved test organization
  • Added 120-character line width formatting rule in analysis_options.yaml
  • Minor README fixes
  • Various bug fixes

Migration Guide

// Before (0.1.0)
if (shapefile.reader('path.shp')) {
  // success
} else {
  // error
}

// After (0.2.0)
try {
  shapefile.read('path.shp');
  // success
} on ShapefileException catch (e) {
  // error handling
}

0.1.0

  • Initial release of ShapeKit
  • Complete support for reading and writing ESRI Shapefiles (.shp, .shx, .dbf, .prj)
  • Support for all 13 standard shapefile geometry types
  • Full dBASE III+ (.dbf) file support for feature attributes
  • UTF-8 encoding support
  • Type-safe geometry classes with immutable data structures
  • Clean architecture with well-organized codebase