Index: /issm/trunk/src/c/objects/KML/KML_Container.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Container.cpp	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_Container.cpp	(revision 9261)
@@ -157,6 +157,6 @@
 /*}}}*/
 
-/*FUNCTION KML_Container::FindPolygons {{{1*/
-void  KML_Container::FindPolygons(DataSet* polygons){
+/*FUNCTION KML_Container::WriteExp {{{1*/
+void  KML_Container::WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp){
 
 	int   i;
@@ -165,5 +165,5 @@
 
 	for (i=0; i<feature->Size(); i++)
-		((KML_Object *)feature->GetObjectByOffset(i))->FindPolygons(polygons);
+		((KML_Object *)feature->GetObjectByOffset(i))->WriteExp(fid,nstr,sgn,cm,sp);
 
 	return;
@@ -171,16 +171,2 @@
 /*}}}*/
 
-/*FUNCTION KML_Container::FindLineStrings {{{1*/
-void  KML_Container::FindLineStrings(DataSet* linestrings){
-
-	int   i;
-
-/*  loop over the features for the container  */
-
-	for (i=0; i<feature->Size(); i++)
-		((KML_Object *)feature->GetObjectByOffset(i))->FindLineStrings(linestrings);
-
-	return;
-}
-/*}}}*/
-
Index: /issm/trunk/src/c/objects/KML/KML_Container.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Container.h	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_Container.h	(revision 9261)
@@ -32,6 +32,5 @@
 		void  Write(FILE* fid,char* indent);
 		void  Read(FILE* fid,char* kstr);
-		void  FindPolygons(DataSet* polygons);
-		void  FindLineStrings(DataSet* linestrings);
+		void  WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp);
 		int   Id(){_error_("Not implemented yet.");};
 		int   MyRank(){_error_("Not implemented yet.");};
Index: /issm/trunk/src/c/objects/KML/KML_File.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_File.cpp	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_File.cpp	(revision 9261)
@@ -253,6 +253,6 @@
 /*}}}*/
 
-/*FUNCTION KML_File::FindPolygons {{{1*/
-void  KML_File::FindPolygons(DataSet* polygons){
+/*FUNCTION KML_File::WriteExp {{{1*/
+void  KML_File::WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp){
 
 	int   i;
@@ -261,22 +261,8 @@
 
 	for (i=0; i<kmlobj->Size(); i++)
-		((KML_Object *)kmlobj->GetObjectByOffset(i))->FindPolygons(polygons);
-
-	return;
-}
-/*}}}*/
-
-/*FUNCTION KML_File::FindLineStrings {{{1*/
-void  KML_File::FindLineStrings(DataSet* linestrings){
-
-	int   i;
-
-/*  loop over the kml objects for the file  */
-
-	for (i=0; i<kmlobj->Size(); i++)
-		((KML_Object *)kmlobj->GetObjectByOffset(i))->FindLineStrings(linestrings);
-
-	return;
-}
-/*}}}*/
-
+		((KML_Object *)kmlobj->GetObjectByOffset(i))->WriteExp(fid,nstr,sgn,cm,sp);
+
+	return;
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/KML/KML_File.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_File.h	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_File.h	(revision 9261)
@@ -32,6 +32,5 @@
 		void  Write(FILE* fid,char* indent);
 		void  Read(FILE* fid,char* kstr);
-		void  FindPolygons(DataSet* polygons);
-		void  FindLineStrings(DataSet* linestrings);
+		void  WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp);
 		int   Id(){_error_("Not implemented yet.");};
 		int   MyRank(){_error_("Not implemented yet.");};
Index: /issm/trunk/src/c/objects/KML/KML_LineString.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LineString.cpp	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_LineString.cpp	(revision 9261)
@@ -17,4 +17,5 @@
 #include "../../Container/Container.h"
 #include "../../include/include.h"
+#include "../../modules/Ll2xyx/Ll2xyx.h"
 /*}}}*/
 
@@ -170,11 +171,54 @@
 /*}}}*/
 
