Files
sjy01-image-proc/vendor/github.com/airbusgeo/godal/driver.go
2024-10-24 15:46:01 +08:00

159 lines
3.8 KiB
Go

// Copyright 2021 Airbus Defence and Space
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package godal
//DriverName is GDAL driver
type DriverName string
const (
//GTiff GeoTIFF
GTiff DriverName = "GTiff"
//GeoJSON RFCxxxx geojson
GeoJSON DriverName = "GeoJSON"
//Memory in memory driver
Memory DriverName = "Memory"
//VRT is a VRT
VRT DriverName = "VRT"
//Shapefile is an ESRI Shapefile
Shapefile DriverName = "ESRI Shapefile"
//GeoPackage is a geo-package
GeoPackage DriverName = "GPKG"
//JP2KAK is a Kakadu Jpeg2000
JP2KAK DriverName = "JP2KAK"
//OpenJPEG is an OpenJPEG JPEG2000
OpenJPEG DriverName = "OpenJPEG"
//DIMAP is a Dimap
DIMAP DriverName = "DIMAP"
//HFA is an erdas img
HFA DriverName = "HFA"
//Mitab is a mapinfo mif/tab file
Mitab DriverName = "Mitab"
//CSV comma-separated values driver
CSV DriverName = "CSV"
)
type driverMapping struct {
rasterName string
vectorName string
rasterRegister string
vectorRegister string
}
var driverMappings = map[DriverName]driverMapping{
GTiff: {
rasterName: "GTiff",
rasterRegister: "GDALRegister_GTiff",
},
Memory: {
rasterName: "MEM",
vectorName: "Memory",
rasterRegister: "GDALRegister_MEM",
vectorRegister: "RegisterOGRMEM",
},
GeoJSON: {
vectorName: "GeoJSON",
vectorRegister: "RegisterOGRGeoJSON",
},
VRT: {
rasterName: "VRT",
vectorName: "OGR_VRT",
rasterRegister: "GDALRegister_VRT",
vectorRegister: "RegisterOGRVRT",
},
Shapefile: {
vectorName: "ESRI Shapefile",
vectorRegister: "RegisterOGRShape",
},
GeoPackage: {
rasterName: "GPKG",
vectorName: "GPKG",
rasterRegister: "RegisterOGRGeoPackage",
vectorRegister: "RegisterOGRGeoPackage",
},
JP2KAK: {
rasterName: "JP2KAK",
rasterRegister: "GDALRegister_JP2KAK",
},
OpenJPEG: {
rasterName: "OpenJPEG",
rasterRegister: "GDALRegister_JP2OpenJPEG",
},
DIMAP: {
rasterName: "DIMAP",
rasterRegister: "GDALRegister_DIMAP",
},
HFA: {
rasterName: "HFA",
rasterRegister: "GDALRegister_HFA",
},
Mitab: {
vectorName: "Mapinfo File",
vectorRegister: "RegisterOGRTAB",
},
CSV: {
vectorName: "CSV",
vectorRegister: "RegisterOGRCSV",
},
}
func (dn DriverName) setDatasetVectorTranslateOpt(to *dsVectorTranslateOpts) {
to.driver = dn
}
func (dn DriverName) setDatasetTranslateOpt(to *dsTranslateOpts) {
to.driver = dn
}
func (dn DriverName) setDatasetWarpOpt(to *dsWarpOpts) {
to.driver = dn
}
func (dn DriverName) setRasterizeOpt(to *rasterizeOpts) {
to.driver = dn
}
type driversOpt struct {
drivers []string
}
//Drivers specifies the list of drivers that are allowed to try opening the dataset
func Drivers(drivers ...string) interface {
OpenOption
} {
return driversOpt{drivers}
}
func (do driversOpt) setOpenOpt(oo *openOpts) {
oo.drivers = append(oo.drivers, do.drivers...)
}
type driverOpenOption struct {
oo []string
}
//DriverOpenOption adds a list of Open Options (-oo switch) to the open command. Each keyval must
//be provided in a "KEY=value" format
func DriverOpenOption(keyval ...string) interface {
OpenOption
BuildVRTOption
} {
return driverOpenOption{keyval}
}
func (doo driverOpenOption) setOpenOpt(oo *openOpts) {
oo.options = append(oo.options, doo.oo...)
}
func (doo driverOpenOption) setBuildVRTOpt(bvo *buildVRTOpts) {
bvo.openOptions = append(bvo.openOptions, doo.oo...)
}