Are the binary formats of *.lyr and *.mxd files published?
4 Answers
They're not published, and you're probably not supposed to reverse engineer them and still expect free cookies at the ESRI UC, but they're basically OLE2 Compound Document format files, like MS Word & Excel documents. With a nice tool for cracking them open (e.g. http://www.gemboxsoftware.com/CompoundFile.htm), you can get to the hacking part pretty quickly. With a keen eye and a little knowledge of the ArcObjects object model, you'll be reading interesting data in no time. I've even heard rumors of people creating LYR files from scratch using non-ESRI code.
-
1I suppose you could be able to do this with a huge effort but still, I would consider such implementation to be very fragile for the reasons mentioned in my answer. Aug 2, 2010 at 20:05
-
@petr a reverse engineered implementation is stable in direct correlation to the vendors' needs to maintain backwards compatibility. Aug 3, 2010 at 17:53
-
Good point Matt. While custom extensions will stymie you from a truly complete implementation, usually figuring out data sources and simple rendering options is enough to do what you want to do. The format is not fast-changing for Matt's reasons. Aug 19, 2010 at 3:07
The answer is No.
-
4It would have been shorter, but have to put in at least 15 characters :) Jul 23, 2010 at 2:16
It is not and I guess by nature it cannot be, since an .mxd is essentialy composed by ArcObjects (toolbars, maps, layers, renderers, symbols etc.) serialized via standard IPersistStream mechanism.
With the open ArcObjects ecosystem, where a map can contain lots of custom components each with their own serialization, not to mention changes in serializated data between component versions, I cannot imagine how this would be possible, unfortunately.
if you change the .lyr extension to .zip or .7z and you open it with 7Zip (tested with ver 9.20) you may find 3 files: - Layer - LayerLargeImage (just add .bmp to see it) - LayerSmallImage (just add .bmp to see it)
No idea on how to open the "Layer" file, but a step is done.