-/*FUNCTION KML_LineString::FindLineStrings {{{1*/
-void  KML_LineString::FindLineStrings(DataSet* linestrings){
-
-	linestrings->AddObject((Object*)this);
-
-	return;
-}
-/*}}}*/
-
+/*FUNCTION KML_LineString::WriteExp {{{1*/
+void  KML_LineString::WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp){
+
+	int     i;
+	double  *lat,*lon,*x,*y;
+	char    nstr2[81];
+
+/*  extract latitude and longitude into vectors  */
+
+	lat=(double *) xmalloc(ncoord*sizeof(double));
+	lon=(double *) xmalloc(ncoord*sizeof(double));
+	for (i=0; i<ncoord; i++) {
+		lon[i]=coords[i][0];
+		lat[i]=coords[i][1];
+	}
+
+/*  convert latitude and longitude to x and y  */
+
+	x  =(double *) xmalloc(ncoord*sizeof(double));
+	y  =(double *) xmalloc(ncoord*sizeof(double));
+	Ll2xyx(x,y,lat,lon,ncoord,sgn,cm,sp);
+
+/*  write header  */
+
+	strcpy(nstr2,nstr);
+	for (i=0; i<strlen(nstr2); i++)
+		if ((nstr2[i] == ' ') || (nstr2[i] == '\t'))
+			nstr2[i]='_';
+	fprintf(fid,"## Name:%s\n",nstr2);
+	fprintf(fid,"## Icon:0\n");
+	fprintf(fid,"# Points Count	Value\n");
+    fprintf(fid,"%u	%s\n",ncoord  ,"1.");
+	fprintf(fid,"# X pos	Y pos\n");
+
+/*  write vertices  */
+
+	for (i=0; i<ncoord; i++)
+	    fprintf(fid,"%lf\t%lf\n",x[i],y[i]);
+
+/*  write blank line  */
+
+	fprintf(fid,"\n");
+
+	xfree((void**)&y);
+	xfree((void**)&x);
+	xfree((void**)&lon);
+	xfree((void**)&lat);
+
+	return;
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/KML/KML_LineString.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LineString.h	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_LineString.h	(revision 9261)
@@ -37,5 +37,5 @@
 		void  Write(FILE* fid,char* indent);
 		void  Read(FILE* fid,char* kstr);
-		void  FindLineStrings(DataSet* linestrings);
+		void  WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp);
 		int   Id(){_error_("Not implemented yet.");};
 		int   MyRank(){_error_("Not implemented yet.");};
Index: /issm/trunk/src/c/objects/KML/KML_LinearRing.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LinearRing.cpp	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_LinearRing.cpp	(revision 9261)
@@ -17,4 +17,5 @@
 #include "../../Container/Container.h"
 #include "../../include/include.h"
+#include "../../modules/Ll2xyx/Ll2xyx.h"
 /*}}}*/
 
@@ -170,2 +171,59 @@
 /*}}}*/
 
+/*FUNCTION KML_LinearRing::WriteExp {{{1*/
+void  KML_LinearRing::WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp){
+
+	int     i;
+	double  *lat,*lon,*x,*y;
+	char    nstr2[81];
+
+/*  extract latitude and longitude into vectors  */
+
+	lat=(double *) xmalloc(ncoord*sizeof(double));
+	lon=(double *) xmalloc(ncoord*sizeof(double));
+	for (i=0; i<ncoord; i++) {
+		lon[i]=coords[i][0];
+		lat[i]=coords[i][1];
+	}
+
+/*  convert latitude and longitude to x and y  */
+
+	x  =(double *) xmalloc(ncoord*sizeof(double));
+	y  =(double *) xmalloc(ncoord*sizeof(double));
+	Ll2xyx(x,y,lat,lon,ncoord,sgn,cm,sp);
+
+/*  write header  */
+
+	strcpy(nstr2,nstr);
+	for (i=0; i<strlen(nstr2); i++)
+		if ((nstr2[i] == ' ') || (nstr2[i] == '\t'))
+			nstr2[i]='_';
+	fprintf(fid,"## Name:%s\n",nstr2);
+	fprintf(fid,"## Icon:0\n");
+	fprintf(fid,"# Points Count	Value\n");
+	if ((lat[ncoord-1] != lat[0]) || (lon[ncoord-1] != lon[0]))
+	    fprintf(fid,"%u	%s\n",ncoord+1,"1.");
+	else
+	    fprintf(fid,"%u	%s\n",ncoord  ,"1.");
+	fprintf(fid,"# X pos	Y pos\n");
+
+/*  write vertices, making sure ring is closed  */
+
+	for (i=0; i<ncoord; i++)
+	    fprintf(fid,"%lf\t%lf\n",x[i],y[i]);
+	if ((lat[ncoord-1] != lat[0]) || (lon[ncoord-1] != lon[0]))
+	    fprintf(fid,"%lf\t%lf\n",x[0],y[0]);
+
+/*  write blank line  */
+
+	fprintf(fid,"\n");
+
+	xfree((void**)&y);
+	xfree((void**)&x);
+	xfree((void**)&lon);
+	xfree((void**)&lat);
+
+	return;
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/KML/KML_LinearRing.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LinearRing.h	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_LinearRing.h	(revision 9261)
@@ -37,4 +37,5 @@
 		void  Write(FILE* fid,char* indent);
 		void  Read(FILE* fid,char* kstr);
+		void  WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp);
 		int   Id(){_error_("Not implemented yet.");};
 		int   MyRank(){_error_("Not implemented yet.");};
