# @allmaps/project 中文文档

规范地址：https://npmcn.com/package/%40allmaps/project/

版本：1\.0\.0-beta\.10
npm 元数据更新时间：2026-10-01T09:24:37.853Z
中文译文更新时间：2026-11-05T23:59:35.216Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40allmaps/project
原文对照：https://npmcn.com/package/%40allmaps/project/?lang=original
项目主页：https://allmaps.org/
源码仓库：https://github.com/allmaps/allmaps

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：76.1 kB，11 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：3 个
- 首次发布：2025-05-22T09:51:15.745Z
- 最新版本发布：2026-09-22T07:06:36.943Z
- 近 30 天下载量：8627（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：10（近 12 个月 5 个）

## 中文简介

投影函数

## 安装

```sh
npm install @allmaps/project
```

也可以使用：`pnpm add @allmaps/project`、`yarn add @allmaps/project`、`bun add @allmaps/project`

## README

# @allmaps/ 项目

此模块扩展 GCP 变形器类 [@ allmaps/ 转换](https://npmcn.com/package/packages/transform/) 具有预测功能的预测GCP变换器类别及其方法可以 **转换 _和项目_ 点、 线条、 多边形** 从图像“ 资源” 空间到“ ” 其他空间特征_预计数_ 地球空间.

预测由 [Proj4js (英语:](https://github.com/proj4js/proj4js) 图书馆。 这个软件包支持任何由Proj4js支持的投影(或更一般的,坐标参考系统或CRS).

在Allmaps项目中,该模块被使用a.o. in [@ allmaps/ 放弃](https://npmcn.com/package/packages/render/) 财务报告和审定财务报表 [@ allmaps/ 平板电脑](https://npmcn.com/package/apps/tileserver/),两个地方,我们利用地控点和地图的"地理参考注释"所定义的变换类型,将图像的"资源"空间转换为地图投影(大多数情况下是WebMercator)的"预测地理空间".

## 如何运作

此套件导出 `ProjectedGcpTransformer` 类,扩展 `GcpTransformer` 课程从 [@ allmaps/ 转换](https://npmcn.com/package/packages/transform/)。 。 。 .

比如说 `GcpTransformer` 类,实例 `ProjectedGcpTransformer` 类从 **一组控制点**,在两个空间中,谁的坐标是已知的(在lon-lat中,谁的地坐标是给出的) `EPSG:4326` 和具体 **转换类型** 算法。 此外,还可以定义一个内部投影和投影,以便不从"资源"到"地"空间,而是从"资源"到取景口"预测地"空间,可选通过地图的"内部预测地"空间. 使用 `toProjectedGeo()` 财务报告和审定财务报表 `toResource()` 方法(或 `toGeo()` 以获取 `EPSG:4326` (a) 预测.

这个 **预测** 定义视图端口的“预测的地平面”空间。 因为我们将在我们视站的预计空间中使我们的地平面变形,因此,通过提供其投影使变形器了解这个空间是合乎逻辑的,这样它就能将结果带到这个空间. 它默认为 Web 计算器 `EPSG:3857`,默认情况下在大多数 webmaps 中使用的预测.

这个 **内部预测** 定义“ 内部预测的地理” 空间。 这是已知或假设的投影的空间 。 当我们知道这种预测时,这一点很重要,例如当转变时 `toGeo`,以建立一个 `toGeoTransfromation` 介于图像的“ 资源” 空间和已知或假定的投影的“ 内部预测地理” 空间之间。 这样,我们做转换账户 _仅限_ 用于将图像扭曲到预定的投影空间,而不是由于选择取景口投影(可能与地图投影不同)而用于任何其他的取景. 为了将地图“内部预测地球”空间的结果带到取景口的“预测地”空间,将“内部预测地”到“预测地”空间的投影函数设定为 `postToGeo` 选项(这是GCP变换选项的一部分),并在变换器末端执行 `toProjectedGeo()` 方法。 同样,当呼叫 `toResource()` 方法 a `preToResource()` 执行从“预测的地上”空间到“内部预测的地上”空间,然后评估 `toResourceTransformation` 到达资源空间 “ 内部预测的地理” 空间也默认为 Web Mercator `EPSG:3857` (因为它的"形式"属性使它成为地图在大尺度上投影的好一般猜测). 当内部投影和投影完全相同(如默认)时 `postToGeo()` 函数是一个无效果的身份投影.

GCP必须用 Lon-lat 提供 `EPSG:4326` 投影(因为这是GeoJSON和GeoReference June使用的默认投影),并在建造GCP变换器(将投影到"内部预测地"空间)之前被投影到"预测地"空间.

## 安装

这是一个只在浏览器和Node.js中工作的无害环境管理模块.

用 pnpm 安装 :

```sh
pnpm install @allmaps/project
```

## 使用量

### 快速启动

类似于 GCP 变形器, 当起始于 **注释** 或者说 **地理参考地图**建造预计的GCP变换器的最快方法是:

```js
import { parseAnnotation } from '@allmaps/annotation'
import { ProjectedGcpTransformer } from '@allmaps/project'

// Fetch an annotation
const annotation = await fetch(annoationUrl).then((response) => response.json())

// Create a georeferencedMap from the annotation
const georeferencedMaps = parseAnnotation(annotation)
const georeferencedMap = georeferencedMaps[0]

// Build Projected GCP Transformer
const projectedTransformer =
  ProjectedGcpTransformer.fromGeoreferencedMap(georeferencedMap)

// Use it to transform geometries, as below. E.g.:
const projectedGeoPoint = projectedTransformer.transformToProjectedGeo(resourcePoint)
```

这相当于从Annotation's或GeoReferenced Map's GCP,变换类型和投影中构建出一个预测变压器,如下出的例子.

然后,这个预测变压器可用于在“资源”空间和“预测地球”空间之间转换几何.

何时 **渲染** 地图,快速获得投影变压器的另一种方法是直接从一个 **被扭曲的地图** 在渲染器被扭曲的地图列表中:

```js
// Create a renderer from your canvas
const renderer = new WebGL2Renderer(gl)
// Fetch and parse annotations, add them to the renderer ...

// There are multiple ways to access the renderer's Warped Map List's Warped Maps, e.g.:
const warpedMap = renderer.warpedMapList.getWarpedMap(mapId)

// Access the Projected GCP Transformer, in the Warped Map's current transformation type
const projectedTransformer = warpedMap.projectedTransformer
// Or select or create the Projected GCP Transformer of a different transformation type
const projectedHelmertTransformer = warpedMap.getProjectedTransformer('helmert')
```

### 使用带有默认 Web 变压器的变压器 `EPSG:3857` 预测

在这个例子中,我们创建了带有 Thin Plate Spline 转换和默认内部投影和投影的预测变压器: WebMercator `EPSG:3857`。 。 。 .

这个投影变压器因此赋予了WebMercator `EPSG:3857` 向前转换时坐标 .

```js
import { ProjectedGcpTransformer } from '@allmaps/project'

const gcps6 = [
  {
    resource: [1344, 4098],
    geo: [4.4091165, 51.9017125]
  },
  {
    resource: [4440, 3441],
    geo: [4.5029222, 51.9164451]
  },
  {
    resource: [3549, 4403],
    geo: [4.4764224, 51.897309]
  },
  {
    resource: [1794, 2130],
    geo: [4.4199066, 51.9391509]
  },
  {
    resource: [3656, 2558],
    geo: [4.4775683, 51.9324358]
  },
  {
    resource: [2656, 3558],
    geo: [4.4572643, 51.9143043]
  }
]

const options = {
  minOffsetRatio: 0.001,
  maxDepth: 1
}

const projectedTransformer = new ProjectedGcpTransformer(
  gcps6,
  'thinPlateSpline',
  options
)

const resourceLineString = [
  [3655, 2212],
  [2325, 3134],
  [3972, 325],
  [3451, 2876],
  [2067, 920],
  [622, 941]
]

const projectedGeoLineString =
  projectedTransformer.transformToProjectedGeo(resourceLineString)
// projectedGeoLineString = [
//   [498246.8195647142, 6789061.316027705],
//   [496595.9732655353, 6787546.801212325],
//   [494783.7898554361, 6785995.114473057],
//   [496391.8586632488, 6790623.562354985],
//   [498497.64212101337, 6795403.988950945],
//   [498135.8154413349, 6791100.393518668],
//   [498076.9264938777, 6786883.571136022],
//   [495239.5461210053, 6790036.9871731205],
//   [492300.2095900435, 6793167.011607833],
//   [489770.9992948517, 6793018.672759057],
//   [487201.94796965295, 6792860.379165613]
// ]
```

注意这如何返回 WebMecator 坐标中的行串 .

### 使用带有特定内部投影的变压器

在这个例子中,我们创建了带有"薄板斯平"变换的预测变压器,内部投影设定为"BD72 / Belgian Lambert 72" `EPSG:31370` 和投影仪 `EPSG:3857`。 。 。 .

```js
import { ProjectedGcpTransformer } from '@allmaps/project'

const gcps6 = ... // See above

const epsg31370 =
  '+proj=lcc +lat_0=90 +lon_0=4.36748666666667 +lat_1=51.1666672333333 +lat_2=49.8333339 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-106.8686,52.2978,-103.7239,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs +type=crs'

const options = {
  minOffsetRatio: 0.001,
  maxDepth: 1,
  internalProjection: epsg31370
}

const projectedTransformer = new ProjectedGcpTransformer(gcps6, 'thinPlateSpline', options)

const resourceLineString = [
  [3655, 2212],
  [2325, 3134],
  [3972, 325],
  [3451, 2876],
  [2067, 920],
  [622, 941]
]

const projectedGeoLineString = projectedTransformer.transformToProjectedGeo(resourceLineString)
// const projectedGeoLineString = [
//   [498247.196090505, 6789061.7676701555],
//   [496596.0857961293, 6787546.818863111],
//   [494783.8626652385, 6785995.157771795],
//   [496392.4627162781, 6790624.950878147],
//   [498501.57678734255, 6795410.032138047],
//   [498137.15972611686, 6791102.130838948],
//   [498076.85849569837, 6786883.389086489],
//   [495239.9136289843, 6790037.973029668],
//   [492298.9972965987, 6793169.702451241],
//   [489767.88734149706, 6793019.906716891],
//   [487196.5540720398, 6792859.377809678]
// ]
```

注意此返回与以往不同点的WebMecator坐标中的行String, 因为它的转换在将结果投影到WebMecator之前使用了另一个内部投影.

### 使用带有特定内部投影和投影的变压器

同样,也可以同时指定内部投影和投影.

在这个例子中,我们创建了一个预测变压器,其中将“资源”空间转换成“内部预测”空间 `EPSG:31370` 投影,并将结果带入“ Amersfort / RD” New 中的“ 预测地球” 空间 `EPSG:28992` 预测.

```js
import { ProjectedGcpTransformer } from '@allmaps/project'

const gcps6 = ... // See above

const epsg31370 = ... // See above
const epsg28992 = "+proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.4171,50.3319,465.5524,1.9342,-1.6677,9.1019,4.0725 +units=m +no_defs +type=crs"

const options = {
  minOffsetRatio: 0.001,
  maxDepth: 1,
  internalProjection: epsg31370,
  projection: epsg28992
}

const projectedTransformer = new ProjectedGcpTransformer(gcps6, 'thinPlateSpline', options)

const resourceLineString = [
  [3655, 2212],
  [2325, 3134],
  [3972, 325],
  [3451, 2876],
  [2067, 920],
  [622, 941]
]

const projectedGeoLineString = projectedTransformer.transformToProjectedGeo(resourceLineString)
// const projectedGeoLineString = [
//   [92171.96319801327, 439250.7392195241],
//   [91140.1318550074, 438330.2059945731],
//   [90008.06902330121, 437388.3781427277],
//   [91038.64166624477, 440228.31014306704],
//   [92378.19922071013, 443158.54244443506],
//   [92119.83597131, 440508.5490631829],
//   [92049.81893950628, 437909.7404415105],
//   [90322.16486404435, 439875.89373726887],
//   [88531.49536626287, 441828.6782593381],
//   [86967.57638718556, 441757.502798549],
//   [85378.67808803722, 441680.55210508476]
// ]
```

注意这如何返回 WebMecator 中的线条String 坐标, 与先前的点相同, 但预计为 EPSG : 28992

### 转换为不同的投影

自兹 `projection` 是一个 _转换_ 选项,可以设置在每次变换方法调用上。 这使得我们能将所请求的投影从预计的变压器创建时指定的投影改变为 _任意_ 预测。 因此,我们不需要为每个感兴趣的投影创建一个预测变压器:我们可以再用变压器及其到Geo和/或资源转换(如果有许多GCP的话,其计算可能很昂贵).

我们可以使用上面的预测变压器请求“toGeo”变压的结果如下:

```js
// Same projectedTransformer as above:
// internalProjection: epsg31370,
// projection: epsg28992

const projectedGeoLineString = projectedTransformer.transformToProjectedGeo(
  resourceLineString,
  { projection: { definition: 'EPSG:3857' } }
)
// const projectedGeoLineString = [
//   [ 498247.1996476347, 6789061.760253225 ],
//   [ 496596.08934986574, 6787546.81144527 ],
//   [ 494783.8662153203, 6785995.150353045 ],
//   [ 496392.4662716557, 6790624.943463034 ],
//   [ 498501.58034885704, 6795410.0247265855 ],
//   [ 498137.16328437213, 6791102.123423815 ],
//   [ 498076.8620512022, 6786883.381667706 ],
//   [ 495239.91718228994, 6790037.965614326 ],
//   [ 492299.00084753655, 6793169.695039346 ],
//   [ 489767.8908886019, 6793019.899305481 ],
//   [ 487196.5576152448, 6792859.370398756 ]
// ]
```

注意如何返回结果与先前预测的内部预测结果非常相近 `EPSG:31370` 和默认投影器 `EPSG:3857`。 。 。 .

改变预测的变压器在 _变压器_ 选项(在默认情况下总是使用),使用 `setProjection()` 方法.

如上所述,通过变换呼号的投影已经通过 `postToGeo` 从变压器的内部投影到请求的投影.

注:内部投影没有相应的选项.

## 创建和使用预测变压器

由于预测GCP变形器类扩展了GCP变形器类,因此其许多用法相似. (见 [@ allmaps/ 转换](https://npmcn.com/package/packages/transform/) 用于提供下列项目的更详细信息.

当从预测的 GCP 变形器类创建实例时 :

-   这个 **全球供应链** 使用 `Gcp` 类型和地理成分在lon-lat “EPSG:4326”中.
-   一样 **转换类型** 已支持: `polynomial`, (中文(简体) ), `thinPlateSpline`,, , , , , , , , .
-   两个 **额外选项** 可设定 : `projection` 指定预测的地理空间( 默认为 Web 计算器) `EPSG:3857`),以及 `intenalProjection` 指定在计算转换时使用的预测( 也默认为 WebMercator) `EPSG:3857`) (中文(简体) ). 就像GCP变形器一样 `differentHandedness` 默认为真实.

在使用其主要方法时:

-   方法 `transformToProjectedGeo()` 将输入的几何空间从“ 资源” 空间转换为“ 预测的地理” 空间, 作为方法 `transformToResource()` 将输入的几何空间从“ 预测的地理” 空间转换为“ 资源 ” 空间 .
-   另一种方法 `transformToGeo()` 在lon-lat"EPSG:4326"中将输入的几何空间从"资源"转换为"geo".
-   输入遵循了Allmaps Geometries类型. 要处理 GeoJSON Geometries 或 SVG Geometries, 使用可用的函数转换到这些几何类型 [@allmaps/stdlib (英语)](https://npmcn.com/package/packages/stdlib/)。 。 。 .
-   **GCP 变换选项** 可指定和管理如何精炼几何和计算哪些扭曲。 现在,在提炼几何和递归地加中点时,会考虑预测功能.
-   A 类 **返回类型函数** 可用于提取扭曲信息或修改结果.

SVG Geometries 和 GeoJSON Geometries 之间的更快转换, GcpTransfers 也有相同的快捷方式静态方法: `transformSvgToGeojson()`, (中文(简体) ), `transformSvgStringToGeojsonFeatureCollection()`, (中文(简体) ), `transformGeojsonToSvg()`, (中文(简体) ), `transformGeojsonFeatureCollectionToSvgString()`。 。 。 .

注:扭曲只描述变换的曲折,从"资源"空间到"内部预测地"空间. (在“预测出地”空间之前描述曲面需要应用链式规则,并能够访问投影函数的部分衍生物。 )

### 预计全球方案 变形器选项

预计 GCP 变换器有额外的“ 转换器选项 ” :

| 选项 | 说明 | 类型 | 默认 |
| --- | --- | :-- | :-- |
| `internalProjection` | 在转型中内部使用的地理预测. | `Projection` | 网络服务器 `EPSG:3857` |

由于内部投影定义了内部所预测的空间,从中计算出变相,变相调用无法指定不同的内部投影.

### 预计全球方案 变换选项

预测 GCP 变换器有额外的“变换选项 ” :

| 选项 | 说明 | 类型 | 默认 |
| --- | --- | :-- | :-- |
| `projection` | 景点的地理投影. | `Projection` | 网络服务器 `EPSG:3857` |

和GCP变压器一样,在变压器的构造过程中通过这个变压选项在此使用变压方法时是默认的.

和其他GCP一样 _变形_ 选项,可在构建变压器时设置此选项 _财务报告和审定财务报表_ 当转换几何。 这可能是有用的,因为它使我们能够重新使用变压器的 toGeo和/或资源转换(当有许多GCP时,计算成本可能很昂贵)来转换为新的投影. (见上文实例。 )

## 键入

预测的定义如下:

```ts
export type Projection = {
  name?: string
  definition: string | proj4.PROJJSONDefinition
}
```

投影定义可以兼容任何东西 [Proj4js (英语:](https://github.com/proj4js/proj4js),比如说. 两个默认命名预测中的一个 `'EPSG:3857'` `'EPSG:4326'`,一个正弦 `'+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs'`(自Proj4js版本2.19起) a [普罗杰森](https://proj.org/en/stable/specifications/projjson.html) 定义.

## 基准

以下是在2023 MacBook Air M2和16 GB RAM上计算出来的建造和使用变压器的一些基准.

此基准可用 `pnpm run bench`。关于更多信息,参见 [`./bench/index.js`](https://npmcn.com/package/%40allmaps/project/%60./bench/index.js%60)。 。 。 .

要创建一个预测变压器( 有 10 分) 并计算其“ 到 Geo” 转换 :

| 类型 | 行动 |
| --- | --- |
| 舵手 | 31178号 |
| 多边形1 | 39583 (英语) |
| 聚诺米亚2 | 31907 (英语) |
| 单声道3 | 2013年7 (中文(简体) ) |
| 薄板线 | 17325 (英语) |
| 投影 | 20322 (英语) |

要使用投影变压器( 有 10 个点, 并且其“ 到 Geo” 变换已经计算) 并转换“ 到 Geo ” :

| 类型 | 行动 |
| --- | --- |
| 舵手 | 3906562 (英语) |
| 多边形1 | 3595760 (英语) |
| 聚诺米亚2 | 3568346 (韩语) |
| 单声道3 | 20187742 (英语) |
| 薄板线 | 1759935 (英语) |
| 投影 | 3621210 (韩语) |

## 许可证

麻省理工学院

## API 密码

### `InternalProjectionInputs`

###### 字段

-   `internalProjection?` (单位:千美元)`{id?: string; name?: string; definition: ProjectionDefinition}`(中文(简体) )

### `ProjectedGcpTransformOptions`

###### 类型

```ts
ProjectionInputs & {
  maxDepth: number
  minSourceDistance: number
  minDestinationDistance: number
  minOffsetRatio: number
  minOffsetDistance: number
  distortionMeasures: DistortionMeasure[]
  referenceScale: number
  postToGeo: ProjectionFunction
  preToResource: ProjectionFunction
} & MultiGeometryOptions
```

### `new ProjectedGcpTransformer(gcps, type, partialProjectedGcpTransformerOptions)`

创建预测的 Gcp 转换器

###### 参数

-   `gcps` (单位:千美元)`Array<Gcp>`(中文(简体) )
    -   Lon-lat'EPSG:4326'中的地控点阵列
-   `type` (单位:千美元)`TransformationType | undefined`(中文(简体) )
    -   转换类型
-   `partialProjectedGcpTransformerOptions?` (单位:千美元)`Partial<ProjectedGcpTransformerOptions> | undefined`(中文(简体) )
    -   预计全球方案 变形器选项

###### 回返

`ProjectedGcpTransformer`。 。 。 .

###### 扩展

-   `GcpTransformer`

### `ProjectedGcpTransformer#gcps`

获取GCP, 因为它们被输入到 GCP 变换器中(`Array<Gcp>`) (中文(简体) ).

对于一个预测的GCP变换器,这些是预测坐标中的GCP.

### `ProjectedGcpTransformer#getToGeoTransformationResolution(resourceBbox, partialProjectedGcpTransformOptions)`

在给定bbox内获取资源空间中的toGeo转换分辨率.

这能让你知道在资源空间里 拨动有多精细. 例如,在资源空间中创建一个三角化可以有所帮助 这足以进行曲动或设置分钟源码选项.

它通过转换成吉奥两条线来获得, 即给定box的横向和纵向中线. ToGeo变换将完善这些线: 它会把它们碎成小块 以获得近乎连续的结果.

分辨率以资源坐标测量的最短块长度返回, 如果不需要改进,则不加界定.

###### 参数

-   `resourceBbox?` (单位:千美元)`Bbox | undefined`(中文(简体) )
    -   请求解析或未定义从 GCP 获取此解析度的资源空间中的 BBox
-   `partialProjectedGcpTransformOptions?` (单位:千美元)`Partial<ProjectedGcpTransformOptions> | undefined`(中文(简体) )

###### 回返

资源空间的toGeo变换的分辨率(`number | undefined`) (中文(简体) ).

### `ProjectedGcpTransformer#getToProjectedGeoTransformationResolution(resourceBbox, partialProjectedGcpTransformOptions)`

在给定的bbox内获取资源空间中的 ToProjectedGeo 转换的解析度 .

这能让你知道在资源空间里 拨动有多精细. 例如,在资源空间中创建一个三角化可以有所帮助 这足以进行曲动或设置分钟源码选项.

它通过转换成ProjectedGeo两行线来获得, 即给定box的横向和纵向中线. 预测Geo变换将完善这些线条: 它会把它们碎成小块 以获得近乎连续的结果.

分辨率以资源坐标测量的最短块长度返回, 如果不需要改进,则不加界定.

###### 参数

-   `resourceBbox?` (单位:千美元)`Bbox | undefined`(中文(简体) )
    -   请求解析或未定义从 GCP 获取此解析度的资源空间中的 BBox
-   `partialProjectedGcpTransformOptions?` (单位:千美元)`Partial<ProjectedGcpTransformOptions> | undefined`(中文(简体) )

###### 回返

解决资源空间中已预测的吉奥变换问题`number | undefined`) (中文(简体) ).

### `ProjectedGcpTransformer#getToResourceTransformationResolution(projectedGeoBbox, partialProjectedGcpTransformOptions)`

在一个给定的bbox内,获取预测地空中资源转换的分辨率.

这可以让你了解在预测的地球空间中 旋转的精度有多高. 例如,在预测的地空上建立三角定位可能是有益的 足以进行曲折或设置分解分解选项.

它通过转换为资源两行, 即给定box的横向和纵向中线. 资源转化将完善这些路线: 它会把它们碎成小块 以获得近乎连续的结果.

以内部预测地理坐标测量的最短地段长度返回分辨率, 如果不需要改进,则不加界定.

###### 参数

-   `projectedGeoBbox?` (单位:千美元)`Bbox | undefined`(中文(简体) )
    -   请求解析的预测地理空间中的 BBox, 或未定义从 GCP 中获取
-   `partialProjectedGcpTransformOptions?` (单位:千美元)`Partial<ProjectedGcpTransformOptions> | undefined`(中文(简体) )

###### 回返

解决内部预测地空资源转化问题`number | undefined`) (中文(简体) ).

### `ProjectedGcpTransformer#interalProjectedGcps`

将全球氯化石蜡放入相向预测坐标(`Array<Gcp>`) (中文(简体) ).

### `ProjectedGcpTransformer#internalProjection`

###### 类型

```ts
{id?: string; name?: string; definition: ProjectionDefinition}
```

### `ProjectedGcpTransformer#internalProjectionToProjection`

###### 类型

```ts
(point: Point) => Point
```

### `ProjectedGcpTransformer#isNonWarping()`

###### 参数

没有参数.

###### 回返

`boolean`。 。 。 .

### `ProjectedGcpTransformer#lonLatToProjection`

###### 类型

```ts
(point: Point) => Point
```

### `ProjectedGcpTransformer#lonlatGcps`

将全球氯化石蜡放入相向预测坐标(`Array<Gcp>`) (中文(简体) ).

### `ProjectedGcpTransformer#projectedGcps`

在预测坐标中获取GCP(`Array<Gcp>`) (中文(简体) ).

### `ProjectedGcpTransformer#projection`

###### 类型

```ts
{id?: string; name?: string; definition: ProjectionDefinition}
```

### `ProjectedGcpTransformer#projectionToInternalProjection`

###### 类型

```ts
(point: Point) => Point
```

### `ProjectedGcpTransformer#projectionToLonLat`

###### 类型

```ts
(point: Point) => Point
```

### `ProjectedGcpTransformer#transformToGeo(resourcePoint, partialGcpTransformOptions, gcpToP)`

###### 参数

-   `resourcePoint` (单位:千美元)`[number, number]`(中文(简体) )
-   `partialGcpTransformOptions?` (单位:千美元)`Partial<ProjectedGcpTransformOptions> | undefined`(中文(简体) )
-   `gcpToP?` (单位:千美元)`((gcp: GcpAndDistortions) => P) | undefined`(中文(简体) )

###### 回返

`P`。 。 。 .

### `ProjectedGcpTransformer#transformToProjectedGeo(resourcePoint, partialGcpTransformOptions, gcpToP)`

###### 参数

-   `resourcePoint` (单位:千美元)`[number, number]`(中文(简体) )
-   `partialGcpTransformOptions?` (单位:千美元)`Partial<ProjectedGcpTransformOptions> | undefined`(中文(简体) )
-   `gcpToP?` (单位:千美元)`((gcp: GcpAndDistortions) => P) | undefined`(中文(简体) )

###### 回返

`P`。 。 。 .

### `ProjectedGcpTransformer#transformToResource(projectedGeoPoint, partialGcpTransformOptions, gcpToP)`

###### 参数

-   `projectedGeoPoint` (单位:千美元)`[number, number]`(中文(简体) )
-   `partialGcpTransformOptions?` (单位:千美元)`Partial<ProjectedGcpTransformOptions> | undefined`(中文(简体) )
-   `gcpToP?` (单位:千美元)`((gcp: GcpAndDistortions) => P) | undefined`(中文(简体) )

###### 回返

`P`。 。 。 .

### `ProjectedGcpTransformer.fromGeoreferencedMap(georeferencedMap, options)`

从地理参考地图创建预测的 GCP 变换器

###### 参数

-   `georeferencedMap` (单位:千美元)`{ '@context'?: "https://schemas.allmaps.org/map/2/context.json" | undefined; type: "GeoreferencedMap"; id?: string | undefined; created?: string | undefined; modified?: string | undefined; ... 5 more ...; _allmaps?: unknown; }`(中文(简体) )
    -   地理参考地图
-   `options?` (单位:千美元)`Partial<{ internalProjection: Projection; projection: Projection; } & { differentHandedness: boolean; } & { maxDepth: number; minSourceDistance: number; minDestinationDistance: number; ... 5 more ...; preToResource: ProjectionFunction; } & MultiGeometryOptions & TransformationTypeInputs> | undefined`(中文(简体) )
    -   选项,包括预测的 GCP 变换器选项,以及一个用于推翻地理参考地图所定义类型的转换类型

###### 回返

预测的GCP变换器`ProjectedGcpTransformer`) (中文(简体) ).

### `ProjectedGcpTransformer.fromProjection(projectedTransformer, projection)`

设定投影.

将“ toGeo” 或“ to Requeration” 转换为或从不同的投影 (但使用相同的内部投影) 可以在变换选项中指定所请求的投影.

这样我们就可以避免可能很昂贵的重算 和/或资源转换.

要更系统地做到这一点,就有可能 使用这种方法预测出gcp变压器的投影.

###### 参数

-   `projectedTransformer` (单位:千美元)`ProjectedGcpTransformer`(中文(简体) )
-   `projection` (单位:千美元)`{id?: string; name?: string; definition: ProjectionDefinition}`(中文(简体) )

###### 回返

此(`ProjectedGcpTransformer`) (中文(简体) ).

### `ProjectedGcpTransformerInputs`

###### 类型

```ts
GcpsInputs &
  TransformationTypeInputs &
  InternalProjectionInputs &
  ProjectionInputs
```

### `ProjectedGcpTransformerOptions`

###### 类型

```ts
{ internalProjection: Projection; projection: Projection; } & { differentHandedness: boolean; } & { maxDepth: number; minSourceDistance: number; minDestinationDistance: number; ... 5 more ...; preToResource: ProjectionFunction; } & MultiGeometryOptions
```

### `Projection`

###### 字段

-   `definition` (单位:千美元)`Definition`(中文(简体) )
-   `id?` (单位:千美元)`string`(中文(简体) )
-   `name?` (单位:千美元)`string`(中文(简体) )

### `ProjectionDefinition`

###### 类型

```ts
string | PROJJSONDefinition
```

### `ProjectionInputs`

###### 字段

-   `projection?` (单位:千美元)`{id?: string; name?: string; definition: ProjectionDefinition}`(中文(简体) )

### `defaultProjectedGcpTransformOptions`

###### 字段

-   `projection` (单位:千美元)`{id?: string; name?: string; definition: string}`(中文(简体) )

### `defaultProjectedGcpTransformerOptions`

###### 字段

-   `internalProjection` (单位:千美元)`{id?: string; name?: string; definition: string}`(中文(简体) )
-   `projection` (单位:千美元)`{id?: string; name?: string; definition: string}`(中文(简体) )

### `getLonLatDefinition(partialProjectionDefinitionOptions)`

###### 参数

-   `partialProjectionDefinitionOptions?` (单位:千美元)`Partial<ProjectionDefinitionOptions> | undefined`(中文(简体) )

###### 回返

`string`。 。 。 .

### `getWebMercatorDefinition(partialProjectionDefinitionOptions)`

###### 参数

-   `partialProjectionDefinitionOptions?` (单位:千美元)`Partial<ProjectionDefinitionOptions> | undefined`(中文(简体) )

###### 回返

`string`。 。 。 .

### `isEqualProjection(projection0, projection1)`

###### 参数

-   `projection0` (单位:千美元)`{id?: string; name?: string; definition: ProjectionDefinition}`(中文(简体) )
-   `projection1` (单位:千美元)`{id?: string; name?: string; definition: ProjectionDefinition}`(中文(简体) )

###### 回返

`boolean`。 。 。 .

### `lonLatProjection`

lonLat 预测

`EPSG:4326` 带有定义的投影: `"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees +over"`

请注意: `+over` 被添加到支持环绕时空

###### 字段

-   `definition` (单位:千美元)`string`(中文(简体) )
-   `id` (单位:千美元)`string`(中文(简体) )
-   `name` (单位:千美元)`string`(中文(简体) )

### `projectionDefinitionToAntialiasedDefinition(stringProjectionDefinition, partialProjectionDefinitionOptions)`

###### 参数

-   `stringProjectionDefinition` (单位:千美元)`string`(中文(简体) )
-   `partialProjectionDefinitionOptions?` (单位:千美元)`Partial<ProjectionDefinitionOptions> | undefined`(中文(简体) )

###### 回返

`string`。 。 。 .

### `projectionToAntialiasedProjection(projection, partialProjectionDefinitionOptions)`

###### 参数

-   `projection` (单位:千美元)`{id?: string; name?: string; definition: ProjectionDefinition}`(中文(简体) )
-   `partialProjectionDefinitionOptions?` (单位:千美元)`Partial<ProjectionDefinitionOptions> | undefined`(中文(简体) )

###### 回返

`{id?: string; name?: string; definition: ProjectionDefinition}`。 。 。 .

### `webMercatorProjection`

网络计算器预测

`EPSG:3857` 带有定义的投影: `"+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs +over"`

请注意: `+over` 被添加到支持环绕时空

###### 字段

-   `definition` (单位:千美元)`string`(中文(简体) )
-   `id` (单位:千美元)`string`(中文(简体) )
-   `name` (单位:千美元)`string`(中文(简体) )

## 常见问题

### @allmaps/project 是什么？

投影函数

### 如何安装 @allmaps/project？

在项目目录运行 npm install @allmaps/project，或使用 pnpm add / yarn add / bun add。

### @allmaps/project 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/allmaps\_\_project 是否存在。

### @allmaps/project 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @allmaps/project 可以商用吗？

@allmaps/project 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @allmaps/project 的下载量有多少？

根据 npm 官方下载统计，@allmaps/project 在 2026/10/06 – 2026/11/04 这 30 天内被下载 8,627 次，日均约 288 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @allmaps/project 还在维护吗？

最新版本 1\.0\.0-beta\.10 发布于 2026/09/22（1 个月前）；至今共发布 10 个版本，其中过去 12 个月发布了 5 个；首次发布于 2025/05/22。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

