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"; } // }