簡體   English   中英

運行示例轉換時出現 PHPCoord TypeError

[英]PHPCoord TypeError when running example conversions

我正在努力嘗試使用PHPCoord來轉換不同類型的坐標。 我是 composer 和 PHP 庫的新手,所以很可能會犯基本錯誤。 我遇到了與自動加載相關的問題,我現在已經解決了,但我現在面臨着另一種錯誤,這很可能是基本的,並且由於我在這方面缺乏經驗。

我正在使用直接取自PHPCoord 文檔的以下示例代碼:

use PHPCoord\CoordinateReferenceSystem\Geographic2D;
use PHPCoord\CoordinateReferenceSystem\Projected;
use PHPCoord\GeographicPoint;
use PHPCoord\UnitOfMeasure\Angle\Degree;

// Converting from NAD83 to Florida State Plane
$from = GeographicPoint::create(
    Geographic2D::fromSRID(Geographic2D::EPSG_NAD83),
    new Degree(28.46),
    new Degree(-80.53),
    null
);
$toCRS = Projected::fromSRID(Projected::EPSG_NAD83_FLORIDA_EAST);
$to = $from->convert($toCRS); // $to instanceof ProjectedPoint

在此之上,我正在自動加載:

$theme_root = dirname(__DIR__, 1);
require_once $theme_root . '/vendor/autoload.php';

我收到以下錯誤:

致命錯誤:未捕獲的類型錯誤:傳遞給 PHPCoord\GeographicPoint::create() 的參數 1 必須是 PHPCoord\UnitOfMeasure\Angle\Angle 的實例,給定的 PHPCoord\CoordinateReferenceSystem\Geographic2D 實例...

由於示例代碼與北美地理相關,我還添加了可選的附加數據包: datapack-northamerica ,盡管這沒有效果。

任何幫助將非常感激。 謝謝!

我自己回答這個問題,希望其他任何在PHPCoord上苦苦掙扎的人都能找到指導。

正如@Foobar 所指出的那樣,盡管最近使用composer安裝了它,但我使用的是舊版本的庫。 這是因為 composer 檢測到我的 PHP (7.4.12) 版本並確定它不符合最新版本的 PHPCoord 的標准。 我假設我有最新版本,並嘗試使用僅適用於 PHPCoord 版本 5 及更高版本的代碼示例,但我運行的是版本 4.x。

正如文檔所述,這一切都有些令人困惑:

PHPCoord v4 兼容 PHP 7.3+

但是,代碼示例適用於需要 PHP 8.0+ 的 PHPCoord v5。

我的解決方案是將我的 PHP 版本升級到 8.x。

這消除了上面概述的錯誤,但是我隨后收到了一個新的memory 不足錯誤,該錯誤已通過將我的 MAMP memory 限制從 128M 提高到 256M 得到糾正。

回顧一下,我的第一個問題不包括require_once 'vendor/autoload.php';

然后,由於運行 PHP 7.4.x 而不是 8.x 版本,我遇到了最低要求問題,並且在不知不覺中運行了庫的過時版本。

然后我沒有足夠的 memory 分配問題,我通過編輯php.inimemory_limit = 128M更改為memory_limit = 256M解決了這些問題。

感謝所有評論和幫助。 我現在可以繼續將 OSGB 引用轉換為緯度/經度,但需要確保生產主機運行 PHP 版本 8 並且具有足夠的 memory 限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM