Skip to main content

object-oriented spherical geometry

Project description

STScI Logo STScI Name

sphersgeo

build tests Powered by STScI

object-oriented spherical geometry

[!IMPORTANT] sphersgeo is still in development and does NOT currently implement all of the functionality provided by other geo packages such as geo or Shapely.

[!NOTE] Intersections between geometries are NOT rigorous; the .intersection() function will ONLY return the lower order of geometry being compared, and does NOT handle degenerate cases / touching geometries.

Installation

pip install sphersgeo

Usage

Euclidean geometry packages classify geometries into points, linestrings, and polygons (along with multi-variations: multipoints, multilinestrings, and multipolygons). Spherical geometry analogues are spherical points, arcstrings, and spherical polygons.

Full class definitions can be found in src/sphersgeo.pyi.

Points on a sphere

Spherical points are represented internally as 3-dimensional Euclidean points (X, Y, Z) relative to the origin of the unit sphere.

import sphersgeo

# define a point on the sphere in angular coordinates (longitude and latitude)
a = sphersgeo.SphericalPoint((60.0, 30.0))
b = sphersgeo.SphericalPoint((60.0, 0.0))
c = sphersgeo.SphericalPoint((-30.0, -30.0))

# ... or in Euclidean coordinates (X, Y, Z)
a = sphersgeo.SphericalPoint((0.43301270189221946, 0.75, 0.5))
b = sphersgeo.SphericalPoint((0.5, 0.8660254037844386, 0.0))
c = sphersgeo.SphericalPoint((0.75, -0.4330127018922193, -0.5))
d = sphersgeo.SphericalPoint((0.0, 0.0, 1.0))
e = sphersgeo.SphericalPoint((0.0, 0.0, -1.0))

# collate multiple points together by passing lists of angular or Euclidean coordinates
ab = sphersgeo.MultiSphericalPoint([(60.0, 30.0), (60.0, 0.0)])
ab = sphersgeo.MultiSphericalPoint(
    [(0.43301270189221946, 0.75, 0.5), (0.5, 0.8660254037844386, 0.0)]
)
de = sphersgeo.MultiSphericalPoint(
    [
        (0.0, 0.0, 1.0),
        (0.0, 0.0, -1.0),
    ]
)

# ... or a Numpy array of coordinates
import numpy as np
ab = sphersgeo.MultiSphericalPoint(np.array([(60.0, 30.0), (60.0, 0.0)]))
ab = sphersgeo.MultiSphericalPoint(
    np.array([(0.43301270189221946, 0.75, 0.5), (0.5, 0.8660254037844386, 0.0)])
)

# ... or a list of SphericalPoint objects
abcde = sphersgeo.MultiSphericalPoint([a, b, c, d, e])

Strings of great circle arcs on a sphere

A great circle arcs is the shortest geodesic distance over the surface of the sphere between any two points. Arcstrings are comprised of an ordered collection of spherical points. Arcstrings can also be closed, in which case the final point is considered as connected back to the first point.

import sphersgeo

# define an arcstring on the sphere by passing angular or Euclidean coordinates
abc = sphersgeo.ArcString([(60.0, 0.0), (60.0, 30.0), (-30.0, -30.0)])
de = sphersgeo.ArcString(
    [
        (0.0, 0.0, 1.0),
        (0.0, 0.0, -1.0),
    ]
)

# ... or a list of SphericalPoint objects
abc = sphersgeo.ArcString(
    [
        sphersgeo.SphericalPoint((60.0, 0.0)),
        sphersgeo.SphericalPoint((60.0, 30.0)),
        sphersgeo.SphericalPoint((-30.0, -30.0)),
    ],
    closed=True,
)
de = sphersgeo.ArcString(
    [
        sphersgeo.SphericalPoint((0.0, 0.0, 1.0)),
        sphersgeo.SphericalPoint((0.0, 0.0, -1.0)),
    ]
)

# collate arcstrings into a MultiArcString by passing the same inputs you would to the individual objects
abc_de = sphersgeo.MultiArcString(
    [
        [(60.0, 0.0), (60.0, 30.0), (-30.0, -30.0)],
        [
            (0.0, 0.0, 1.0),
            (0.0, 0.0, -1.0),
        ],
    ]
)

# ... or a list of ArcString objects
abc_de = sphersgeo.MultiArcString([abc, de])

Polygons on a sphere

Spherical polygons are comprised of

  1. closed arcstring that represents the outer boundary, and
  2. a sample point that defines which side of the closed spherical region is "inside" the boundary.

