41 static ossimTrace traceDebug(
"ossimKmlSuperOverlayWriter:debug");
112 static const char MODULE[] =
"ossimKmlSuperOverlayWriter::writeStream";
117 << MODULE <<
" entered..." << endl;
121 if (bands != 1 && bands != 3)
124 << MODULE <<
" Range Error:" 125 <<
"\nInvalid number of input bands! Must be one or three." 126 <<
"\nInput bands = " << bands
127 <<
"\nReturning from method." << endl;
152 kwl.
add(
"add_alpha_channel",
"true",
true);
219 if ( xsize >= ysize )
222 while (dtilexsize > 400)
224 dtilexsize = dtilexsize/2;
234 while (dtileysize > 400)
236 dtileysize = dtileysize/2;
244 std::vector<ossim_float64> zoomScaleX;
245 std::vector<ossim_float64> zoomScaleY;
246 for (
int zoom = 0; zoom < maxzoom + 1; zoom++)
248 zoomScaleX.push_back(scale.
x * pow(2.0, (maxzoom - zoom)));
249 zoomScaleY.push_back(scale.
y * pow(2.0, (maxzoom - zoom)));
253 std::vector<ossimString> dirVector;
254 std::vector<ossimString> fileVector;
255 bool isKmlGenerated =
false;
258 tmpFileName =
ossimString(outDir +
"/" +
"tmp.kml");
260 fileVector.push_back(tmpFileName);
271 for (
ossim_int32 zoom = maxzoom; zoom >= 0; --zoom)
279 xloop = xloop>0 ? xloop : 1;
280 yloop = yloop>0 ? yloop : 1;
343 dirVector.push_back(zoomDir);
349 fileVector.push_back(filename);
357 fileVector.push_back(childKmlfile);
360 isKmlGenerated =
generateChildKml(childKmlfile, zoom, yloop, ix, iy, dxsize, dysize, xsize, ysize, maxzoom, projDup, fileExt);
383 std::vector<ossimFilename> filesInDir;
384 if(dir.
open(zoomDir))
394 filesInDir.push_back(file);
409 cmd += zoomDir +
"\"";
410 std::system(cmd.
c_str());
415 for (
int zoom = maxzoom; zoom >= 0; --zoom)
423 cmd += zoomZipDir +
"\"";
424 std::system(cmd.
c_str());
437 const char* prefix)
const 470 <<
"ossimKmlSuperOverlayWriter::open()\n" 471 <<
"File " <<
theFilename << (result ?
" opened" :
" not opened")
508 (imageType ==
"image/kmlsuperoverlay") )
538 std::vector<ossimString>& propertyNames)
const 550 ossimIpt ul(dxsize*ix, dysize*(iy+1));
551 ossimIpt ur(dxsize*(ix+1), dysize*(iy+1));
552 ossimIpt lr(dxsize*(ix+1), dysize*iy);
568 FILE* fp = fopen(filename.
c_str(),
"wb");
577 fprintf(fp,
"<kml xmlns=\"http://earth.google.com/kml/2.1\">\n");
578 fprintf(fp,
"\t<Document>\n");
579 fprintf(fp,
"\t\t<name>%s</name>\n", tmpfilename.
c_str());
580 fprintf(fp,
"\t\t<description></description>\n");
581 fprintf(fp,
"\t\t<Style>\n");
582 fprintf(fp,
"\t\t\t<ListStyle id=\"hideChildren\">\n");
583 fprintf(fp,
"\t\t\t\t<listItemType>checkHideChildren</listItemType>\n");
584 fprintf(fp,
"\t\t\t</ListStyle>\n");
585 fprintf(fp,
"\t\t</Style>\n");
586 fprintf(fp,
"\t\t<Region>\n \t\t<LatLonAltBox>\n");
587 fprintf(fp,
"\t\t\t\t<north>%f</north>\n", north);
588 fprintf(fp,
"\t\t\t\t<south>%f</south>\n", south);
589 fprintf(fp,
"\t\t\t\t<east>%f</east>\n", east);
590 fprintf(fp,
"\t\t\t\t<west>%f</west>\n", west);
591 fprintf(fp,
"\t\t\t</LatLonAltBox>\n");
592 fprintf(fp,
"\t\t</Region>\n");
593 fprintf(fp,
"\t\t<NetworkLink>\n");
594 fprintf(fp,
"\t\t\t<open>1</open>\n");
595 fprintf(fp,
"\t\t\t<Region>\n");
596 fprintf(fp,
"\t\t\t\t<Lod>\n");
597 fprintf(fp,
"\t\t\t\t\t<minLodPixels>%d</minLodPixels>\n", minlodpixels);
598 fprintf(fp,
"\t\t\t\t\t<maxLodPixels>-1</maxLodPixels>\n");
599 fprintf(fp,
"\t\t\t\t</Lod>\n");
600 fprintf(fp,
"\t\t\t\t<LatLonAltBox>\n");
601 fprintf(fp,
"\t\t\t\t\t<north>%f</north>\n", north);
602 fprintf(fp,
"\t\t\t\t\t<south>%f</south>\n", south);
603 fprintf(fp,
"\t\t\t\t\t<east>%f</east>\n", east);
604 fprintf(fp,
"\t\t\t\t\t<west>%f</west>\n", west);
605 fprintf(fp,
"\t\t\t\t</LatLonAltBox>\n");
606 fprintf(fp,
"\t\t\t</Region>\n");
607 fprintf(fp,
"\t\t\t<Link>\n");
608 fprintf(fp,
"\t\t\t\t<href>0/0/0.kml</href>\n");
609 fprintf(fp,
"\t\t\t\t<viewRefreshMode>onRegion</viewRefreshMode>\n");
610 fprintf(fp,
"\t\t\t</Link>\n");
611 fprintf(fp,
"\t\t</NetworkLink>\n");
612 fprintf(fp,
"\t</Document>\n");
613 fprintf(fp,
"</kml>\n");
633 ossimIpt ul(dxsize*ix, dysize*(iy+1));
634 ossimIpt ur(dxsize*(ix+1), dysize*(iy+1));
635 ossimIpt lr(dxsize*(ix+1), dysize*iy);
673 upperleftT = ulg.
lon;
676 lowerleftT = llg.
lon;
677 leftbottomT = llg.
lat;
679 lowerrightT = lrg.
lon;
680 rightbottomT = lrg.
lat;
682 upperrightT = urg.
lon;
686 std::vector<ossim_int32> xchildren;
687 std::vector<ossim_int32> ychildern;
688 std::vector<ossim_int32> ychildernIndex;
691 if ( zoom < maxzoom )
693 ossim_float64 zareasize = pow(2.0, (maxzoom - zoom - 1))*dxsize;
694 ossim_float64 zareasize1 = pow(2.0, (maxzoom - zoom - 1))*dysize;
695 xchildren.push_back(ix*2);
700 xchildren.push_back(ix*2+1);
703 ychildern.push_back(iy*2);
708 ychildern.push_back(iy*2+1);
711 ychildernIndex.push_back(yIndex*2);
716 ychildernIndex.push_back(yIndex*2+1);
721 FILE* fp = fopen(filename.
c_str(),
"wb");
727 fprintf(fp,
"<kml xmlns=\"http://earth.google.com/kml/2.1\" xmlns:gx=\"http://www.google.com/kml/ext/2.2\">\n");
728 fprintf(fp,
"\t<Document>\n");
729 fprintf(fp,
"\t\t<name>%d/%d/%d.kml</name>\n", zoom, ix, yIndex);
730 fprintf(fp,
"\t\t<Style>\n");
731 fprintf(fp,
"\t\t\t<ListStyle id=\"hideChildren\">\n");
732 fprintf(fp,
"\t\t\t\t<listItemType>checkHideChildren</listItemType>\n");
733 fprintf(fp,
"\t\t\t</ListStyle>\n");
734 fprintf(fp,
"\t\t</Style>\n");
735 fprintf(fp,
"\t\t<Region>\n");
736 fprintf(fp,
"\t\t\t<Lod>\n");
737 fprintf(fp,
"\t\t\t\t<minLodPixels>%d</minLodPixels>\n", 128);
738 fprintf(fp,
"\t\t\t\t<maxLodPixels>%d</maxLodPixels>\n", maxLodPix);
739 fprintf(fp,
"\t\t\t</Lod>\n");
740 fprintf(fp,
"\t\t\t<LatLonAltBox>\n");
741 fprintf(fp,
"\t\t\t\t<north>%f</north>\n", tnorth);
742 fprintf(fp,
"\t\t\t\t<south>%f</south>\n", tsouth);
743 fprintf(fp,
"\t\t\t\t<east>%f</east>\n", teast);
744 fprintf(fp,
"\t\t\t\t<west>%f</west>\n", twest);
745 fprintf(fp,
"\t\t\t</LatLonAltBox>\n");
746 fprintf(fp,
"\t\t</Region>\n");
747 fprintf(fp,
"\t\t<GroundOverlay>\n");
748 fprintf(fp,
"\t\t\t<drawOrder>%d</drawOrder>\n", zoom);
749 fprintf(fp,
"\t\t\t<Icon>\n");
750 fprintf(fp,
"\t\t\t\t<href>%d%s</href>\n", yIndex, fileExt.
c_str());
751 fprintf(fp,
"\t\t\t</Icon>\n");
752 fprintf(fp,
"\t\t\t<gx:LatLonQuad>\n");
753 fprintf(fp,
"\t\t\t\t<coordinates>\n");
754 fprintf(fp,
"\t\t\t\t\t%f, %f, 0\n", lowerleftT, leftbottomT);
755 fprintf(fp,
"\t\t\t\t\t%f, %f, 0\n", lowerrightT, rightbottomT);
756 fprintf(fp,
"\t\t\t\t\t%f, %f, 0\n", upperrightT, righttopT);
757 fprintf(fp,
"\t\t\t\t\t%f, %f, 0\n", upperleftT, lefttopT);
758 fprintf(fp,
"\t\t\t\t</coordinates>\n");
759 fprintf(fp,
"\t\t\t</gx:LatLonQuad>\n");
760 fprintf(fp,
"\t\t</GroundOverlay>\n");
765 int cx = xchildren[i];
769 ossim_int32 cyIndex = ychildernIndex[ychildernIndex.size()-j-1];
771 ossimIpt ulc(dxsize*cx, dysize*(cy+1));
772 ossimIpt urc(dxsize*(cx+1), dysize*(cy+1));
773 ossimIpt lrc(dxsize*(cx+1), dysize*cy);
796 fprintf(fp,
"\t\t<NetworkLink>\n");
797 fprintf(fp,
"\t\t\t<name>%d/%d/%d%s</name>\n", zoom+1, cx, cyIndex, fileExt.
c_str());
798 fprintf(fp,
"\t\t\t<Region>\n");
799 fprintf(fp,
"\t\t\t\t<Lod>\n");
800 fprintf(fp,
"\t\t\t\t\t<minLodPixels>128</minLodPixels>\n");
801 fprintf(fp,
"\t\t\t\t\t<maxLodPixels>-1</maxLodPixels>\n");
802 fprintf(fp,
"\t\t\t\t</Lod>\n");
803 fprintf(fp,
"\t\t\t\t<LatLonAltBox>\n");
804 fprintf(fp,
"\t\t\t\t\t<north>%f</north>\n", cnorth);
805 fprintf(fp,
"\t\t\t\t\t<south>%f</south>\n", csouth);
806 fprintf(fp,
"\t\t\t\t\t<east>%f</east>\n", ceast);
807 fprintf(fp,
"\t\t\t\t\t<west>%f</west>\n", cwest);
808 fprintf(fp,
"\t\t\t\t</LatLonAltBox>\n");
809 fprintf(fp,
"\t\t\t</Region>\n");
810 fprintf(fp,
"\t\t\t<Link>\n");
811 fprintf(fp,
"\t\t\t\t<href>../../%d/%d/%d.kml</href>\n", zoom+1, cx, cyIndex);
812 fprintf(fp,
"\t\t\t\t<viewRefreshMode>onRegion</viewRefreshMode>\n");
813 fprintf(fp,
"\t\t\t\t<viewFormat/>\n");
814 fprintf(fp,
"\t\t\t</Link>\n");
815 fprintf(fp,
"\t\t</NetworkLink>\n");
819 fprintf(fp,
"\t</Document>\n");
820 fprintf(fp,
"</kml>\n");
827 zipFile zipfile = zipOpen(targetFile.
c_str(), 0);
832 "Unable to open target zip file..");
836 std::vector<ossimString>::iterator v1_Iter;
837 for(v1_Iter = srcFiles.begin(); v1_Iter != srcFiles.end(); v1_Iter++)
842 std::string relativeFileReadPath = fileRead;
849 relativeFileReadPath.erase(f, remNumChars + 1);
853 std::basic_string<char>::iterator iter1;
854 for (iter1 = relativeFileReadPath.begin(); iter1 != relativeFileReadPath.end(); iter1++)
856 int f = relativeFileReadPath.find(
"\\");
859 relativeFileReadPath.replace(f, 1,
"/");
866 if (zipOpenNewFileInZip(zipfile, relativeFileReadPath.c_str(), 0, 0, 0, 0, 0, 0, Z_DEFLATED, Z_DEFAULT_COMPRESSION) != ZIP_OK)
870 "Unable to create file within the zip file..");
876 if (!inFile.is_open())
880 "Could not open source file..");
887 "Error reading source file..");
892 std::string fileData;
893 const unsigned int bufSize = 1024;
897 inFile.read(buf, bufSize);
898 fileData.append(buf, inFile.gcount());
899 }
while (!inFile.eof() && inFile.good());
901 if (zipWriteInFileInZip(zipfile, static_cast<const void*>(fileData.data()), static_cast<unsigned int>(fileData.size())) != ZIP_OK )
905 "Could not write to file within zip file..");
910 if ( zipCloseFileInZip(zipfile) != ZIP_OK )
914 "Could not close file written within zip file..");
919 zipClose(zipfile, 0);
OSSIMDLLEXPORT void ossimSetError(const char *className, ossim_int32 error, const char *fmtString=0,...)
virtual const ossimDpt & getDecimalDegreesPerPixel() const
Returns decimal degrees per pixel as an ossimDpt with "x" representing longitude and "y" representing...
ossimImageFileWriter * createWriterFromExtension(const ossimString &fileExtension) const
virtual void slaveProcessTiles()
virtual void setOutputImageType(ossim_int32 type)
virtual bool isOpen() const
virtual ossimObject * dup() const =0
std::basic_fstream< char > fstream
Class for char mixed input and output file streams.
static bool remove(const ossimFilename &pathname)
Removes pathname from filesystem if supported by platform.
ossimKmlSuperOverlayWriter()
default constructor
std::basic_stringstream< char > stringstream
Class for char mixed input and output memory streams.
void generateTile(ossimString filename, ossim_int32 ix, ossim_int32 iy, ossim_int32 dxsize, ossim_int32 dysize)
virtual bool isMaster() const
Represents serializable keyword/value map.
virtual void setToStartOfSequence()
static const ossimErrorCode OSSIM_OK
virtual ossim_uint32 getNumberOfOutputBands() const
Returns the number of bands in a tile returned from this TileSource.
virtual ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
bool getFirst(ossimFilename &filename, int flags=OSSIM_DIR_DEFAULT)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
ossim_uint32 height() const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
ossimIrect theAreaOfInterest
static ossimImageWriterFactoryRegistry * instance()
Visitor to update view and then propagate property event to outputs.
static ossimString toString(bool aValue)
Numeric to string methods.
virtual bool isGeographic() const
const ossimIpt & ul() const
static const ossimErrorCode OSSIM_ERROR
virtual void setDecimalDegreesPerPixel(const ossimDpt &gsd)
Pure virtual base class for image file writers.
const ossimIpt & ll() const
virtual void getPropertyNames(std::vector< ossimString > &propertyNames) const
virtual bool writeStream()
Method to write the image to a stream.
bool hasImageType(const ossimString &imageType) const
bool hasImageType(const ossimString& imageType) const
bool getNext(ossimFilename &filename) const
virtual void setMetersPerPixel(const ossimDpt &gsd)
void push_back(char c)
Equivalent to insert(end(), c).
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
bool zipWithMinizip(std::vector< ossimString > srcFiles, ossimString srcDirectory, ossimString targetFile)
virtual void setProperty(ossimRefPtr< ossimProperty > property)
Will set the property whose name matches the argument "property->getName()".
virtual ossimGpt lineSampleToWorld(const ossimDpt &projectedPoint) const
virtual void setAreaOfInterest(const ossimIrect &areaOfInterest)
bool localToWorld(const ossimDpt &local_pt, ossimGpt &world_pt) const
Exposes the 3D projection from image to world coordinates.
std::string::size_type size() const
ossimRefPtr< ossimImageSourceSequencer > theInputConnection
ossimFilename theFilename
unsigned int ossim_uint32
virtual bool writeFile()
Writes the file to disk or a stream.
const ossimIpt & lr() const
virtual ossimString getClassName() const
static ossimString downcase(const ossimString &aString)
virtual ossim_int32 connectMyInputTo(ossimConnectableObject *inputObject, bool makeOutputConnection=true, bool createEventFlag=true)
Will try to connect this objects input to the passed in object.
virtual ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
ossim_uint32 width() const
bool generateChildKml(ossimString filename, ossim_int32 zoom, ossim_int32 yloop, ossim_int32 ix, ossim_int32 iy, ossim_int32 dxsize, ossim_int32 dysize, ossim_int32 xsize, ossim_int32 ysize, ossim_int32 maxzoom, ossimRefPtr< ossimMapProjection > proj, ossimString fileExt)
virtual ossimRefPtr< ossimImageGeometry > getImageGeometry()
Returns the image geometry object associated with this tile source or NULL if not defined...
const ossimIpt & ur() const
bool open(const ossimFilename &dir)
virtual void setFilename(const ossimFilename &file)
const ossimProjection * getProjection() const
Access methods for projection (may be NULL pointer).
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
saves the state of the object.
virtual void setProperty(ossimRefPtr< ossimProperty > property)
virtual ossimErrorCode getErrorStatus() const
ossimRefPtr< ossimMapProjection > m_mapProjection
ossimFilename fileNoExtension() const
virtual void setAreaOfInterest(const ossimIrect &inputRect)
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string's contents...
virtual void getImageTypeList(std::vector< ossimString > &imageTypeList) const
void getImageTypeList(std::vector<ossimString>& imageTypeList)const
virtual ~ossimKmlSuperOverlayWriter()
virtual ossimString getShortName() const
virtual void accept(ossimVisitor &visitor)
We will add a visitor interface for all connectable objects.
virtual ossimString getExtension() const
Returns a 3-letter extension from the image type descriptor (theOutputImageType) that can be used for...
ossimRefPtr< ossimImageFileWriter > m_imageWriter
#define RTTI_DEF1(cls, name, b1)
virtual ossimDpt getMetersPerPixel() const
bool generateRootKml(ossimString filename, ossim_float64 north, ossim_float64 south, ossim_float64 east, ossim_float64 west, ossim_int32 tilesize)
bool createDirectory(bool recurseFlag=true, int perm=0775) const
virtual void getPropertyNames(std::vector< ossimString > &propertyNames) const
Pushes this's names onto the list of property names.
virtual ossimString getLongName() const
ossimFilename path() const
std::string::size_type find(const std::string &s, std::string::size_type pos=0) const
Searches for s as a substring of *this, beginning at character pos of *this.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of an object from a keyword list.
virtual bool execute()
Calls: writeFile() writeMetaDataFiles()
const ossimString & getName() const
void propagateViewChange()
Sends a view interface visitor to the input connetion.
const std::string & string() const