]> dev.renevier.net Git - syp.git/blob - openlayers/tests/Format/KML.html
initial commit
[syp.git] / openlayers / tests / Format / KML.html
1 <html> 
2 <head> 
3     <script src="../../lib/OpenLayers.js"></script> 
4     <script type="text/javascript">
5
6     var test_content = '<kml xmlns="http://earth.google.com/kml/2.0"><Folder><name>OpenLayers export</name><description>Vector geometries from OpenLayers</description><Placemark id="KML.Polygon"><name>OpenLayers.Feature.Vector_344</name><description>A KLM Polygon</description><Polygon><outerBoundaryIs><LinearRing><coordinates>5.001370157823406,49.26855713824488 8.214706453896161,49.630662409673505 8.397385910100951,48.45172350357396 5.001370157823406,49.26855713824488</coordinates></LinearRing></outerBoundaryIs></Polygon></Placemark><Placemark id="KML.LineString"><name>OpenLayers.Feature.Vector_402</name><description>A KML LineString</description><LineString><coordinates>5.838523393080493,49.74814616928052 5.787079558782349,48.410795432216574 8.91427702008381,49.28932499608202</coordinates></LineString></Placemark><Placemark id="KML.Point"><name>OpenLayers.Feature.Vector_451</name><description>A KML Point</description><Point><coordinates>6.985073041685488,49.8682250149058</coordinates></Point></Placemark><Placemark id="KML.MultiGeometry"><name>SF Marina Harbor Master</name><description>KML MultiGeometry</description><MultiGeometry><LineString><coordinates>-122.4425587930444,37.80666418607323 -122.4428379594768,37.80663578323093</coordinates></LineString><LineString><coordinates>-122.4425509770566,37.80662588061205 -122.4428340530617,37.8065999493009</coordinates></LineString></MultiGeometry></Placemark></Folder></kml>';
7     var test_style = '<kml xmlns="http://earth.google.com/kml/2.0"> <Placemark>    <Style> <LineStyle> <color>870000ff</color> <width>10</width> </LineStyle> </Style>  <LineString> <coordinates> -112,36 -113,37 </coordinates> </LineString> </Placemark></kml>';
8     var test_style_fill = '<kml xmlns="http://earth.google.com/kml/2.0"> <Placemark>    <Style> <PolyStyle> <fill>0</fill> <color>870000ff</color> <width>10</width> </PolyStyle> </Style>  <LineString> <coordinates> -112,36 -113,37 </coordinates> </LineString> </Placemark></kml>';
9     var test_nl = '<kml xmlns="http://earth.google.com/kml/2.2"> <Document> <NetworkLink> <Link> <href>http://maker.geocommons.com/maps/1717/overlays/0</href> </Link> </NetworkLink> </Document></kml>';
10
11     function test_Format_KML_constructor(t) { 
12         t.plan(4); 
13          
14         var options = {'foo': 'bar'}; 
15         var format = new OpenLayers.Format.KML(options); 
16         t.ok(format instanceof OpenLayers.Format.KML, 
17              "new OpenLayers.Format.KML returns object" ); 
18         t.eq(format.foo, "bar", "constructor sets options correctly"); 
19         t.eq(typeof format.read, "function", "format has a read function"); 
20         t.eq(typeof format.write, "function", "format has a write function");
21     }
22
23     function test_Format_KML_read(t) {
24         t.plan(5);
25         var features = (new OpenLayers.Format.KML()).read(this.test_content);
26         t.eq(features.length, 4, "Number of features read is correct");
27         t.ok(features[0].geometry.toString() == "POLYGON((5.001370157823406 49.26855713824488,8.214706453896161 49.630662409673505,8.397385910100951 48.45172350357396,5.001370157823406 49.26855713824488))", "polygon feature geometry correctly created");
28         t.ok(features[1].geometry.toString() == "LINESTRING(5.838523393080493 49.74814616928052,5.787079558782349 48.410795432216574,8.91427702008381 49.28932499608202)", "linestring feature geometry correctly created");
29         t.ok(features[2].geometry.toString() == "POINT(6.985073041685488 49.8682250149058)", "point feature geometry correctly created");
30         t.ok(features[3].geometry.CLASS_NAME == "OpenLayers.Geometry.Collection",
31              "read geometry collection");
32     }
33
34     function test_Format_KML_readCdataAttributes_20(t) {
35         t.plan(2);
36         var cdata = '<kml xmlns="http://earth.google.com/kml/2.0"><Document><Placemark><name><![CDATA[Pezinok]]></name><description><![CDATA[Full of text.]]></description><styleUrl>#rel1.0</styleUrl><Point> <coordinates>17.266666, 48.283333</coordinates></Point></Placemark></Document></kml>';
37         var features = (new OpenLayers.Format.KML()).read(cdata);
38         t.eq(features[0].attributes.description, "Full of text.", "Description attribute in cdata read correctly");
39         t.eq(features[0].attributes.name, "Pezinok", "title attribute in cdata read correctly");
40         
41     }
42     
43     function test_Format_KML_networklink(t) {
44         t.plan(1);
45         var f = new OpenLayers.Format.KML({'maxDepth':1});
46         f.fetchLink = function(url) {
47             t.eq(url, "http://maker.geocommons.com/maps/1717/overlays/0", "network link fetched a link correctly.");
48             return '';
49         }
50         f.read(test_nl);
51     }
52     function test_Format_KML_readCdataAttributes_21(t) {
53         t.plan(2);
54         var cdata = '<kml xmlns="http://earth.google.com/kml/2.1"><Document><Placemark><name><![CDATA[Pezinok]]></name><description><![CDATA[Full of text.]]></description><styleUrl>#rel1.0</styleUrl><Point> <coordinates>17.266666, 48.283333</coordinates></Point></Placemark></Document></kml>';
55         var features = (new OpenLayers.Format.KML()).read(cdata);
56         t.eq(features[0].attributes.description, "Full of text.", "Description attribute in cdata read correctly");
57         t.eq(features[0].attributes.name, "Pezinok", "title attribute in cdata read correctly");
58         
59     }
60     
61     function test_Format_KML_write(t) {
62         // make sure id, name, and description are preserved
63         t.plan(1);
64         var kmlExpected = this.test_content;
65         var options = {
66             folderName: "OpenLayers export",
67             foldersDesc: "Vector geometries from OpenLayers"
68         }
69
70         var format = new OpenLayers.Format.KML(options);
71         var features = format.read(kmlExpected);
72         var kmlOut = format.write(features);
73         var kmlOut = kmlOut.replace(/<\?[^>]*\?>/, ''); // Remove XML Prolog
74         t.eq(kmlOut, kmlExpected, "correctly writes an KML doc string");
75     }
76     
77     function test_Format_KML_write_multis(t) {
78         /**
79          * KML doesn't have a representation for multi geometries of a
80          * specific type.  KML MultiGeometry maps to OL Geometry.Collection.
81          * Because of this, multi-geometries in OL can't make a round trip
82          * through KML (an OL MultiPoint maps to a KML MultiGeometry
83          * containing points, which maps back to an OL Collection containing
84          * points).  So we need to acceptance tests for the writing of
85          * multi-geometries specifically instead of relying on the round-trip
86          * write test above.
87          */
88         t.plan(3);
89         var format = new OpenLayers.Format.KML({foldersDesc: "test output"});
90         var multi, feature, output, expected;
91         
92         // test multipoint
93         var multi = new OpenLayers.Geometry.MultiPoint([
94             new OpenLayers.Geometry.Point(0, 1)
95         ]);
96         feature = new OpenLayers.Feature.Vector(multi, {name: "test name"});
97         output = format.write(feature);
98         expected = '<kml xmlns="http://earth.google.com/kml/2.0"><Folder><name>OpenLayers export</name><description>test output</description><Placemark><name>test name</name><description>No description available</description><MultiGeometry><Point><coordinates>0,1</coordinates></Point></MultiGeometry></Placemark></Folder></kml>';
99         var output = output.replace(/<\?[^>]*\?>/, ''); // Remove XML Prolog
100         t.eq(output, expected, "multipoint correctly written");
101         
102         // test multilinestring
103         var multi = new OpenLayers.Geometry.MultiLineString([
104             new OpenLayers.Geometry.LineString([
105                 new OpenLayers.Geometry.Point(1, 0),
106                 new OpenLayers.Geometry.Point(0, 1)
107             ])
108         ]);
109         feature = new OpenLayers.Feature.Vector(multi, {name: "test name"});
110         output = format.write(feature);
111         expected = '<kml xmlns="http://earth.google.com/kml/2.0"><Folder><name>OpenLayers export</name><description>test output</description><Placemark><name>test name</name><description>No description available</description><MultiGeometry><LineString><coordinates>1,0 0,1</coordinates></LineString></MultiGeometry></Placemark></Folder></kml>';
112         var output = output.replace(/<\?[^>]*\?>/, ''); // Remove XML Prolog
113         t.eq(output, expected, "multilinestring correctly written");
114
115         // test multipolygon
116         var multi = new OpenLayers.Geometry.MultiPolygon([
117             new OpenLayers.Geometry.Polygon([
118                 new OpenLayers.Geometry.LinearRing([
119                     new OpenLayers.Geometry.Point(0, 0),
120                     new OpenLayers.Geometry.Point(1, 0),
121                     new OpenLayers.Geometry.Point(0, 1)
122                 ])
123             ])
124         ]);
125         feature = new OpenLayers.Feature.Vector(multi, {name: "test name"});
126         output = format.write(feature);
127         expected = '<kml xmlns="http://earth.google.com/kml/2.0"><Folder><name>OpenLayers export</name><description>test output</description><Placemark><name>test name</name><description>No description available</description><MultiGeometry><Polygon><outerBoundaryIs><LinearRing><coordinates>0,0 1,0 0,1 0,0</coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry></Placemark></Folder></kml>';
128         var output = output.replace(/<\?[^>]*\?>/, ''); // Remove XML Prolog
129         t.eq(output, expected, "multilinestring correctly written");
130
131     }
132     function test_Format_KML_extractStyle(t) {
133         t.plan(1);
134         var f = new OpenLayers.Format.KML();
135         var features = f.read(test_style);    
136         t.ok(features[0].style == undefined, "KML Feature has no style with extractStyle false");        
137     } 
138     function test_Format_KML_extractStyleFill(t) {
139         t.plan(2);
140         var f = new OpenLayers.Format.KML({extractStyles: true});
141         var features = f.read(test_style);    
142         t.eq(features[0].style.fillColor, "#ff0000", "default fill is set");        
143         var features = f.read(test_style_fill);    
144         t.eq(features[0].style.fillColor, "none", "KML Feature has none fill");        
145     } 
146     function test_Format_KML_getStyle(t) {
147         t.plan(1);
148         var style = {t: true};
149         var f = new OpenLayers.Format.KML();
150         f.styles = {test: style};
151         var gotStyle = f.getStyle('test');
152         gotStyle.t = false;
153         t.ok(style.t, "getStyle returns copy of style rather than reference");
154     }
155     function test_Format_KML_extendedData(t) {
156         t.plan(2);
157         var f = new OpenLayers.Format.KML();
158         var features = f.read(OpenLayers.Util.getElement("kml_extendeddata").value);
159         t.eq(features[0].attributes.all_bridges.value, "3030", "read value from extendeddata correctly.");
160         t.eq(features[0].attributes.all_bridges.displayName, "all bridges", "read displayName from extendeddata correctly.");
161     }
162
163     </script> 
164 </head> 
165 <body> 
166     <textarea id="kml_extendeddata" style="display:none">
167 <kml xmlns="http://earth.google.com/kml/2.2">
168 <Document>
169         <Placemark>
170             <styleUrl>#default</styleUrl>
171
172
173
174
175             <ExtendedData>
176                                     <Data name='all_bridges'>
177                         <displayName><![CDATA[all bridges]]></displayName>
178                         <value><![CDATA[3030]]></value>
179                     </Data>
180                                     <Data name='latitude'>
181                         <displayName><![CDATA[latitude]]></displayName>
182                         <value><![CDATA[43]]></value>
183                     </Data>
184                                     <Data name='longitude'>
185                         <displayName><![CDATA[longitude]]></displayName>
186                         <value><![CDATA[-107.55]]></value>
187                     </Data>
188                                     <Data name='functionally_obsolete__percent'>
189                         <displayName><![CDATA[functionally obsolete, percent]]></displayName>
190                         <value><![CDATA[8]]></value>
191                     </Data>
192                                     <Data name='structurally_deficient__percent'>
193                         <displayName><![CDATA[structurally deficient, percent]]></displayName>
194                         <value><![CDATA[13]]></value>
195                     </Data>
196                                     <Data name='state'>
197                         <displayName><![CDATA[state]]></displayName>
198                         <value><![CDATA[Wyoming]]></value>
199                     </Data>
200                             </ExtendedData>
201
202
203               <Point>
204 <coordinates>-107.55,43.0</coordinates>
205 </Point>
206
207
208         </Placemark>
209 </Document>
210 </kml>
211 </textarea>
212 </body> 
213 </html>