Shapely.geometry.Point: примеры (PYTHON)

Работа с точечными геометриями в библиотеке Shapely
Раздел: Геометрия, Точки
shapely.geometry.Point(x: float, y: float, z: float=None): shapely.geometry.Point

Функция shapely.geometry.Point

Класс shapely.geometry.Point представляет собой точечный геометрический объект в двумерном пространстве. Он применяется для моделирования географических координат, позиций на плоскости, точек данных в системах координат. Этот класс является частью библиотеки Shapely, предназначенной для выполнения геометрических операций.

Конструктор класса принимает координаты точки в виде аргументов. Основные параметры:

  • x - координата по оси X (обязательный числовой аргумент).
  • y - координата по оси Y (обязательный числовой аргумент).
  • z - необязательная координата по оси Z для создания трехмерной точки.

Метод возвращает объект типа Point, который обладает стандартными свойствами геометрических объектов Shapely: area (всегда 0), length (всегда 0), bounds (кортеж с координатами минимума и максимума), coords (итератор по координатам), xy (кортеж массивов координат). Объект поддерживает операции пространственного анализа, такие как вычисление расстояния до других геометрий, проверка на пересечение или принадлежность.

Простые варианты использования

Создание точки с двумя координатами:

from shapely.geometry import Point
point_2d = Point(10, 20)
print(point_2d)
POINT (10 20)

Создание трехмерной точки:

point_3d = Point(5, 15, 25)
print(point_3d)
POINT Z (5 15 25)

Получение координат точки:

print(point_2d.x, point_2d.y)
print(list(point_2d.coords))
print(point_2d.xy)
10.0 20.0
[(10.0, 20.0)]
(array('d', [10.0]), array('d', [20.0]))

Расчет расстояния между точками:

from shapely.geometry import Point
point_a = Point(0, 0)
point_b = Point(3, 4)
distance = point_a.distance(point_b)
print(distance)
5.0

Похожие функции в Python

В библиотеке geopandas точки создаются аналогично через shapely.geometry.Point, но хранятся в GeoSeries для пространственных операций с данными. В библиотеке pyproj класс Proj используется для преобразования координат, а не для создания геометрии. Класс shapely.geometry.MultiPoint позволяет создавать коллекции точек. Для простых математических расчетов с координатами без геометрических операций достаточно использовать кортежи или списки.

Аналоги в других языках

В JavaScript библиотека Turf.js предоставляет функцию turf.point() для создания точки в формате GeoJSON:

const point = turf.point([10, 20]);
console.log(point);
{ type: 'Feature', geometry: { type: 'Point', coordinates: [10, 20] } }

В Java с использованием JTS создание точки выглядит так:

import org.locationtech.jts.geom.*;
GeometryFactory factory = new GeometryFactory();
Point point = factory.createPoint(new Coordinate(10, 20));

В C# с библиотекой NetTopologySuite:

var factory = new GeometryFactory();
var point = factory.CreatePoint(new Coordinate(10, 20));

В SQL (PostGIS) используются функции ST_Point или ST_MakePoint:

SELECT ST_MakePoint(10, 20);

В Golang библиотека orb реализует точку как срез:

import "github.com/paulmach/orb"
point := orb.Point{10, 20}

Основное отличие - в способе представления данных: Shapely использует объектный подход, тогда как в других языках часто применяются массивы или специализированные структуры.

Частые ошибки

Передача некорректного количества аргументов:

Point(10)  # Ошибка: ожидаются два аргумента
TypeError: Point() takes at least 2 arguments (1 given)

Использование нечисловых значений:

Point('ten', 20)
TypeError: float() argument must be a string or a real number, not 'str'

Обращение к несуществующему атрибуту z для двумерной точки:

point_2d = Point(10, 20)
print(point_2d.z)
AttributeError: 'Point' object has no attribute 'z'

Неправильный порядок координат (широта, долгота вместо долготы, широты):

point = Point(55.7558, 37.6173)  # Правильно для большинства GIS: (долгота, широта)
print(point)
POINT (55.7558 37.6173)

Эта ошибка концептуальная, а не синтаксическая, но она часто встречается при работе с географическими данными.

Изменения в последних версиях

В Shapely 2.0 произошла полная переработка библиотеки с переходом на использование массивов GEOS C API. Класс Point теперь наследуется от Geometry и поддерживает новые методы. Добавлена возможность создания точек непосредственно из массивов NumPy. В версии 2.0 изменилось внутреннее представление координат, что повысило производительность при массовом создании объектов.

Расширенные примеры

Создание точки из итерируемого объекта:

Пример python
coords = [30, 40]
point = Point(coords)
print(point)
POINT (30 40)

Использование точек в пространственных операциях:

Пример python
from shapely.geometry import Polygon, LineString
polygon = Polygon([(0, 0), (10, 0), (10, 10), (0, 10)])
point_inside = Point(5, 5)
point_outside = Point(15, 15)
print(point_inside.within(polygon))
print(point_outside.within(polygon))
True
False

Создание буфера вокруг точки:

Пример python
buffered = Point(0, 0).buffer(5)
print(buffered.area)
78.53981633974483

Преобразование точки в другие форматы:

Пример python
import json
point = Point(10, 20)
geojson = json.dumps(point.__geo_interface__)
print(geojson)
{"type": "Point", "coordinates": [10.0, 20.0]}

Использование точек в условиях:

Пример python
points = [Point(i, i*2) for i in range(5)]
filtered = [p for p in points if p.x > 2]
print(filtered)
[, ]

Работа с трехмерными точками:

Пример python
point_3d = Point(1, 2, 3)
print(point_3d.has_z)
print(point_3d.z)
True
3.0

Использование точек для создания более сложных геометрий:

Пример python
from shapely.geometry import MultiPoint
multipoint = MultiPoint([Point(0, 0), Point(1, 1), Point(2, 2)])
print(multipoint.convex_hull)
POLYGON ((0 0, 2 2, 1 1, 0 0))

питон shapely.geometry.Point function comments

En
Shapely.geometry.Point Create a point geometry