package bristol;
import com.megginson.sax.DataWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.postgis.Geometry;
import org.postgis.LineString;
import org.postgis.MultiLineString;
import org.postgis.PGbox2d;
import org.postgis.PGbox3d;
import org.postgis.PGgeometry;
import org.postgis.Point;
import org.xml.sax.SAXException;
public class GoogleMapsServlet extends HttpServlet {
java.sql.Connection conn;
/** Processes requests for both HTTP GET and POST methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/xml;charset=UTF-8");
PrintWriter out = response.getWriter();
String longitude_west = request.getParameter("longitude_west");
String latitude_south = request.getParameter("latitude_south");
String longitude_east = request.getParameter("longitude_east");
String latitude_north = request.getParameter("latitude_north");
// llb 78.84196025356454 29.74739718007597
// urt 78.96069820510147 29.82851883423195
if (longitude_west == null){ longitude_west = "78.84196025356454";};
if (latitude_south == null){ latitude_south = "29.74739718007597";};
if (longitude_east == null){ longitude_east = "78.96069820510147";};
if (latitude_north == null){ latitude_north = "29.82851883423195";};
String url = "EchoServlet?" +
"longitude_west=" + longitude_west +
"&latitude_south=" + latitude_south +
"&longitude_east=" + longitude_east +
"&latitude_north=" + latitude_north;
try {
StringWriter sw = new StringWriter();
DataWriter w = new DataWriter(sw);
/*
77.0773800000000128.1704
80.7331831.4303
*/
w.startElement("gml:boundedBy");
w.startElement("gml:Box");
w.startElement("gml:coord");
w.dataElement("gml:X", longitude_west + "");
w.dataElement("gml:Y", latitude_south + "");
w.endElement("gml:coord");
w.startElement("gml:coord");
w.dataElement("gml:X", longitude_east + "");
w.dataElement("gml:Y", latitude_north + "");
w.endElement("gml:coord");
w.endElement("gml:Box");
w.endElement("gml:boundedBy");
/*
* Load the JDBC driver and establish a connection.
*/
Class.forName("org.postgresql.Driver");
String dburl = "jdbc:postgresql://localhost:5432/postgis";
conn = DriverManager.getConnection(dburl, "postgres", "postgres");
/*
* Add the geometry types to the connection. Note that you
* must cast the connection to the pgsql-specific connection
* implementation before calling the addDataType() method.
*/
((org.postgresql.PGConnection) conn).addDataType("geometry",
PGgeometry.class);
((org.postgresql.PGConnection) conn).addDataType("box3d",
PGbox3d.class);
((org.postgresql.PGConnection) conn).addDataType("box2d",
PGbox2d.class);
/*
* Create a statement and execute a select query.
*/
Statement s = conn.createStatement();
// llb 78.84196025356454 29.74739718007597
// urt 78.96069820510147 29.82851883423195
String llb = longitude_west + " " + latitude_south;
//"78.84196025356454 29.74739718007597";
// lower left bottom
String ult = longitude_west + " " + latitude_north;
//"78.84196025356454 29.82851883423195";
// upper left top
String urt = longitude_east + " " + latitude_north;
//"78.96069820510147 29.82851883423195";
// upper right top
String lrb = longitude_east + " " + latitude_south;
//"78.96069820510147 29.74739718007597";
// lower botton right
String query = "SELECT intersection(wkb_geometry, GeometryFromText('POLYGON((" +
llb + "," +
ult + "," +
urt + "," +
lrb + "," +
llb +
"))', -1)) AS GEOM, ogc_fid FROM roads WHERE" +
" wkb_geometry && SetSRID('BOX3D(" + llb + "," + urt + ")'::box3d,-1)";
//System.out.println(query);
ResultSet r = s.executeQuery(query);
while (r.next()) {
/*
* Retrieve the geometry as an object then cast it to the geometry type.
* Print things out.
*/
PGgeometry geom = (PGgeometry) r.getObject(1);
if (geom.getGeoType() == Geometry.LINESTRING){
LineString ls = (LineString) geom.getGeometry();
w = printLineString(ls, w);
}
if (geom.getGeoType() == Geometry.MULTILINESTRING){
MultiLineString mls = (MultiLineString) geom.getGeometry() ;
LineString [] lineStrings = mls.getLines();
for(int i=0;i" +
"\n\n";
String endDocument = "\n";
out.println(startDocument + sw.toString() + endDocument);
} catch (Exception e) {
e.printStackTrace();
}
out.close();
}
private static DataWriter printLineString(LineString ls, DataWriter w) throws SAXException{
w.startElement("gml:featureMember");
w.startElement("ogr:roads");
w.startElement("ogr:geometryProperty");
w.startElement("gml:LineString");
Point [] points = ls.getPoints();
// 324.1219.7
for(int i=0;i
/** Handles the HTTP GET method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Handles the HTTP POST method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
//
}