For example the buildings in Hamburg, Germany:
layer=$1
for file in *.xml
do
if [ -f "${layer}".spatialite ]
then
ogr2ogr -f "SQLite" -update -append "${layer}".spatialite "${file}" "${layer}" -dsco SPATIALITE=YES
else
ogr2ogr -a_srs EPSG:25832 -f "SQLite" "${layer}".spatialite "${file}" "${layer}" -dsco SPATIALITE=YES
fi
done
Remove the -dsco SPATIALITE=YES
and change the output filename for SQLite. QGIS can work with both.
$ bash mergexmltospatialite.sh AX_Gebaeude
Be aware that Spatialite is much more sensitive to geometric problems. You might get things like
ERROR 1: sqlite3_step() failed:
ax_gebaeude.GEOMETRY violates Geometry constraint [geom-type or SRID not allowed] (19)
ERROR 1: ROLLBACK transaction failed: cannot rollback - no transaction is active
ERROR 1: Unable to write feature 1712 from layer AX_Gebaeude.ERROR 1: Terminating translation prematurely after failed translation of layer AX_Gebaeude (use -skipfailures to skip errors)
but on the other hand, you get spatial indexing which makes queries or high zoom interaction much quicker.
Be aware that if you try to merge files into a Shapefile and fields are getting truncated, those fields will only be filled with data for the first file you merge. On the later files OGR will try to match the input field names to the merged file’s fieldnames, notice the difference and discard them. If you still want to convert to Shapefiles, check out the -fieldTypeToString IntegerList,StringList
options.