i noticed that the pgsnapshot schema discards ways when they have
fewer than 2 nodes as no valid linestring would be able to be built.
this was causing me problems with missing ways in tag searches, so i
changed it so that those geometries would just be null (attached
patch).
is this useful to anyone else? i had a look around the module and it
appears that having null geometries shouldn't cause any problems, but
i didn't want to just apply the patch just in case.
cheers,
matt
Index: pgsnapshot/src/org/openstreetmap/osmosis/pgsnapshot/v0_6/impl/CopyFilesetBuilder.java
===================================================================
--- pgsnapshot/src/org/openstreetmap/osmosis/pgsnapshot/v0_6/impl/CopyFilesetBuilder.java (revision 25242)
+++ pgsnapshot/src/org/openstreetmap/osmosis/pgsnapshot/v0_6/impl/CopyFilesetBuilder.java (working copy)
@@ -173,31 +173,33 @@
for (WayNode wayNode : way.getWayNodes()) {
nodeIds.add(wayNode.getNodeId());
}
+
+ // Ways with a single node will be entered as NULL geometries.
+ wayWriter.writeField(way.getId());
+ wayWriter.writeField(way.getVersion());
+ wayWriter.writeField(way.getUser().getId());
+ wayWriter.writeField(way.getTimestamp());
+ wayWriter.writeField(way.getChangesetId());
+ wayWriter.writeField(buildTags(way));
+ wayWriter.writeField(nodeIds);
+ if (enableBboxBuilder) {
+ wayWriter.writeField(wayGeometryBuilder.createWayBbox(way));
+ }
+ if (enableLinestringBuilder) {
+ if (way.getWayNodes().size() > 1) {
+ wayWriter.writeField(wayGeometryBuilder.createWayLinestring(way));
+ } else {
+ wayWriter.writeField((String)null);
+ }
+ }
+ wayWriter.endRecord();
- // Ignore ways with a single node because they can't be loaded into postgis.
- if (way.getWayNodes().size() > 1) {
- wayWriter.writeField(way.getId());
- wayWriter.writeField(way.getVersion());
- wayWriter.writeField(way.getUser().getId());
- wayWriter.writeField(way.getTimestamp());
- wayWriter.writeField(way.getChangesetId());
- wayWriter.writeField(buildTags(way));
- wayWriter.writeField(nodeIds);
- if (enableBboxBuilder) {
- wayWriter.writeField(wayGeometryBuilder.createWayBbox(way));
- }
- if (enableLinestringBuilder) {
- wayWriter.writeField(wayGeometryBuilder.createWayLinestring(way));
- }
- wayWriter.endRecord();
-
- sequenceId = 0;
- for (WayNode wayNode : way.getWayNodes()) {
- wayNodeWriter.writeField(way.getId());
- wayNodeWriter.writeField(wayNode.getNodeId());
- wayNodeWriter.writeField(sequenceId++);
- wayNodeWriter.endRecord();
- }
+ sequenceId = 0;
+ for (WayNode wayNode : way.getWayNodes()) {
+ wayNodeWriter.writeField(way.getId());
+ wayNodeWriter.writeField(wayNode.getNodeId());
+ wayNodeWriter.writeField(sequenceId++);
+ wayNodeWriter.endRecord();
}
}
Index: package/script/pgsnapshot_schema_0.6.sql
===================================================================
--- package/script/pgsnapshot_schema_0.6.sql (revision 25242)
+++ package/script/pgsnapshot_schema_0.6.sql (working copy)
@@ -120,11 +120,15 @@
result bigint[];
wayNodeRow way_nodes%ROWTYPE;
wayNodes ways.nodes%TYPE;
+ maxIdx int;
BEGIN
FOR wayNodes IN SELECT bw.nodes FROM bbox_ways bw LOOP
+ maxIdx := array_upper(wayNodes, 1);
+ IF maxIdx is not null THEN
FOR i IN 1 .. array_upper(wayNodes, 1) LOOP
INSERT INTO bbox_way_nodes (id) VALUES (wayNodes[i]);
END LOOP;
+ END IF;
END LOOP;
END;
$$ LANGUAGE plpgsql;
_______________________________________________
osmosis-dev mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/osmosis-dev