GeoPubby  Version 0.1.0.0
KMLWriter Class Reference

Writes a GeoPubby instance as KML. More...

Inheritance diagram for KMLWriter:
Collaboration diagram for KMLWriter:

Public Member Functions

 KMLWriter (String epsg)
 
ExtendedIterator< Resource > write (Model model, HttpServletResponse response) throws IOException
 
Tuple< Boolean, String > handleGeometry (Statement curst, Resource ind, Model model)
 

Static Public Member Functions

static StyleObject handleStyle (Resource res)
 

Protected Attributes

String epsg =null
 
Double lat
 
String sourceCRS ="EPSG:4326"
 
Geometry geom
 
GridCoverage cov
 
StyleObject styleObject
 
ResultStyleFormatter styleformatter
 
Property usedProperty =null
 
WKTReader reader =new WKTReader()
 

Package Attributes

Double lon
 

Detailed Description

Writes a GeoPubby instance as KML.

Constructor & Destructor Documentation

◆ KMLWriter()

KMLWriter ( String  epsg)
29  {
30  super(epsg);
31  this.styleformatter=new KMLStyleFormatter();
32  }
ResultStyleFormatter styleformatter
Definition: GeoModelWriter.java:42
String epsg
Definition: GeoModelWriter.java:30

References GeoModelWriter.epsg, and GeoModelWriter.styleformatter.

Member Function Documentation

◆ handleGeometry()

Tuple<Boolean,String> handleGeometry ( Statement  curst,
Resource  ind,
Model  model 
)
inherited
148  {
149  boolean handled=false;
150  String type="vector";
151  if (GEO.ASWKT.getURI().equals(curst.getPredicate().getURI().toString())
152  || GEO.P_GEOMETRY.getURI().equals(curst.getPredicate().getURI())
153  || GEO.P625.getURI().equals(curst.getPredicate().getURI())) {
154  try {
155  geom = reader.read(curst.getObject().asLiteral().getString());
156  if(this.epsg!=null) {
157  geom=ReprojectionUtils.reproject(geom, sourceCRS, epsg);
158  }
159  } catch (ParseException e) {
160  // TODO Auto-generated catch block
161  e.printStackTrace();
162  }
163  handled=true;
164  } else if (GEO.ASGEOJSON.getURI().equals(curst.getPredicate().getURI().toString())
165  && this.epsg != null) {
166  if (curst.getObject().asLiteral().getString() != null) {
167  GeoJSONReader read = new GeoJSONReader();
168  geom = read.read(curst.getObject().asLiteral().getString());
169  if(this.epsg!=null) {
170  ind.addProperty(GEO.EPSG, model.createTypedLiteral(this.epsg));
171  geom = ReprojectionUtils.reproject(geom, sourceCRS, epsg);
172  }
173  }
174  handled=true;
175  } else if (GEO.ASKML.getURI().equals(curst.getPredicate().getURI().toString())
176  && this.epsg != null) {
177  if (curst.getObject().asLiteral().getString() != null) {
178  KMLReader read = new KMLReader();
179  try {
180  geom = read.read(curst.getObject().asLiteral().getString());
181  if(this.epsg!=null) {
182  ind.addProperty(GEO.EPSG, model.createTypedLiteral(this.epsg));
183  geom = ReprojectionUtils.reproject(geom, sourceCRS, epsg);
184  }
185  } catch (ParseException e) {
186  // TODO Auto-generated catch block
187  e.printStackTrace();
188  }
189  }
190  handled=true;
191  } else if (GEO.ASWKB.getURI().equals(curst.getPredicate().getURI().toString())
192  && this.epsg != null) {
193  if (curst.getObject().asLiteral().getString() != null) {
194  WKBReader wkbread=new WKBReader();
195  try {
196  geom = wkbread.read(curst.getObject().asLiteral().getString().getBytes());
197  if(this.epsg!=null) {
198  ind.addProperty(GEO.EPSG, model.createTypedLiteral(this.epsg));
199  geom = ReprojectionUtils.reproject(geom, sourceCRS, epsg);
200  }
201  } catch (ParseException e) {
202  // TODO Auto-generated catch block
203  e.printStackTrace();
204  }
205  }
206  handled=true;
207  } else if (GEO.ASHEXWKB.getURI().equals(curst.getPredicate().getURI().toString())
208  && this.epsg != null) {
209  if (curst.getObject().asLiteral().getString() != null) {
210  WKBReader wkbread=new WKBReader();
211  try {
212  geom = wkbread.read(WKBReader.hexToBytes(curst.getObject().asLiteral().getString()));
213  if(this.epsg!=null) {
214  ind.addProperty(GEO.EPSG, model.createTypedLiteral(this.epsg));
215  geom = ReprojectionUtils.reproject(geom, sourceCRS, epsg);
216  }
217  } catch (ParseException e) {
218  // TODO Auto-generated catch block
219  e.printStackTrace();
220  }
221  }
222  handled=true;
223  }else if (GEO.ASGML.getURI().equals(curst.getPredicate().getURI().toString())
224  && this.epsg != null) {
225  if (curst.getObject().asLiteral().getString() != null) {
226  GMLReader reader=new GMLReader();
227  try {
228  geom=reader.read(curst.getObject().asLiteral().getString(), new GeometryFactory());
229  if(this.epsg!=null) {
230  ind.addProperty(GEO.EPSG, model.createTypedLiteral(this.epsg));
231  geom = ReprojectionUtils.reproject(geom, sourceCRS, epsg);
232  }
233  } catch (SAXException | IOException | ParserConfigurationException e) {
234  // TODO Auto-generated catch block
235  e.printStackTrace();
236  }
237  }
238  handled=true;
239  }else if (GEO.P_LAT.getURI().equals(curst.getPredicate().getURI().toString())) {
240  lat = curst.getObject().asLiteral().getDouble();
241  handled=true;
242  } else if (GEO.P_LONG.getURI().equals(curst.getPredicate().getURI().toString())) {
243  lon = curst.getObject().asLiteral().getDouble();
244  handled=true;
245  } else if (GEO.GEORSSPOINT.getURI().equals(curst.getPredicate().getURI().toString())) {
246  lat = Double.valueOf(curst.getObject().asLiteral().getString().split(" ")[0]);
247  lon = Double.valueOf(curst.getObject().asLiteral().getString().split(" ")[1]);
248  handled=true;
249  }
250  return new Tuple<Boolean,String>(handled,type);
251  }
String sourceCRS
Definition: GeoModelWriter.java:34
Geometry geom
Definition: GeoModelWriter.java:36
Double lon
Definition: GeoModelWriter.java:32
Double lat
Definition: GeoModelWriter.java:32
WKTReader reader
Definition: ModelWriter.java:22

