A plugin of maptalks.js to find self-intersections in a polygon or multipolygon
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
demo
dist
test
.babelrc
.editorconfig
.eslintrc
.gitignore
.npmignore
LICENSE
README.md
circle.yml
gulpfile.js
index.js
karma.config.js
package.json

README.md

maptalks.isects

CircleCI NPM Version

A plugin to find self-intersections in a Polygon or MultiPolygon, based on 2d-polygon-self-intersections.

screenshot

Install

  • Install with npm: npm install maptalks.isects.
  • Download from dist directory.
  • Use unpkg CDN: https://unpkg.com/maptalks.isects/dist/maptalks.isects.min.js

Usage

As a plugin, maptalks.isects must be loaded after maptalks.js in browsers.

<script type="text/javascript" src="https://unpkg.com/maptalks/dist/maptalks.min.js"></script>
<script type="text/javascript" src="https://unpkg.com/maptalks.isects/dist/maptalks.isects.min.js"></script>
<script>
//find intersections of polygon
var polygon = new maptalks.Polygon([
    [-10, 0],
    [10, 0],
    [10, 10],
    [1, 10],
    [1, -1],
    [-1, -1],
    [-1, 10],
    [-10, 1]
])
.addTo(layer);

var sects = polygon.isects();

//find intersections of MultiPolygon
var multiPolygon = new maptalks.MultiPolygon([
      [
          [0, 20],
          [20, 20],
          [20, 30],
          [11, 30],
          [11, 11],
          [9, 11],
          [9, 30],
          [0, 21]
      ],
      [
          [-20, 20],
          [0, 20],
          [0, 30],
          [-9, 30],
          [-9, 11],
          [-11, 11],
          [-11, 30],
          [-20, 21]
      ]
  ], {
    symbol : {
      'polygonFill' : '#00f'
    }
  }).addTo(layer);

var mSects = multiPolygon.isects();
</script>

Supported Browsers

IE 9-11, Chrome, Firefox, other modern and mobile browsers.

Examples

API Reference

isects extends Polygon class and MultiPolygon class by adding a new method isects to find self-intersections.

isects()

Find self-intersections

var isects = polygon.isects();
var isects2 = multiPolygon.isects();

Returns Array[] an array containing ring indexes with self-intersections and intersections' coordinates, e.g.

var polygon = new maptalks.Polygon([
    [-10, 0],
    [10, 0],
    [10, 10],
    [1, 10],
    [1, -1],
    [-1, -1],
    [-1, 10],
    [-10, 1]
]);
var sects = polygon.isects();
[
  //[{ring index}, [{coordinates of intersections}]]
  [0, [[1,0], [-1,0]]]
]
//find intersections of MultiPolygon
var multiPolygon = new maptalks.MultiPolygon([
      [
          [0, 20],
          [20, 20],
          [20, 30],
          [11, 30],
          [11, 11],
          [9, 11],
          [9, 30],
          [0, 21]
      ],
      [
          [-20, 20],
          [0, 20],
          [0, 30],
          [-9, 30],
          [-9, 11],
          [-11, 11],
          [-11, 30],
          [-20, 21]
      ]
  ])
var mSects = multiPolygon.isects();
[
  //[{polygon index}, [[{ring index}, [{coordinates of intersections}]]]]
  [0,[[0,[[11,20],[9,20]]]]],
  [1,[[0,[[-9,20],[-11,20]]]]]
]

Contributing

We welcome any kind of contributions including issue reportings, pull requests, documentation corrections, feature requests and any other helps.

Develop

The only source file is index.js.

It is written in ES6, transpiled by babel and tested with mocha and expect.js.

Scripts

  • Install dependencies
$ npm install
  • Watch source changes and generate runnable bundle repeatedly
$ gulp watch
  • Tests
$ npm test
  • Watch source changes and run tests repeatedly
$ gulp tdd
  • Package and generate minified bundles to dist directory
$ gulp minify
  • Lint
$ npm run lint