/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.gml.producer;
import junit.framework.TestCase;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.CoordinateSequence;
import com.vividsolutions.jts.geom.impl.CoordinateArraySequence;
/**
* We need to ensure that the CoordianteWriter can output Z ordinates
* (if they are actually around).
* <p>
* This test case added as part of fixing
*
* @author Jody
*
*
* @source $URL$
*/
public class CoordinateWriterTest extends TestCase {
/**
* Test normal 2D output
* @throws Exception
*/
public void test2DCoordSeq() throws Exception {
CoordinateSequence coords = new CoordinateArraySequence(coords2D( new int[]{1,1, 4,4, 0,4, 1,1 }));
CoordinateWriter writer = new CoordinateWriter(4);
CoordinateHandler output = new CoordinateHandler();
output.startDocument();
writer.writeCoordinates( coords, output);
output.endDocument();
assertEquals("<coordinates>1,1 4,4 0,4 1,1</coordinates>", output.received );
}
/**
* Test normal 2D output
* @throws Exception
*/
public void test2D() throws Exception {
Coordinate[] coords = coords2D( new int[]{1,1, 4,4, 0,4, 1,1 });
assertNotNull( coords );
assertEquals( 4, coords.length );
CoordinateWriter writer = new CoordinateWriter(4);
CoordinateHandler output = new CoordinateHandler();
output.startDocument();
writer.writeCoordinates( coords, output);
output.endDocument();
assertEquals("<coordinates>1,1 4,4 0,4 1,1</coordinates>", output.received );
System.out.println( output.received );
}
public void test2DWithDummyZ() throws Exception {
Coordinate[] coords = coords2D( new int[]{1,1, 4,4, 0,4, 1,1 });
assertNotNull( coords );
assertEquals( 4, coords.length );
final boolean useDummyZ = true;
final double zValue = 0.0;
CoordinateWriter writer = new CoordinateWriter(4," ", ",", useDummyZ, zValue);
CoordinateHandler output = new CoordinateHandler();
output.startDocument();
writer.writeCoordinates( coords, output);
output.endDocument();
System.out.println( output.received );
assertEquals("<coordinates>1,1,0 4,4,0 0,4,0 1,1,0</coordinates>", output.received );
}
public void test2DWithDummyZCoordSeq() throws Exception {
CoordinateSequence coords = new CoordinateArraySequence(coords2D( new int[]{1,1, 4,4, 0,4, 1,1 }));
final boolean useDummyZ = true;
final double zValue = 0.0;
CoordinateWriter writer = new CoordinateWriter(4," ", ",", useDummyZ, zValue);
CoordinateHandler output = new CoordinateHandler();
output.startDocument();
writer.writeCoordinates( coords, output);
output.endDocument();
assertEquals("<coordinates>1,1,0 4,4,0 0,4,0 1,1,0</coordinates>", output.received );
}
public void test3D() throws Exception {
Coordinate[] coords = coords3D( new int[]{1,1,3, 4,4,2, 0,4,2, 1,1,3 });
assertNotNull( coords );
assertEquals( 4, coords.length );
CoordinateWriter writer = new CoordinateWriter(4," ", ",", true, 0.0, 3 );
CoordinateHandler output = new CoordinateHandler();
output.startDocument();
writer.writeCoordinates( coords, output);
output.endDocument();
assertEquals("<coordinates>1,1,3 4,4,2 0,4,2 1,1,3</coordinates>", output.received );
System.out.println( output.received );
}
public void test3DCoordSeq() throws Exception {
CoordinateSequence coords = new CoordinateArraySequence(coords3D( new int[]{1,1,3, 4,4,2, 0,4,2, 1,1,3 }));
CoordinateWriter writer = new CoordinateWriter(4," ", ",", true, 0.0, 3 );
CoordinateHandler output = new CoordinateHandler();
output.startDocument();
writer.writeCoordinates( coords, output);
output.endDocument();
System.out.println( output.received );
assertEquals("<coordinates>1,1,3 4,4,2 0,4,2 1,1,3</coordinates>", output.received );
}
class CoordinateHandler implements ContentHandler {
StringBuffer buffer;
String received;
public void characters(char[] ch, int start, int length)
throws SAXException {
buffer.append( new String(ch, start, length ) );
}
public void endElement(String uri, String localName, String name)
throws SAXException {
buffer.append("</");
buffer.append( localName );
buffer.append(">");
}
public void endDocument() throws SAXException {
received = buffer.toString();
}
public void endPrefixMapping(String prefix) throws SAXException {
}
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
}
public void processingInstruction(String target, String data)
throws SAXException {
}
public void setDocumentLocator(Locator locator) {
}
public void skippedEntity(String name) throws SAXException {
}
public void startDocument() throws SAXException {
buffer = new StringBuffer();
}
public void startElement(String uri, String localName, String name,
Attributes atts) throws SAXException {
buffer.append("<");
buffer.append( localName );
buffer.append(">");
}
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
}
};
Coordinate[] coords2D( int array[] ){
Coordinate coords[] = new Coordinate[ array.length / 2 ];
for( int i=0; i<coords.length; i++ ){
int offset = i*2;
coords[i]= new Coordinate( array[offset+0], array[offset+1]);
}
return coords;
}
Coordinate[] coords3D( int array[] ){
Coordinate coords[] = new Coordinate[ array.length / 3 ];
for( int i=0; i<coords.length; i++ ){
int offset = i*3;
coords[i]= new Coordinate( array[offset+0], array[offset+1], array[offset+2]);
}
return coords;
}
}