References GEO.ASGEOJSON, GEO.ASGML, GEO.ASHEXWKB, GEO.ASKML, GEO.ASWKB, GEO.ASWKT, GeoModelWriter.epsg, GEO.EPSG, GeoModelWriter.geom, GEO.GEORSSPOINT, GeoModelWriter.lat, GeoModelWriter.lon, GEO.P625, GEO.P_GEOMETRY, GEO.P_LAT, GEO.P_LONG, ModelWriter.reader, ReprojectionUtils.reproject(), and GeoModelWriter.sourceCRS.

Referenced by AbstractGeoJSONWriter.prepareGeoJSONString(), CoverageJSONWriter.write(), X3DWriter.write(), XYZASCIIWriter.write(), EWKTWriter.write(), GeoHashWriter.write(), GeoURIWriter.write(), GMLWriter.write(), GoogleMapsLinkWriter.write(), GPXWriter.write(), KMLWriter.write(), LatLonTextWriter.write(), MapMLWriter.write(), OpenLocationCodeWriter.write(), OSMLinkWriter.write(), OSMWriter.write(), SVGWriter.write(), TopoJSONWriter.write(), TWKBWriterr.write(), WKBWriterr.write(), WKTWriter.write(), XLSWriter.write(), and XLSXWriter.write().

◆ handleStyle()

