[postgis-users] [Spatial Query] Experiencing difficulties with Postgis, Google Maps and EJB3.

Paul Ramsey pramsey at refractions.net
Tue Sep 11 09:29:47 PDT 2007


You've got Contains(point, polygon) in this, which will always return 
nothing... flip your contains arguments around.

P

easyCity Team wrote:
> Hi guys,
> 
> I'm trying do do a simple spatial query using PostGIS 1.1.2, Google Maps 
> and EJB3... but it gets pretty frustrating :) Probably because I'm new 
> to PostGIS.
> 
> I would like to get all the points of interest that are  in  a 
> rectangular area (the visible map area for the user).
> 
> My POI are stored using a custom projection with the SRID 101 in my 
> database.
> The map bounds are in latitude and longitude (I have 2 points : 
> southWest and sorthEast).
> 
> First, I red postgis documentation (§3.3) and tried to perform a native 
> query using a postgresql client :
> 
> select     poi_gid, astext(geometry) as geom
> from     poi AS p
> where      transform(
>                GeomFromText(
>                    'POLYGON((
>                        48.88190472849405 2.3015928268432617,
>                        48.88190472849405 2.3398303985595703,
>                        48.86417836241082 2.3015928268432617,
>                        48.86417836241082 2.3398303985595703,
>                        48.88190472849405 2.3015928268432617))',
>                    4326)
>            , 101) && p.geometry
>           and Contains(p.geometry,
>            transform(
>                GeomFromText(
>                    'POLYGON((
>                        48.88190472849405 2.3015928268432617,
>                        48.88190472849405 2.3398303985595703,
>                        48.86417836241082 2.3015928268432617,
>                        48.86417836241082 2.3398303985595703,
>                        48.88190472849405 2.3015928268432617))',
>                    4326)
>            , 101)          );
> 
> I got no error but no result neither.
> 
> Then I tried the EJB3 way (but I don't really know how to use the 
> spatial.XXX methods - is there any documentation about it?):
> 
>    public String localSearch(String what, double northEastLat,
>            double northEastLng, double southWestLat, double southWestLng) {
> 
>        // Get the projected coordinates - TODO: Use a nicer way, 
> probably with the org.postgis.Point class
>        String neStr = this.getProjectedPoint(northEastLat, northEastLng, 
> 101);
>        neStr = neStr.replace("POINT(", "").replace(")", "");
>        String swStr = this.getProjectedPoint(southWestLat, southWestLng, 
> 101);
>        swStr = swStr.replace("POINT(", "").replace(")", "");
>              double neX = Double.parseDouble(neStr.split(" ")[0]);
>        double neY = Double.parseDouble(neStr.split(" ")[1]);
>        double swX = Double.parseDouble(swStr.split(" ")[0]);
>        double swY = Double.parseDouble(swStr.split(" ")[1]);
>              System.out.println(swStr);
>        System.out.println(neX);
>        System.out.println(neY);
>              // Query POI in the bounded area
>        Query query = em.createQuery("SELECT p FROM POI p "
>                + "WHERE         spatial.X(p.location)     >=:neX "
>                + "AND             spatial.X(p.location)    <=:swX "
>                + "AND             spatial.Y(p.location)    >=:swY "
>                + "AND             spatial.Y(p.location)    <=:neY ");
>        query.setParameter("neX", neX);
>        query.setParameter("swX", swX);
>        query.setParameter("swY", swY);
>        query.setParameter("neY", neY);
>        List<POI> poiResults = query.setMaxResults(20).getResultList();
>      
>        System.out.println("> " + poiResults.size());
>        System.out.println(northEastLat + " " + southWestLng);
>        System.out.println(northEastLat + " " + northEastLng);
>        System.out.println(southWestLat + " " + southWestLng);
>        System.out.println(southWestLat + " " + northEastLng);
> 
>        return "Hello";
>    }
>      private String getProjectedPoint(double lat, double lng, int 
> destProjId) {
>        int srcProjId = 4326;
>        String query = "select AsText(transform(GeomFromText('POINT("
>            + lat + " " + lng + ")'," + srcProjId + ")," + destProjId
>            + "))";
>              Query q = em.createNativeQuery(query);
>        return (String) q.getSingleResult();
>    }
> 
> I got no error but no result neither.
> 
> I know that this code could be significantly improved with more 
> knowledge on the technologies (postgis and ejb3 spatial).
> Could you give me some tips and guidelines to help me out ?
> 
> Best Regards
> 
> Romain
> 
> 
> 
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users


-- 

   Paul Ramsey
   Refractions Research
   http://www.refractions.net
   pramsey at refractions.net
   Phone: 250-383-3022
   Cell: 250-885-0632



More information about the postgis-users mailing list