1
0
Fork 0

Implemented reading point layers to poly2ogr (was used for debugging calc_point_inside()-stuff)

This commit is contained in:
Ralf Gerlich 2008-03-29 12:49:37 +01:00
parent f01a1daa7b
commit 53efe44bfd

View file

@ -46,6 +46,7 @@ bool do_split=false;
OGRDataSource *datasource; OGRDataSource *datasource;
OGRLayer *defaultLayer; OGRLayer *defaultLayer;
OGRLayer *pointsLayer=NULL;
LayerMap layerMap; LayerMap layerMap;
bool endswith(const std::string& s, const std::string& suffix) { bool endswith(const std::string& s, const std::string& suffix) {
@ -85,6 +86,34 @@ OGRLayer* create_layer(const std::string& material) {
return layer; return layer;
} }
OGRLayer* create_pointsLayer() {
OGRLayer* layer;
OGRSpatialReference srs;
srs.SetWellKnownGeogCS("WGS84");
layer=datasource->CreateLayer("points",&srs,wkbPoint,NULL);
if (!layer) {
SG_LOG(SG_GENERAL, SG_ALERT, "Creation of layer 'points' failed");
return NULL;
}
OGRFieldDefn materialField("Material", OFTString);
materialField.SetWidth(128);
OGRFieldDefn fileField("File",OFTString);
fileField.SetWidth(256);
if( layer->CreateField( &materialField ) != OGRERR_NONE ) {
SG_LOG(SG_GENERAL, SG_ALERT, "Creation of field 'Material' failed");
}
if( layer->CreateField( &fileField ) != OGRERR_NONE ) {
SG_LOG(SG_GENERAL, SG_ALERT, "Creation of field 'Material' failed");
}
return layer;
}
OGRLayer* get_layer_for_material(const std::string& material) { OGRLayer* get_layer_for_material(const std::string& material) {
if (!do_split) { if (!do_split) {
if (!defaultLayer) { if (!defaultLayer) {
@ -191,6 +220,41 @@ void process_polygon_file(const std::string& path) {
} }
} }
void process_points_file(const std::string& path) {
SG_LOG(SG_GENERAL, SG_INFO, "Loading points file " << path);
sg_gzifstream in( path );
if (pointsLayer==NULL)
{
pointsLayer=create_pointsLayer();
}
while (!in.eof()) {
std::string material;
double x,y;
in >> x >> y >> material;
if (in.eof())
break;
OGRPoint* point=new OGRPoint(x,y);
OGRFeature* feature;
feature = new OGRFeature( pointsLayer->GetLayerDefn() );
feature->SetField("Material", material.c_str());
feature->SetField("File", path.c_str());
feature->SetGeometry(point);
if( pointsLayer->CreateFeature( feature ) != OGRERR_NONE )
{
SG_LOG(SG_GENERAL, SG_ALERT, "Failed to create feature in shapefile");
}
OGRFeature::DestroyFeature(feature);
}
}
void process_file(const std::string& path) { void process_file(const std::string& path) {
struct stat sbuf; struct stat sbuf;
@ -220,6 +284,9 @@ void process_file(const std::string& path) {
} }
closedir(dir); closedir(dir);
} else if (endswith(path,".pts")) {
// This is a points file
process_points_file(path);
} else if (!endswith(path,".gz") && } else if (!endswith(path,".gz") &&
!endswith(path,".arr") && !endswith(path,".arr") &&
!endswith(path,".fit") && !endswith(path,".fit") &&