static StyleObject handleStyle ( Resource  res)
staticinherited
52  {
53  StyleObject result=new StyleObject();
54  if(res.isURIResource()){
55  result.styleId=res.getURI().toString();
56  }
57  if(res.hasProperty(RDFS.label)){
58  result.styleName= res.getProperty(RDFS.label).getLiteral().getString();
59  }
60  if(res.hasProperty(GEO.POINTSTYLE)){
61  result.pointStyle=res.getProperty(GEO.POINTSTYLE).getLiteral().getString();
62  }
63  if(res.hasProperty(GEO.POINTIMAGE)){
64  result.pointImage=res.getProperty(GEO.POINTIMAGE).getLiteral().getString();
65  }
66  if(res.hasProperty(GEO.LINESTRINGSTYLE)){
67  result.lineStringStyle=res.getProperty(GEO.LINESTRINGSTYLE).getLiteral().getString();
68  }
69  if(res.hasProperty(GEO.LINESTRINGIMAGE)){
70  result.lineStringImage=res.getProperty(GEO.LINESTRINGIMAGE).getLiteral().getString();
71  }
72  if(res.hasProperty(GEO.LINESTRINGIMAGESTYLE)){
73  result.lineStringImageStyle=res.getProperty(GEO.LINESTRINGIMAGESTYLE).getLiteral().getString();
74  }
75  if(res.hasProperty(GEO.POLYGONSTYLE)){
76  result.polygonStyle=res.getProperty(GEO.POLYGONSTYLE).getLiteral().getString();
77  }
78  if(res.hasProperty(GEO.POLYGONIMAGE)){
79  result.polygonImage=res.getProperty(GEO.POLYGONIMAGE).getLiteral().getString();
80  }
81  if(res.hasProperty(GEO.HATCH)){
82  result.hatch=res.getProperty(GEO.HATCH).getLiteral().getString();
83  }
84  if(res.hasProperty(GEO.POPUPSTYLE)){
85  result.hatch=res.getProperty(GEO.POPUPSTYLE).getLiteral().getString();
86  }
87  if(res.hasProperty(GEO.TEXTSTYLE2)){
88  result.hatch=res.getProperty(GEO.TEXTSTYLE2).getLiteral().getString();
89  }
90  if(res.hasProperty(GEO.POINTSTYLE2)){
91  result.pointStyle=res.getProperty(GEO.POINTSTYLE2).getLiteral().getString();
92  }
93  if(res.hasProperty(GEO.POINTIMAGE2)){
94  result.pointImage=res.getProperty(GEO.POINTIMAGE2).getLiteral().getString();
95  }
96  if(res.hasProperty(GEO.LINESTRINGSTYLE2)){
97  result.lineStringStyle=res.getProperty(GEO.LINESTRINGSTYLE2).getLiteral().getString();
98  }
99  if(res.hasProperty(GEO.LINESTRINGIMAGE2)){
100  result.lineStringImage=res.getProperty(GEO.LINESTRINGIMAGE2).getLiteral().getString();
101  }
102  if(res.hasProperty(GEO.LINESTRINGIMAGESTYLE2)){
103  result.lineStringImageStyle=res.getProperty(GEO.LINESTRINGIMAGESTYLE2).getLiteral().getString();
104  }
105  if(res.hasProperty(GEO.POLYGONSTYLE2)){
106  result.polygonStyle=res.getProperty(GEO.POLYGONSTYLE2).getLiteral().getString();
107  }
108  if(res.hasProperty(GEO.POLYGONIMAGE2)){
109  result.polygonImage=res.getProperty(GEO.POLYGONIMAGE2).getLiteral().getString();
110  }
111  if(res.hasProperty(GEO.HATCH2)){
112  result.hatch=res.getProperty(GEO.HATCH2).getLiteral().getString();
113  }
114  if(res.hasProperty(GEO.POPUPSTYLE2)){
115  result.hatch=res.getProperty(GEO.POPUPSTYLE2).getLiteral().getString();
116  }
117  if(res.hasProperty(GEO.TEXTSTYLE2)){
118  result.hatch=res.getProperty(GEO.TEXTSTYLE2).getLiteral().getString();
119  }
120  if(res.hasProperty(GEO.POINTSTYLE2)){
121  result.pointStyle=res.getProperty(GEO.POINTSTYLE2).getLiteral().getString();
122  }
123  if(res.hasProperty(GEO.POINTIMAGE2)){
124  result.pointImage=res.getProperty(GEO.POINTIMAGE2).getLiteral().getString();
125  }
126  if(res.hasProperty(GEO.LINESTRINGSTYLE2)){
127  result.lineStringStyle=res.getProperty(GEO.LINESTRINGSTYLE2).getLiteral().getString();
128  }
129  if(res.hasProperty(GEO.LINESTRINGIMAGE2)){
130  result.lineStringImage=res.getProperty(GEO.LINESTRINGIMAGE2).getLiteral().getString();
131  }
132  if(res.hasProperty(GEO.LINESTRINGIMAGESTYLE2)){
133  result.lineStringImageStyle=res.getProperty(GEO.LINESTRINGIMAGESTYLE2).getLiteral().getString();
134  }
135  if(res.hasProperty(GEO.POLYGONSTYLE2)){
136  result.polygonStyle=res.getProperty(GEO.POLYGONSTYLE2).getLiteral().getString();
137  }
138  if(res.hasProperty(GEO.POLYGONIMAGE2)){
139  result.polygonImage=res.getProperty(GEO.POLYGONIMAGE2).getLiteral().getString();
140  }
141  if(res.hasProperty(GEO.HATCH2)){
142  result.polygonImage=res.getProperty(GEO.HATCH2).getLiteral().getString();
143  }
144  return result;
145  }