If the "inside point" is not given, the smaller of the two regions split by the boundary will be assigned to be the "inside".

[!NOTE] Polygons in sphersgeo do NOT have holes.

import sphersgeo

# define a spherical polygon by passing angular or Euclidean coordinates to form the boundary
abc = sphersgeo.SphericalPolygon([(60.0, 0.0), (60.0, 30.0), (-30.0, -30.0)])
abc = sphersgeo.SphericalPolygon(
    [
        (0.43301270189221946, 0.75, 0.5),
        (0.5, 0.8660254037844386, 0.0),
        (0.75, -0.4330127018922193, -0.5),
    ]
)

# ... or pass an ArcString object (the arcstring is assumed to be closed)
abc = sphersgeo.SphericalPolygon(
    sphersgeo.ArcString([(60.0, 0.0), (60.0, 30.0), (-30.0, -30.0)])
)

# collate multiple polygons into a MultiSphericalPolygon by passing the same inputs you would to the individual objects
abc_def = sphersgeo.MultiSphericalPolygon(
    [
        [(60.0, 30.0), (60.0, 0.0), (-30.0, -30.0)],
        [
            (0.0, 0.0, 1.0),
            (0.0, 0.0, -1.0),
            (1.0, 1.0, 0.0),
        ],
    ]
)

# ... or a list of SphericalPolygon objects
abc_def = sphersgeo.MultiSphericalPolygon(
    [
        sphersgeo.SphericalPolygon([(60.0, 30.0), (60.0, 0.0), (-30.0, -30.0)]),
        sphersgeo.SphericalPolygon(
            [
                (0.0, 0.0, 1.0),
                (0.0, 0.0, -1.0),
                (1.0, 1.0, 0.0),
            ]
        ),
    ]
)

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

sphersgeo-0.0.3.tar.gz (7.8 MB view details)

Uploaded Source

Built Distributions

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

sphersgeo-0.0.3-cp311-abi3-musllinux_1_2_x86_64.whl (673.9 kB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ x86-64

sphersgeo-0.0.3-cp311-abi3-manylinux_2_28_x86_64.whl (600.7 kB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ x86-64

sphersgeo-0.0.3-cp311-abi3-macosx_11_0_arm64.whl (547.2 kB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

File details

Details for the file sphersgeo-0.0.3.tar.gz.

File metadata

  • Download URL: sphersgeo-0.0.3.tar.gz
  • Upload date:
  • Size: 7.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sphersgeo-0.0.3.tar.gz
Algorithm Hash digest
SHA256 330b7ba8cf8c78af6d89808f85c8c437779db36b468bcaf706bdd1df9f90edcf
MD5 5b855c9853d1429b06d4be813aba8f3a
BLAKE2b-256 59357e46db6cec1a6155000044e05066bdd90dfac864080ba0514b79a9cf0515

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphersgeo-0.0.3.tar.gz:

Publisher: build.yml on spacetelescope/sphersgeo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sphersgeo-0.0.3-cp311-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for sphersgeo-0.0.3-cp311-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 06cb13092524f58040d22ae54f150070dd0aeb4774a16a22fc9c433c258bbc0e
MD5 2671bcaca050597fe4c32a5669d1fc1d
BLAKE2b-256 3fa371482f955eb277713012577f6f3394e9ea3147b2b604fc61c9fd6ab59b57

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphersgeo-0.0.3-cp311-abi3-musllinux_1_2_x86_64.whl:

Publisher: build.yml on spacetelescope/sphersgeo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sphersgeo-0.0.3-cp311-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sphersgeo-0.0.3-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1c8074d13767e09d6e581890b16a14edda7a92e3aa425ec052551465ebd381c7
MD5 69ea1a2edfc57f6bc0e2031e49104a61
BLAKE2b-256 a5f20e693f14a26628a642c904a41c2cdb712ecdb8534fa07f0876bb0c1dc55f

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphersgeo-0.0.3-cp311-abi3-manylinux_2_28_x86_64.whl:

Publisher: build.yml on spacetelescope/sphersgeo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sphersgeo-0.0.3-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sphersgeo-0.0.3-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03f83292444dd7e4bdff3beb9a54aa6a907a6eaacb22a093d544ab53001e7e21
MD5 2b998543095699585178e1d9e65681a7
BLAKE2b-256 6d8835c6388ad4a59f357d7f1f3d3a02beccc59c4e127f6d3d05089d28f4ae9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for sphersgeo-0.0.3-cp311-abi3-macosx_11_0_arm64.whl:

Publisher: build.yml on spacetelescope/sphersgeo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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