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;
}
copied to clipboard
30
likes
140
points
9.64k
downloads

Publisher

verified publisherhydrologis.com

Weekly Downloads

2024.09.26 - 2025.04.10

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