References StyleObject.hatch, GEO.HATCH, GEO.HATCH2, StyleObject.lineStringImage, GEO.LINESTRINGIMAGE, GEO.LINESTRINGIMAGE2, StyleObject.lineStringImageStyle, GEO.LINESTRINGIMAGESTYLE, GEO.LINESTRINGIMAGESTYLE2, StyleObject.lineStringStyle, GEO.LINESTRINGSTYLE, GEO.LINESTRINGSTYLE2, StyleObject.pointImage, GEO.POINTIMAGE, GEO.POINTIMAGE2, StyleObject.pointStyle, GEO.POINTSTYLE, GEO.POINTSTYLE2, StyleObject.polygonImage, GEO.POLYGONIMAGE, GEO.POLYGONIMAGE2, StyleObject.polygonStyle, GEO.POLYGONSTYLE, GEO.POLYGONSTYLE2, GEO.POPUPSTYLE, GEO.POPUPSTYLE2, StyleObject.styleId, StyleObject.styleName, and GEO.TEXTSTYLE2.

Referenced by ResourceDescription.getStyle(), AbstractGeoJSONWriter.prepareGeoJSONString(), and KMLWriter.write().

◆ write()

ExtendedIterator<Resource> write ( Model  model,
HttpServletResponse  response 
) throws IOException

Reimplemented from ModelWriter.

35  {
36  ExtendedIterator<Resource> it = super.write(model, response);
37  if (!it.hasNext()) {
38  response.getWriter().write("");
39  response.getWriter().close();
40  } else {
41  XMLOutputFactory factory = XMLOutputFactory.newInstance();
42  StringWriter strwriter = new StringWriter();
43  try {
44  XMLStreamWriter writer = new IndentingXMLStreamWriter(factory.createXMLStreamWriter(strwriter));
45  writer.writeStartDocument();
46  writer.writeStartElement("Document");
47  writer.writeDefaultNamespace("http://www.opengis.net/kml/2.2");
48  writer.writeStartElement("Placemark");
49  while (it.hasNext()) {
50  Resource ind = it.next();
51  if(ind.hasProperty(GEO.EPSG)) {
52  sourceCRS="EPSG:"+ind.getProperty(GEO.EPSG).getObject().asLiteral().getValue().toString();
53  }
54  if(ind.hasProperty(GEO.STYLE)) {
55  styleObject=handleStyle(ind.getProperty(GEO.STYLE).getObject().asResource());
56  }
57  StmtIterator it2 = ind.listProperties();
58  while (it2.hasNext()) {
59  Statement curst = it2.next();
60  this.handleGeometry(curst, ind, model);
61  }
62  }
63  it.close();
64  if(geom!=null) {
65  lat = geom.getCentroid().getCoordinate().getY();
66  lon = geom.getCentroid().getCoordinate().getX();
67  geom=null;
68  }
69  if (lat != null && lon != null) {
70  writer.writeStartElement("Point");
71  writer.writeStartElement("coordinates");
72  writer.writeCharacters(lat + " " + lon);
73  writer.writeEndElement();
74  writer.writeEndElement();
75  lat=null;
76  lon=null;
77  }
78  if(styleObject!=null) {
79  writer.writeStartElement("Style");
80  writer.writeCharacters("");
81  writer.flush();
82  strwriter.write(this.styleformatter.formatGeometry("LineString", styleObject));
83  strwriter.write(this.styleformatter.formatGeometry("Polygon", styleObject));
84  strwriter.write(this.styleformatter.formatGeometry("Point", styleObject));
85  writer.writeEndElement();
86  }
87  it = model.listResourcesWithProperty(usedProperty);
88  writer.writeStartElement("ExtendedData");
89  while (it.hasNext()) {
90  Resource ind = it.next();
91  StmtIterator it2 = ind.listProperties();
92  while (it2.hasNext()) {
93  Statement curst = it2.next();
94  writer.writeStartElement("Data");
95  writer.writeAttribute("name", curst.getPredicate().getURI().toString());
96  writer.writeStartElement("displayName");
97  writer.writeCharacters(curst.getPredicate().getURI().toString()
98  .substring(curst.getPredicate().getURI().toString().lastIndexOf('/') + 1));
99  writer.writeEndElement();
100  writer.writeStartElement("value");
101  if (curst.getObject().toString().contains("^^")) {
102  writer.writeCharacters(curst.getObject().toString().substring(0,
103  curst.getObject().toString().lastIndexOf("^^")));
104  } else {
105  writer.writeCharacters(curst.getObject().toString());
106  }
107  writer.writeEndElement();
108  writer.writeEndElement();
109  }
110  }
111  writer.writeEndElement();
112  writer.writeEndElement();
113  writer.writeEndElement();
114  writer.writeEndDocument();
115  writer.flush();
116  } catch (XMLStreamException e1) {
117  // TODO Auto-generated catch block
118  e1.printStackTrace();
119  }
120  try {
121  response.getWriter().write(strwriter.toString());
122  response.getWriter().close();
123  } catch (JSONException e) {
124  // TODO Auto-generated catch block
125  e.printStackTrace();
126  } catch (IOException e) {
127  // TODO Auto-generated catch block
128  e.printStackTrace();
129  }
130  }
131 
132  return null;
133  }
StyleObject styleObject
Definition: GeoModelWriter.java:40
Tuple< Boolean, String > handleGeometry(Statement curst, Resource ind, Model model)
Definition: GeoModelWriter.java:148
static StyleObject handleStyle(Resource res)
Definition: GeoModelWriter.java:52
Property usedProperty
Definition: ModelWriter.java:20
abstract String formatGeometry(String geometrytype, StyleObject styleobj)
Formats a geometry according to a given geometrytype using information from a given styleobj.

