159 lines
3.8 KiB
Go
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...)
|
|
}
|