The great thing about geospatial metadata standards is that there are so many to choose from. When slinging files about from user to user, it seems that mostly the ESRI stuff (well, the stuff we can pick apart, anyway) is used, plus some sedimentary layers deposited as good ideas from other systems. Commercial GIS systems are much less liberal, because all of them have the inertia of user investment.
Manifold does things its own way. Rather than using broadly standard prj or wld files, Manifold accompanies every exported file with an XML metafile in its own format. I get sent a lot of bitmaps from Manifold, and if I want to do more than view them on the screen, I need to convert the metadata.
Below is a small Awk program to convert a Manifold XML metadata file for a bitmap into an ESRI World file:
#!/bin/awk -f # convert Manifold xml metadata to ESRI world file # nb: this is not a general-purpose XML parser # scruss - 20120508 BEGIN { indata = 0; } /<coordinateSystem>/ { indata = 1; # in metadata section of file } /<\/coordinateSystem>/ { indata = 0; # no longer in metadata } /</ && (indata == 1) { # build array of items sub(/<\/[^>]*>/, "", $0); # remove end tag tagloc=match($0, /<[^>]*>/); if ((RSTART == 0) && (RLENGTH == -1)) { # no match! } else { tag=substr($0, RSTART, RLENGTH); sub(/</, "", tag); # remove < and > from tag sub(/>/, "", tag); value=substr($0, RSTART + RLENGTH); # value is rest of string params[tag] = value; } } END { # output six values for ESRI world file # all the "+ 0.0" stuff is just to force numeric output OFMT="%.10f"; print params["localScaleX"] + 0.0; print params["rotationX"] + 0.0; # these will almost always be zero print params["rotationY"] + 0.0; print (params["localScaleY"] + 0.0) * -1.0; # negate Manifold value print params["localOffsetX"] + 0.0; print params["localOffsetY"] + 0.0; }
Note that I’m doing what you’re supposed never to do — parse XML as if it were just some text format. If Manifold change their file format even slightly, this program will fail. The above seems to work on all the data I’ve thrown at it, although none of those test files included rotation terms. I don’t think I’ve ever actually seen a world file with rotation defined, so this may be a minor limitation.