References GEO.EPSG, ResultStyleFormatter.formatGeometry(), GeoModelWriter.geom, GeoModelWriter.handleGeometry(), GeoModelWriter.handleStyle(), GeoModelWriter.lat, GeoModelWriter.lon, GeoModelWriter.sourceCRS, GEO.STYLE, GeoModelWriter.styleformatter, GeoModelWriter.styleObject, and ModelWriter.usedProperty.

Member Data Documentation

◆ cov

GridCoverage cov
protectedinherited

◆ epsg

String epsg =null
protectedinherited

Referenced by AbstractGeoJSONWriter.AbstractGeoJSONWriter(), CoverageJSONWriter.CoverageJSONWriter(), CSVWriter.CSVWriter(), CypherWriter.CypherWriter(), ESRIJSONWriter.ESRIJSONWriter(), EWKTWriter.EWKTWriter(), EXIJSONWriter.EXIJSONWriter(), GDFWriter.GDFWriter(), GeobufWriter.GeobufWriter(), GeoHashWriter.GeoHashWriter(), GeoJSONLDWriter.GeoJSONLDWriter(), GeoJSONWriterr.GeoJSONWriterr(), GeoModelWriter.GeoModelWriter(), GeoURIWriter.GeoURIWriter(), GEXFWriter.GEXFWriter(), GMLWriter.GMLWriter(), GoogleMapsLinkWriter.GoogleMapsLinkWriter(), GPXWriter.GPXWriter(), GraphMLWriter.GraphMLWriter(), GRASSVectorASCIIWriter.GRASSVectorASCIIWriter(), GXLWriter.GXLWriter(), GeoModelWriter.handleGeometry(), HexTuplesWriter.HexTuplesWriter(), JSONPWriter.JSONPWriter(), KMLWriter.KMLWriter(), LatLonTextWriter.LatLonTextWriter(), LDWriter.LDWriter(), MapMLWriter.MapMLWriter(), OpenLocationCodeWriter.OpenLocationCodeWriter(), OSMLinkWriter.OSMLinkWriter(), OSMWriter.OSMWriter(), SHPWriter.SHPWriter(), SVGWriter.SVGWriter(), TGFWriter.TGFWriter(), TLPWriter.TLPWriter(), TopoJSONWriter.TopoJSONWriter(), TWKBWriterr.TWKBWriterr(), WKBRasterWriter.WKBRasterWriter(), WKBWriterr.WKBWriterr(), WKTWriter.WKTWriter(), X3DWriter.write(), XYZASCIIWriter.write(), ESRIJSONWriter.write(), EWKTWriter.write(), GeoURIWriter.write(), GoogleMapsLinkWriter.write(), GPXWriter.write(), MapMLWriter.write(), OSMLinkWriter.write(), TWKBWriterr.write(), WKBWriterr.write(), WKTWriter.write(), XLSWriter.write(), XLSXWriter.write(), LDWriter.write(), X3DWriter.X3DWriter(), XLSWriter.XLSWriter(), XLSXWriter.XLSXWriter(), XYZASCIIWriter.XYZASCIIWriter(), and YAMLWriter.YAMLWriter().

◆ geom

◆ lat

◆ lon

◆ reader

◆ sourceCRS

◆ styleformatter

◆ styleObject

StyleObject styleObject
protectedinherited

◆ usedProperty

Property usedProperty =null
protectedinherited