1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-geokit

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Geokit

Geokit — это набор инструментов PHP для решения задач, связанных с географией, таких как:

  • Расчёты расстояния.
  • Расчёт курса, средней точки и конечной точки.
  • Расчёты прямоугольной ограничивающей рамки.

Установка

Установите последнюю версию с помощью Composer.

composer require geokit/geokit

Проверьте страницу Packagist для всех доступных версий.

Справочник

Расстояние

Экземпляр Distance позволяет удобно представить единицу измерения расстояния.

use Geokit\Distance;

$distance = new Distance(1000); // По умолчанию метры
// или
$distance = new Distance(1, Distance::UNIT_KILOMETERS);

$meters = $distance->meters();
$kilometers = $distance->kilometers();
$miles = $distance->miles();
$yards = $distance->yards();
$feet = $distance->feet();
$inches = $distance->inches();
$nauticalMiles = $distance->nautical();

Расстояние также можно создать из строки с необязательной единицей измерения.

use Geokit\Distance;

$distance = Distance::fromString('1000'); // По умолчанию метры
$distance = Distance::fromString('1000m');
$distance = Distance::fromString('1km');
$distance = Distance::fromString('100 miles');
$distance = Distance::fromString('100 yards');
$distance = Distance::fromString('1 foot');
$distance = Distance::fromString('1 inch');
$distance = Distance::fromString('234nm');

Позиция

Position — это фундаментальная конструкция, представляющая географическое положение в координатах x (или longitude) и y (или latitude).

Обратите внимание, что координаты x/y сохраняются как есть, а longitude/latitude нормализуются.

  • Долгота находится в диапазоне от -180 до 180 градусов включительно. Долготы выше 180 или ниже -180 нормализуются. Например, 480, 840 и 1200 будут нормализованы до 120 градусов.
  • Широта находится в диапазоне от -90 до 90 градусов включительно. Широты выше 90 или ниже -90 нормализуются. Например, 100 будет нормализовано до 80 градусов.
use Geokit\Position;

$position = new Position(181, 91);

$x = $position->x(); // Возвращает 181.0
$y = $position->y(); // Возвращает 91.0
$longitude = $position->longitude(); // Возвращает -179.0, нормализованное значение
$latitude = $position->latitude(); // Возвращает 89.0, нормализованное значение

Ограничивающая рамка

Экземпляр BoundingBox представляет собой прямоугольник в географических координатах, включая тот, который пересекает 180-градусный меридиан долготы.

Он построен на основе левого нижнего (юго-западного) и правого верхнего (северо-восточного) углов.

use Geokit\BoundingBox;
use Geokit\Position;

$southWest = Position::fromXY(2, 1);
$northEast = Position::fromXY(2, 1);

$boundingBox = BoundingBox::fromCornerPositions($southWest, $northEast);

$southWestPosition = $boundingBox->southWest();
$northEastPosition = $boundingBox->northEast();

$center = $boundingBox->center();

$span = $boundingBox->span();

$boolean = $boundingBox->contains($position);

$newBoundingBox = $boundingBox->extend($position);
$newBoundingBox = $boundingBox->union($otherBoundingBox);

С помощью методов expand() и shrink() вы можете расширить или уменьшить экземпляр BoundingBox на расстояние.

use Geokit\Distance;

$expandedBoundingBox = $boundingBox->expand(
    Distance::fromString('10km')
);

$shrinkedBoundingBox = $boundingBox->shrink(
    Distance::fromString('10km')
);

Метод toPolygon() преобразует... Преобразование BoundingBox в эквивалентный Polygon

$polygon = $boundingBox->toPolygon();

Polygon

Экземпляр Polygon представляет двумерную форму соединённых отрезков и может быть как замкнутым (первая и последняя точки совпадают), так и разомкнутым.

use Geokit\BoundingBox;
use Geokit\Polygon;
use Geokit\Position;

$polygon = Polygon::fromPositions(
    Position::fromXY(0, 0),
    Position::fromXY(1, 0),
    Position::fromXY(1, 1)
);

$closedPolygon = $polygon->close();

/** @var Position $position */
foreach ($polygon as $position) {
}

$polygon->contains(Position::fromXY(0.5, 0.5)); // true

/** @var BoundingBox $boundingBox */
$boundingBox = $polygon->toBoundingBox();

Функции

Geokit предоставляет несколько функций для выполнения географических расчётов.

Расчёты расстояния

  • distanceHaversine(Position $from, Position $to): Вычисляет приблизительное расстояние по уровню моря между двумя точками по формуле Хаверсайна.
  • distanceVincenty(Position $from, Position $to): Рассчитывает геодезическое расстояние между двумя точками с использованием обратной формулы Винсенти для эллипсоидов.
use function Geokit\distanceHaversine;
use function Geokit\distanceVincenty;

$distance1 = distanceHaversine($from, $to);
$distance2 = distanceVincenty($from, $to);

Обе функции возвращают экземпляр Distance.

Преобразования

Функция circle() вычисляет замкнутый круг Polygon с учётом центра, радиуса и шагов для точности.

use Geokit\Distance;
use Geokit\Position;
use function Geokit\circle;

$circlePolygon = circle(
    Position::fromXY(8.50207515, 49.50042565), 
    Distance::fromString('5km'),
    32
);

Другие расчёты

Другие полезные функции:

  • heading(Position $from, Position $to): Вычисляет (начальный) курс от первой точки до второй точки в градусах.
  • midpoint(Position $from, Position $to): Рассчитывает промежуточную точку на геодезической линии между двумя заданными точками.
  • endpoint(Position $start, float $heading, Geokit\Distance $distance): Определяет конечную точку вдоль геодезической, учитывая начальный курс и расстояние, исходя из заданной начальной точки.

License

Copyright (c) 2011-2022 Jan Sorgalla. Released under the MIT License.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Geokit — это набор инструментов PHP, предназначенный для решения задач, связанных с географией, таких как расчёт расстояний. Развернуть Свернуть
PHP
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-geokit.git
git@api.gitlife.ru:oschina-mirror/mirrors-geokit.git
oschina-mirror
mirrors-geokit
mirrors-geokit
main