add dem
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -9,3 +9,5 @@ bin
|
|||||||
log
|
log
|
||||||
deployment
|
deployment
|
||||||
build/go
|
build/go
|
||||||
|
*.tif
|
||||||
|
*.tiff
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"starwiz.cn/sjy01/image-proc/pkg/calculator"
|
"starwiz.cn/sjy01/image-proc/pkg/calculator"
|
||||||
"starwiz.cn/sjy01/image-proc/pkg/config"
|
"starwiz.cn/sjy01/image-proc/pkg/config"
|
||||||
|
"starwiz.cn/sjy01/image-proc/pkg/dem"
|
||||||
producer "starwiz.cn/sjy01/image-proc/pkg/producer"
|
producer "starwiz.cn/sjy01/image-proc/pkg/producer"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -35,6 +36,9 @@ var procCmd = &cobra.Command{
|
|||||||
|
|
||||||
logrus.SetLevel(config.GCONFIG.Log.LogLevel)
|
logrus.SetLevel(config.GCONFIG.Log.LogLevel)
|
||||||
|
|
||||||
|
// dem
|
||||||
|
dem.Dem1KmLT = dem.NewDem1Km(config.GCONFIG.Dem.Dem1Km)
|
||||||
|
|
||||||
calculator.EOP = calculator.NewEOPTable()
|
calculator.EOP = calculator.NewEOPTable()
|
||||||
calculator.EOP.Load(eopData, eopp5Line)
|
calculator.EOP.Load(eopData, eopp5Line)
|
||||||
|
|
||||||
|
|||||||
@@ -18,3 +18,6 @@ radiation:
|
|||||||
max_hist_level: 0.6
|
max_hist_level: 0.6
|
||||||
hf_band_stop_width: 24 # 带阻滤波器宽度
|
hf_band_stop_width: 24 # 带阻滤波器宽度
|
||||||
scene_moment_matching: false
|
scene_moment_matching: false
|
||||||
|
|
||||||
|
dem:
|
||||||
|
dem_1km: "dem/gdlebm.tif"
|
||||||
@@ -10,6 +10,7 @@ type Config struct {
|
|||||||
Radiation RadiationConfig `yaml:"radiation" mapstructure:"radiation"`
|
Radiation RadiationConfig `yaml:"radiation" mapstructure:"radiation"`
|
||||||
BrowserImg BrowserImgConfig `yaml:"browser_img" mapstructure:"browser_img"`
|
BrowserImg BrowserImgConfig `yaml:"browser_img" mapstructure:"browser_img"`
|
||||||
Log LogConfig `yaml:"log" mapstructure:"log"`
|
Log LogConfig `yaml:"log" mapstructure:"log"`
|
||||||
|
Dem DemConfig `yaml:"dem" mapstructure:"dem"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type LogConfig struct {
|
type LogConfig struct {
|
||||||
@@ -39,6 +40,12 @@ type RadiationConfig struct {
|
|||||||
HFBandStopWidth int `yaml:"hf_band_stop_width" mapstructure:"hf_band_stop_width"`
|
HFBandStopWidth int `yaml:"hf_band_stop_width" mapstructure:"hf_band_stop_width"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type DemConfig struct {
|
||||||
|
DemType string `yaml:"dem_type" mapstructure:"dem_type"`
|
||||||
|
DemDir string `yaml:"dem_dir" mapstructure:"dem_dir"`
|
||||||
|
Dem1Km string `yaml:"dem_1km" mapstructure:"dem_1km"`
|
||||||
|
}
|
||||||
|
|
||||||
type BrowserImgConfig struct {
|
type BrowserImgConfig struct {
|
||||||
Enhancement map[string]string `yaml:"enhancement" mapstructure:"enhancement"`
|
Enhancement map[string]string `yaml:"enhancement" mapstructure:"enhancement"`
|
||||||
CumulativeCutLower float64 `yaml:"cumulative_cut_lower" mapstructure:"cumulative_cut_lower"`
|
CumulativeCutLower float64 `yaml:"cumulative_cut_lower" mapstructure:"cumulative_cut_lower"`
|
||||||
@@ -82,5 +89,10 @@ func init() {
|
|||||||
CumulativeCutLower: 0.01,
|
CumulativeCutLower: 0.01,
|
||||||
CumulativeCutUpper: 0.99,
|
CumulativeCutUpper: 0.99,
|
||||||
},
|
},
|
||||||
|
Dem: DemConfig{
|
||||||
|
DemType: "SRTM",
|
||||||
|
DemDir: "dem/SRTM",
|
||||||
|
Dem1Km: "dem/gdlebm.tif",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
70
pkg/dem/dem.go
Normal file
70
pkg/dem/dem.go
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
package dem
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math"
|
||||||
|
|
||||||
|
"github.com/airbusgeo/godal"
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Dem1Km struct {
|
||||||
|
File string
|
||||||
|
LT [][]float32
|
||||||
|
width, height int
|
||||||
|
wUnit float32 // degree per pixel
|
||||||
|
hUnit float32 // degree per pixel
|
||||||
|
}
|
||||||
|
|
||||||
|
var Dem1KmLT *Dem1Km
|
||||||
|
|
||||||
|
func NewDem1Km(file string) *Dem1Km {
|
||||||
|
d := &Dem1Km{
|
||||||
|
File: file,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := d.Load(); err != nil {
|
||||||
|
log.Error("cannot load DEM file", err)
|
||||||
|
}
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Dem1Km) Load() error {
|
||||||
|
hDataset, err := godal.Open(d.File)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
band := hDataset.Bands()[0]
|
||||||
|
|
||||||
|
structure := band.Structure()
|
||||||
|
|
||||||
|
for y := 1; y <= structure.SizeY; y++ {
|
||||||
|
scanline := make([]float32, structure.SizeX)
|
||||||
|
err = band.Read(0, y, scanline, structure.SizeX, 1)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
d.LT = append(d.LT, scanline)
|
||||||
|
}
|
||||||
|
|
||||||
|
d.wUnit = 360.0 / float32(structure.SizeX)
|
||||||
|
d.hUnit = 180.0 / float32(structure.SizeY)
|
||||||
|
d.width = structure.SizeX
|
||||||
|
d.height = structure.SizeY
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Dem1Km) Elevation(lng, lat float64) float32 {
|
||||||
|
lng = math.Abs(lng + 180.0)
|
||||||
|
lat = math.Abs(lat - 90.0)
|
||||||
|
w := int(lng / float64(d.wUnit))
|
||||||
|
h := int(lat / float64(d.hUnit))
|
||||||
|
|
||||||
|
if w > d.width-1 || h > d.height-1 {
|
||||||
|
return 0.0
|
||||||
|
}
|
||||||
|
|
||||||
|
return d.LT[h][w]
|
||||||
|
|
||||||
|
}
|
||||||
@@ -150,3 +150,27 @@ func setGeoTransform(ds *godal.Dataset, topLeftLng, topLeftLat, resolution float
|
|||||||
ds.SetMetadata("TIFFTAG_DATETIME", time.Now().String())
|
ds.SetMetadata("TIFFTAG_DATETIME", time.Now().String())
|
||||||
ds.SetMetadata("TIFFTAG_SOFTWARE", "StarWiz-SJY01-IMAGE-PROC")
|
ds.SetMetadata("TIFFTAG_SOFTWARE", "StarWiz-SJY01-IMAGE-PROC")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ReadTiff(tifFile string) ([][][]float32, error) {
|
||||||
|
hDataset, err := godal.Open(tifFile)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var data [][][]float32
|
||||||
|
for _, band := range hDataset.Bands() {
|
||||||
|
structure := band.Structure()
|
||||||
|
var dataBand [][]float32
|
||||||
|
for y := 1; y <= structure.SizeY; y++ {
|
||||||
|
scanline := make([]float32, structure.SizeX)
|
||||||
|
err = band.Read(0, y, scanline, structure.SizeX, 1)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
dataBand = append(dataBand, scanline)
|
||||||
|
}
|
||||||
|
|
||||||
|
data = append(data, dataBand)
|
||||||
|
}
|
||||||
|
return data, nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user