Skip to main content

A utility for splitting an AOI into multiple tasks.

Project description

Area Splitter

HOT

A utility for splitting an AOI into multiple tasks.

Package version Downloads License


📖 Documentation: https://hotosm.github.io/fmtm-splitter/

🖥️ Source Code: https://github.com/hotosm/field-tm/blob/main/src/backend/packages/area-splitter


This is a program to split polygons into tasks using a variety of algorithms. It is a class that can be used by other projects, but also a standalone program. It was originally developed for the FMTM project, but then converted so it can be used by multiple projects.

The class takes GeoJson Polygon as an input, and returns a GeoJson file Multipolygon of all the task boundaries.

Installation

pip install area-splitter

Note Postgis should have SFCGAL enabled:

CREATE EXTENSION IF NOT EXISTS postgis_sfcgal WITH SCHEMA public;

Splitting Types

Split By Square

The default is to split the polygon into squares. The default dimension is 50 meters, but that is configurable. The outer square are clipped to the AOI boundary.

Split By Feature

The split by feature uses highway data extracted from OpenStreetMap, and uses it to generate non square task boundaries. It can also be adjusted to use the number of buildings in a task to adjust it's size.

Split By Feature

Custom SQL query

It is also possible to supply a custom SQL query to generate the tasks.

Usage In Code

  • Either the FMTMSplitter class can be used directly, or the wrapper/ helper functions can be used for splitting.

By square:

import json
from area_splitter.splitter import split_by_square

aoi = json.load("/path/to/file.geojson")

split_features = split_by_square(
    aoi,
    meters=100,
)

The FMTM splitter algorithm:

import json
from area_splitter.splitter import split_by_sql

aoi = json.load("/path/to/file.geojson")
osm_extracts = json.load("/path/to/file.geojson")
db = "postgresql://postgres:postgres@localhost/postgres"

split_features = split_by_sql(
    aoi,
    db,
    num_buildings=50,
    osm_extract=osm_extracts,
)

Database Connections

  • The db parameter can be a connection string to start a new connection.
  • Or an existing database connection can be reused.
  • To do this, either the psycopg connection, or a DBAPI connection string must be passed:

psycopg example:

import psycopg
from area_splitter.splitter import split_by_sql

db = psycopg.connect("postgresql://postgres:postgres@localhost/postgres")

split_features = split_by_sql(
    aoi,
    db,
    num_buildings=50,
    osm_extract=osm_extracts,
)

Usage Via CLI

Options:

-h, --help                       show this help message and exit
-v, --verbose                    verbose output
-o OUTFILE, --outfile OUTFILE    Output file from splitting
-m METERS, --meters METERS       Size in meters if using square splitting
-b BOUNDARY, --boundary BOUNDARY Polygon AOI
-s SOURCE, --source SOURCE       Source data, Geojson or PG:[dbname]
-c CUSTOM, --custom CUSTOM       Custom SQL query for database

This program splits a Polygon (the Area Of Interest) The data source for existing data can'be either the data extract used by the XLSForm, or a postgresql database.

Examples:

area-splitter -b AOI
area-splitter -v -b AOI -s data.geojson
area-splitter -v -b AOI -s PG:colorado

# Where AOI is the boundary of the project as a polygon
# And OUTFILE is a MultiPolygon output file,which defaults to fmtm.geojson
# The task splitting defaults to squares, 50 meters across

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

area_splitter-3.0.1.tar.gz (138.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

area_splitter-3.0.1-py3-none-any.whl (34.2 kB view details)

Uploaded Python 3

File details

Details for the file area_splitter-3.0.1.tar.gz.

File metadata

  • Download URL: area_splitter-3.0.1.tar.gz
  • Upload date:
  • Size: 138.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.4

File hashes

Hashes for area_splitter-3.0.1.tar.gz
Algorithm Hash digest
SHA256 f2b8f9f1fc4ae9b8419faba082cd4ef06d6766ede94d9b4ed3bfae698db7d64d
MD5 cee8a690c9ee5096239aba6bcd6e1c75
BLAKE2b-256 c5742cb3591560da450e321374d339013554923f4e0884ad88e3cf1b7a84d798

See more details on using hashes here.

File details

Details for the file area_splitter-3.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for area_splitter-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4f6569b634dce04315f5526e350bc4e149a5462ac784788a80ace9301d525fa5
MD5 cab5cfa94c5133ee0546dc50de18d192
BLAKE2b-256 265fd6ec6f2982836737060512de560c374d2ed8b950aa0ab50a6285cfb49e3c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page