Index: /issm/trunk/src/c/objects/KML/KML_MultiGeometry.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_MultiGeometry.cpp	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_MultiGeometry.cpp	(revision 9261)
@@ -181,6 +181,6 @@
 /*}}}*/
 
-/*FUNCTION KML_MultiGeometry::FindPolygons {{{1*/
-void  KML_MultiGeometry::FindPolygons(DataSet* polygons){
+/*FUNCTION KML_MultiGeometry::WriteExp {{{1*/
+void  KML_MultiGeometry::WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp){
 
 	int   i;
@@ -189,5 +189,5 @@
 
 	for (i=0; i<geometry->Size(); i++)
-		((KML_Object *)geometry->GetObjectByOffset(i))->FindPolygons(polygons);
+		((KML_Object *)geometry->GetObjectByOffset(i))->WriteExp(fid,nstr,sgn,cm,sp);
 
 	return;
@@ -195,16 +195,2 @@
 /*}}}*/
 
-/*FUNCTION KML_MultiGeometry::FindLineStrings {{{1*/
-void  KML_MultiGeometry::FindLineStrings(DataSet* linestrings){
-
-	int   i;
-
-/*  loop over the geometry elements for the multigeometry  */
-
-	for (i=0; i<geometry->Size(); i++)
-		((KML_Object *)geometry->GetObjectByOffset(i))->FindLineStrings(linestrings);
-
-	return;
-}
-/*}}}*/
-
Index: /issm/trunk/src/c/objects/KML/KML_MultiGeometry.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_MultiGeometry.h	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_MultiGeometry.h	(revision 9261)
@@ -33,6 +33,5 @@
 		void  Write(FILE* fid,char* indent);
 		void  Read(FILE* fid,char* kstr);
-		void  FindPolygons(DataSet* polygons);
-		void  FindLineStrings(DataSet* linestrings);
+		void  WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp);
 		int   Id(){_error_("Not implemented yet.");};
 		int   MyRank(){_error_("Not implemented yet.");};
Index: /issm/trunk/src/c/objects/KML/KML_Object.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Object.cpp	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_Object.cpp	(revision 9261)
@@ -113,4 +113,13 @@
 /*}}}*/
 
+/*FUNCTION KML_Object::WriteExp {{{1*/
+void  KML_Object::WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp){
+
+	;
+
+	return;
+}
+/*}}}*/
+
 /*FUNCTION KML_Object::AddAttrib {{{1*/
 void  KML_Object::AddAttrib(char* name,char* value){
@@ -171,20 +180,2 @@
 /*}}}*/
 
-/*FUNCTION KML_Object::FindPolygons {{{1*/
-void  KML_Object::FindPolygons(DataSet* polygons){
-
-	;
-
-	return;
-}
-/*}}}*/
-
-/*FUNCTION KML_Object::FindLineStrings {{{1*/
-void  KML_Object::FindLineStrings(DataSet* linestrings){
-
-	;
-
-	return;
-}
-/*}}}*/
-
Index: /issm/trunk/src/c/objects/KML/KML_Object.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Object.h	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_Object.h	(revision 9261)
@@ -41,9 +41,8 @@
 		virtual void  Write(FILE* fid,char* indent)=0;
 		virtual void  Read(FILE* fid,char* kstr)=0;
+		virtual void  WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp);
 		virtual void  AddAttrib(char* name,char* value);
 		virtual void  FindAttrib(char** pvalue,char* name,char* deflt);
 		virtual void  WriteAttrib(FILE* fid,char* indent);
-		virtual void  FindPolygons(DataSet* polygons);
-		virtual void  FindLineStrings(DataSet* linestrings);
 
 };
