Я использую скрипт python gdal_polygonize для полигонализации растрового изображения и сохранения полигонов в базе данных postgres. Пока все работало нормально.Информация о проекции python gdal
gdal_polygonize.py abia.tif -f PostgreSQL PG:"dbname='abiaDB' host='127.0.0.1' port='5434' user='postgres' password='****'" mylayer
После сохранения данных в базе данных я экспортировать его оттуда как GeoJSON файл, который я хочу, чтобы отобразить с Leaflat. Поэтому Leaflat работает только с проекцией EPSG: 4326. Поэтому я использовал плагин proj4.js, который выполняет преобразование из зоны Гаусса-Крюгера 4 EPSG: 31468. Так что я должен определить исходную проекцию Мануалы в коде, как что:
proj4.defs('EPSG:31468', '+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs');
L.Proj.geoJson(data, {
'pointToLayer': function(feature, latlng) {
return L.marker(latlng).bindPopup(feature.properties.name);
}
}).addTo(map);
Есть ли способ, что я могу сказать, сценарий питона, что он также должен хранить информацию проекционной в базе данных. Моя цель состоит в том, что визуализация более автоматизирована, поэтому, когда есть другое изображение, с другой проекцией, он должен получить информацию о проекции из базы данных. Есть ли способ, который я могу сказать функции gdal_polygonize, чтобы он хранил информацию в дополнительной строке или что-то в этом роде?
Polygonize Java
gdal.AllRegister();
ogr.RegisterAll();
args = gdal.GeneralCmdLineProcessor(args);
//Open source file
Dataset hDataset = gdal.Open(args[0], gdalconstConstants.GA_ReadOnly);
Band rasterBand = hDataset.GetRasterBand(1);
Band maskBand = rasterBand.GetMaskBand();
Driver driver = ogr.GetDriverByName("Memory");
DataSource dataSource = driver.CreateDataSource("mem");
SpatialReference srs = null;
if(!hDataset.GetProjectionRef().isEmpty())
srs = new SpatialReference(hDataset.GetProjectionRef());
Layer outputLayer = dataSource.CreateLayer("mylayer", srs);
FieldDefn field_def = new FieldDefn("DN",ogr.OFTInteger);
outputLayer.CreateField(field_def);
gdal.Polygonize(rasterBand, maskBand, outputLayer, 0, new Vector<>(), new TermProgressCallback());
//Transformation
DataSource dataDest = driver.CreateDataSource("mem2");
//Create destination projection
SpatialReference dst = new SpatialReference();
dst.ImportFromEPSG(4326);
CoordinateTransformation ct = CoordinateTransformation.CreateCoordinateTransformation(srs, dst);
//Write data to database
DataSource dataSourceDb = ogr.Open("PG:dbname='abiaDB' host='127.0.0.1' port='5434' user='postgres' password='****'", 1);
dataSourceDb.CopyLayer(outputLayer, "mylayer");
Привет, спасибо за Ваш ответ. Я сделал это на Java, добавил код выше. В этом примере я пишу после полигонизации результата в базу данных. У вас есть пример, как сделать преобразование, прежде чем записывать его в базу данных? – user2644964
Хорошо, я делаю вещи с сохранением результата в mem и записываю его в базу данных. У меня только проблемы, связанные с трансформацией. – user2644964