dart_jts 0.3.0+1 copy "dart_jts: ^0.3.0+1" to clipboard
dart_jts: ^0.3.0+1 copied to clipboard

An ongoing effort to port the Java Topology Suite to the dart programming language and make it available to its mobile, dektop and web environments.

example/lib/main.dart

import 'package:dart_jts/dart_jts.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'dart_jts example',
      home: ExamplePage(),
    );
  }
}

class ExamplePage extends StatefulWidget {
  @override
  _ExamplePageState createState() => _ExamplePageState();
}

class _ExamplePageState extends State<ExamplePage> {
  double buffer = 50;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Dart_JTS Example - Polygon Offset'),
      ),
      body: Center(
        child: ExampleShape(
          buffer: buffer,
        ),
      ),
      bottomNavigationBar: BottomAppBar(
          child: SizedBox(
        height: 50,
        child: Slider(
          min: 0,
          max: 100,
          onChanged: (val) {
            setState(() {
              buffer = val;
            });
          },
          value: buffer,
          divisions: 100,
          label: "${buffer.floor()}",
        ),
      )),
    );
  }
}

class ExampleShape extends StatelessWidget {
  final double? buffer;
  ExampleShape({this.buffer});

  @override
  Widget build(BuildContext context) {
    return CustomPaint(
        painter: ExampleShapePainter(buffer: buffer, shape: [
      Offset(-90, -200),
      Offset(120, -25),
      Offset(90, 110),
      Offset(0, 0),
      Offset(-120, 25),
    ]));
  }
}

class ExampleShapePainter extends CustomPainter {
  final double? buffer;
  final List<Offset>? shape;

  ExampleShapePainter({this.buffer, this.shape})
      : assert(shape!.length == 0 || shape.length >= 4);

  @override
  void paint(Canvas canvas, Size size) {
    Paint bodyPaint = Paint()
      ..color = Colors.blue
      ..style = PaintingStyle.fill;

    Paint inflatedPaint = Paint()
      ..color = Colors.orange
      ..style = PaintingStyle.fill;

    /// Draw inflated shape
    if (shape!.length >= 4) {
      GeometryFactory geometryFactory = GeometryFactory.defaultPrecision();

      /// Convert [List<Offset>] to [List<Coordinate>] to work with dart_jts
      List<Coordinate> coords =
          shape!.map((element) => Coordinate(element.dx, element.dy)).toList();
      coords.add(coords.first);

      /// First and last coord MUST be identical
      LinearRing linearRing = LinearRing.withFactory(coords, geometryFactory);

      /// Create the polygon with no holes (hence the empty list as the 2nd argument)
      Polygon polygon = geometryFactory.createPolygon(linearRing, []);

      polygon = polygon.buffer(buffer!) as Polygon;
      List<Offset> inflated = polygon.shell!.points
          .toCoordinateArray()
          .map((e) => Offset(e.x, e.y))
          .toList();

      Path inflatedPath = Path()..addPolygon(inflated, true);

      debugPrint(inflated.toString());
      canvas.drawPath(inflatedPath, inflatedPaint);
    }

    /// Draw normal shape
    Path path = Path();
    path.addPolygon(shape!, true);
    canvas.drawPath(path, bodyPaint);
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) => true;
}
29
likes
140
points
5.13k
downloads

Publisher

verified publisherhydrologis.com

Weekly Downloads

An ongoing effort to port the Java Topology Suite to the dart programming language and make it available to its mobile, dektop and web environments.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

collection, intl

More

Packages that depend on dart_jts