Index: /issm/trunk/src/c/objects/KML/KML_Placemark.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Placemark.cpp	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_Placemark.cpp	(revision 9261)
@@ -181,30 +181,23 @@
 /*}}}*/
 
-/*FUNCTION KML_Placemark::FindPolygons {{{1*/
-void  KML_Placemark::FindPolygons(DataSet* polygons){
+/*FUNCTION KML_Placemark::WriteExp {{{1*/
+void  KML_Placemark::WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp){
 
 	int   i;
+	char  nstr2[81];
 
 /*  loop over the geometry elements for the placemark  */
 
-	for (i=0; i<geometry->Size(); i++)
-		((KML_Object *)geometry->GetObjectByOffset(i))->FindPolygons(polygons);
-
-	return;
-}
-/*}}}*/
-
-/*FUNCTION KML_Placemark::FindLineStrings {{{1*/
-void  KML_Placemark::FindLineStrings(DataSet* linestrings){
-
-	int   i;
-
-/*  loop over the geometry elements for the placemark  */
-
-	for (i=0; i<geometry->Size(); i++)
-		((KML_Object *)geometry->GetObjectByOffset(i))->FindLineStrings(linestrings);
-
-	return;
-}
-/*}}}*/
-
+	for (i=0; i<geometry->Size(); i++) {
+		if (strlen(nstr))
+			sprintf(nstr2,"%s %s",nstr,name);
+		else
+			sprintf(nstr2,"%s",name);
+
+		((KML_Object *)geometry->GetObjectByOffset(i))->WriteExp(fid,nstr2,sgn,cm,sp);
+	}
+
+	return;
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/KML/KML_Placemark.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Placemark.h	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_Placemark.h	(revision 9261)
@@ -33,6 +33,5 @@
 		void  Write(FILE* fid,char* indent);
 		void  Read(FILE* fid,char* kstr);
-		void  FindPolygons(DataSet* polygons);
-		void  FindLineStrings(DataSet* linestrings);
+		void  WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp);
 		int   Id(){_error_("Not implemented yet.");};
 		int   MyRank(){_error_("Not implemented yet.");};
Index: /issm/trunk/src/c/objects/KML/KML_Polygon.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Polygon.cpp	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_Polygon.cpp	(revision 9261)
@@ -134,4 +134,6 @@
 	strcpy(indent4,indent);
 	strcat(indent4,"    ");
+
+/*  check outer boundary for the polygon  */
 
 	fprintf(filout,"%s  <outerBoundaryIs>\n",indent);
@@ -254,11 +256,34 @@
 /*}}}*/
 
-/*FUNCTION KML_Polygon::FindPolygons {{{1*/
-void  KML_Polygon::FindPolygons(DataSet* polygons){
-
-	polygons->AddObject((Object*)this);
-
-	return;
-}
-/*}}}*/
-
+/*FUNCTION KML_Polygon::WriteExp {{{1*/
+void  KML_Polygon::WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp){
+
+	int   i;
+	char  nstr2[81];
+
+/*  check outer boundary for the polygon  */
+
+	if (outer->Size()) {
+		if (strlen(nstr))
+			sprintf(nstr2,"%s (outer)",nstr);
+		else
+			sprintf(nstr2,"(outer)");
+
+		((KML_LinearRing *)outer->GetObjectByOffset(0))->WriteExp(fid,nstr2,sgn,cm,sp);
+	}
+
+/*  loop over any inner boundaries for the polygon  */
+
+	for (i=0; i<inner->Size(); i++) {
+		if (strlen(nstr))
+			sprintf(nstr2,"%s (inner %d of %d)",nstr,i+1,inner->Size());
+		else
+			sprintf(nstr2,"(inner %d of %d)",i+1,inner->Size());
+
+		((KML_LinearRing *)inner->GetObjectByOffset(i))->WriteExp(fid,nstr2,sgn,cm,sp);
+	}
+
+	return;
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/KML/KML_Polygon.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Polygon.h	(revision 9260)
+++ /issm/trunk/src/c/objects/KML/KML_Polygon.h	(revision 9261)
@@ -39,5 +39,5 @@
 		void  Write(FILE* fid,char* indent);
 		void  Read(FILE* fid,char* kstr);
-		void  FindPolygons(DataSet* polygons);
+		void  WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp);
 		int   Id(){_error_("Not implemented yet.");};
 		int   MyRank(){_error_("Not implemented yet.");};
