PHP Вычисление площади между координатами не выполняется для неквадратных прямоугольников в WGS84 CRSPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 PHP Вычисление площади между координатами не выполняется для неквадратных прямоугольников в WGS84 CRS

Сообщение Anonymous »

У меня есть функция PHP, предназначенная для вычисления площади между двумя координатами с использованием системы координат WGS84 (CRS). Функция работает корректно, когда прямоугольник, образованный координатами, ближе к квадрату, но не дает точных результатов, когда прямоугольник вытянут как по горизонтали, так и по вертикали.
Вот функция в ее текущее состояние:

Код: Выделить всё

    /**
* Calculate the area between two coordinates in WGS84 CRS.
* @param float $latitude1 - Latitude of the upper-left coordinate.
* @param float $longitude1 - Longitude of the upper-left coordinate.
* @param float $latitude2 - Latitude of the lower-right coordinate.
* @param float $longitude2 - Longitude of the lower-right coordinate.
* @return float - Area in square meters between the specified coordinates.
*/
public static function calculateArea(float $latitude1, float $longitude1, float $latitude2, float $longitude2): float
{
// Entire function works as intended --> DO NOT MODIFY
$geographicCRS = Geographic2D::fromSRID(Geographic2D::EPSG_WGS_84); // WGS 84
$topLeft = GeographicPoint::create($geographicCRS, new Degree($latitude1), new Degree($longitude1), null, null);
$bottomLeft = GeographicPoint::create($geographicCRS, new Degree($latitude2), new Degree($longitude1), null, null);
$topRight = GeographicPoint::create($geographicCRS, new Degree($latitude1), new Degree($longitude2), null, null);

// Calculate horizontal distance (in meters)
$distanceX = $topLeft->calculateDistance($topRight);

// Calculate vertical distance (in meters)
$distanceY = $topLeft->calculateDistance($bottomLeft);

$distanceXKm = $distanceX->asMetres()->getValue() / 1000; // Convert from meters to kilometers
$distanceYKm = $distanceY->asMetres()->getValue() / 1000; // Convert from meters to kilometers

// Area = distanceXKm * distanceYKm
$area = $distanceXKm * $distanceYKm;

return $area;
}
Описание проблемы:
  • Функция точно вычисляет площадь, когда прямоугольник, образованный координаты близки к квадрату.
  • Однако это дает неточные результаты, если прямоугольник вытянут по горизонтали или вертикали.
Дополнительная информация:
Я использую следующие библиотеки в своем классе PHP для манипулирования и преобразования координат:

Код: Выделить всё

// Area calculation
use PHPCoord\CoordinateReferenceSystem\Geographic2D;
use PHPCoord\Geometry\LinearRing;
use PHPCoord\Geometry\Polygon;
use PHPCoord\Geometry\Position;
use PHPCoord\Point\GeographicPoint;
use PHPCoord\UnitOfMeasure\Angle\Degree;
use PHPCoord\UnitOfMeasure\Length\Metre;

// Coordinate conversion
use proj4php\Proj4php;
use proj4php\Proj;
use proj4php\Point;
Проблема с существующими решениями:
Я исследовал различные решения проблемы переполнения стека, в том числе использование функции abs для расчета размеров, но ни одно из них не дало точных результатов. результатов, особенно для неквадратных прямоугольников.
Запрос:
Я ищу решение или альтернативный подход для точного вычислите площадь между координатами в неквадратном прямоугольнике, используя WGS84 CRS. В идеале решение должно учитывать кривизну Земли и обеспечивать точные результаты независимо от соотношения сторон прямоугольника.
Будем очень признательны за любые идеи и предложения. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/786 ... ngles-in-w
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»