package producer 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() }