import { VideoRegistrationParam } from "../../base";
import { Point } from '../../index'
import Log from "../Log";
import { GDALApplyGeoTransform, GDALGCPsToGeoTransform, GDALInvGeoTransform } from "./GDALCoordTransform";
/**
* 像素坐标地理坐标转换类
* @classdesc 像素坐标地理坐标转换类
*/
class VideoPixelCoordTransforms {
constructor() {
this._videoRegistrationParam = null
this._gdalGCPsData = []
this._toGeoTransforms = new Float64Array(6)
this._invToGeoTransforms = new Float64Array(6)
}
/**
* 初始化视频调绘坐标转换工具
* @param {VideoRegistrationParam} videoRegistrationParam
*/
init(videoRegistrationParam) {
this._videoRegistrationParam = new VideoRegistrationParam(videoRegistrationParam)
if (!this._videoRegistrationParam.calibrationParam || !this._videoRegistrationParam.calibrationParam.groundControlPointList) {
Log.error('缺少标定配准转换数据')
return
}
const groundControlPointList = this._videoRegistrationParam.calibrationParam.groundControlPointList;
groundControlPointList.forEach(element => {
const gdalData = {
pszId: element.id,
pszInfo: element.description,
dfGCPPixel: element.pixelX,
dfGCPLine: element.pixelY,
dfGCPX: element.x,
dfGCPY: element.y,
dfGCPZ: element.z
}
this._gdalGCPsData.push(gdalData)
});
const result = GDALGCPsToGeoTransform(this._gdalGCPsData, this._toGeoTransforms, true)
GDALInvGeoTransform(this._toGeoTransforms, this._invToGeoTransforms)
// console.log('像素转地理矩阵:', this._toGeoTransforms)
// console.log('地理转像素矩阵', this._invToGeoTransforms)
}
/**
* 像素坐标转地理坐标
* @param {Point} pixelCoord 像素坐标
* @returns {Point} 地理坐标
*/
pixelCoordToGeoCoord(pixelCoord) {
const { pdfGeoX: geox, pdfGeoY: geoy } = GDALApplyGeoTransform(
this._toGeoTransforms,
pixelCoord.coordinates[0],
pixelCoord.coordinates[1]
)
const geoPos = new Point({
coordinates: [geox, geoy]
})
// console.log(pixelCoord, ' 像素--->地理 ', geoPos)
return geoPos
}
/**
* 地理坐标转像素坐标
* @param {Point} geoCoord 地理坐标
* @returns {Point} 像素坐标
*/
geoCoordToPixelCoord(geoCoord) {
const { pdfGeoX: x, pdfGeoY: y } = GDALApplyGeoTransform(
this._invToGeoTransforms,
geoCoord.coordinates[0],
geoCoord.coordinates[1]
)
const pixelCoord = new Point({
coordinates: [x, y]
})
// console.log(geoCoord, ' 地理--->像素', pixelCoord)
return pixelCoord
}
}
export default VideoPixelCoordTransforms