Skip to content

Instantly share code, notes, and snippets.

@perrygeo
perrygeo / ogrcat
Last active August 1, 2018 22:54
ogrcat: make line-delimited geojson features to stdout from any ogr vector datasource
#!/bin/bash
#
# ogrcat
# produces line-delimited geojson features
# Like `fio cat` but uses ogr2ogr under the hood
ECHO_FEATURES=""
ogr2ogr -f GeoJSON /vsistdout/ "$@" | while read line
@bugventure
bugventure / chain.js
Last active July 2, 2019 03:02
Express middleware chain implementation
module.exports = function chain() {
var steps = Array.apply(null, arguments);
return function middleware(req, res, next) {
(function dequeue() {
var step = steps.shift(),
callback = steps.length ? function (err) {
if (err) {
return next(err);
}
@juliensagot
juliensagot / NSBezierPath+cgPath.swift
Last active September 26, 2023 23:11
Convert NSBezierPath to CGPath (Swift 5.1, Xcode 11.3 (11C29))
extension NSBezierPath {
/// A `CGPath` object representing the current `NSBezierPath`.
var cgPath: CGPath {
let path = CGMutablePath()
let points = UnsafeMutablePointer<NSPoint>.allocate(capacity: 3)
if elementCount > 0 {
var didClosePath = true
@msbarry
msbarry / README.md
Last active December 24, 2025 16:02
Visvalingam vs. Douglas-Peucker

Two well-known algorithms for polyline simplification are the Douglas Peucker and Visvalingam algorithms.

The Douglas Peucker algorithm uses a recursive divide-and-conquer approach. It starts by drawing a straight line from the first point to the last point. Then it finds the intermediate point that is furthest away from the straight line and deems this the "most important" and splits the polyline into two halves at that point. This process is repeated on both halves until the distance of the intermediate point is below a certain threshold, after which all points on that sub-polyline are thrown away since they have a negligible impact on the overall shape.

The Visvalingam algorithm works from the inside-out. It starts by computing the area of the triangle formed by each consecutive three points along the polyline. Then the midpoint of the triangle with the least area is thrown out since those three points are the closest to colinear and the area of triangles on either side are recomputed. The process

@cowboy
cowboy / bocoup-training-more-efficient-event-handlers.js
Created February 12, 2013 21:38
Bocoup training: More Efficient jQuery Event Handlers
// Straightforward + simple.
$("button").on("click", function(event) {
event.preventDefault();
var button = $(this);
var numberElem = button.find(".number");
var number = Number(numberElem.text()) - 1;
numberElem.text(number);
if (number === 0) {
button.prop("disabled", true);
button.off("click");