62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package imageproc
|
||
|
||
import (
|
||
"os"
|
||
"time"
|
||
|
||
"github.com/airbusgeo/godal"
|
||
log "github.com/sirupsen/logrus"
|
||
"starwiz.cn/sjy01/image-proc/pkg/calculator"
|
||
)
|
||
|
||
func setGeoTransform(ds *godal.Dataset, topLeftLng, topLeftLat, resolution float64) {
|
||
// 转换分辨率(米到度)
|
||
resLat := resolution / calculator.MetersPerDegreeLatitude
|
||
resLng := calculator.MetersToDegreesLongitude(resolution, topLeftLat)
|
||
// 设置地理变换(假设左上角坐标为(0,0),PAN每个像素分辨率为1.2米)
|
||
geotransform := [6]float64{
|
||
topLeftLng, // top left x
|
||
resLng, // w-e pixel resolution
|
||
0, // rotation, 0 if image is "north up"
|
||
topLeftLat, // top left y
|
||
0, // rotation, 0 if image is "north up"
|
||
-resLat, // n-s pixel resolution (negative value)
|
||
}
|
||
err := ds.SetGeoTransform(geotransform)
|
||
if err != nil {
|
||
log.Errorf("Failed to set GeoTransform: %v", err)
|
||
return
|
||
}
|
||
|
||
// 设置投影为 WGS84
|
||
srs, err := godal.NewSpatialRefFromEPSG(4326) // gdal.CreateSpatialReference("")
|
||
if err != nil {
|
||
log.Errorf("Failed to set spatial reference: %v", err)
|
||
return
|
||
}
|
||
|
||
projWKT, err := srs.WKT()
|
||
if err != nil {
|
||
log.Errorf("Failed to convert spatial reference to WKT: %v", err)
|
||
return
|
||
}
|
||
|
||
err = ds.SetProjection(projWKT)
|
||
if err != nil {
|
||
log.Errorf("Failed to set projection: %v", err)
|
||
}
|
||
|
||
// 设置一些常见的元数据(可选)
|
||
ds.SetMetadata("TIFFTAG_DATETIME", time.Now().String())
|
||
ds.SetMetadata("TIFFTAG_SOFTWARE", "StarWiz-SJY01-IMAGE-PROC")
|
||
}
|
||
|
||
func sizeOfFile(file string) int64 {
|
||
fileInfo, err := os.Stat(file)
|
||
if err != nil {
|
||
log.Errorf("Failed to get file size: %v", err)
|
||
return 0
|
||
}
|
||
return fileInfo.Size()
|
||
}
|