/** * Returns {@code com.google.appengine.api.datastore.GeoPt} value as string * representation. */ @Override protected String convertToString(Object value) throws Throwable { GeoPt geoPt = (GeoPt) value; return new BigDecimal(geoPt.getLatitude()) + "," + new BigDecimal(geoPt.getLongitude()); }
public static String toString(GeoPt pt) { float lat = pt.getLatitude(); char ns = lat > 0 ? 'N' : 'S'; lat = Math.abs(lat); int lati = (int) lat; lat = lat-lati; float lon = pt.getLongitude(); char we = lon > 0 ? 'E' : 'W'; lon = Math.abs(lon); int loni = (int) lon; lon = lon-loni; return String.format(Locale.US, "%c %d\u00b0 %.3f', %c %d\u00b0 %.3f'", ns, lati, lat*60, we, loni, lon*60 ); } public static byte[] getBytes(Object ob)
@Override public GeoPoint from(GeoPt from) { return from == null ? null : new GeoPoint(from.getLatitude(), from.getLongitude()); }
@Override public GeoPoint toFieldValue(Object hrdValue) { GeoPt point = (GeoPt) hrdValue; return new GeoPoint(point.getLatitude(), point.getLongitude()); } };
public static void serialize(SerializationStreamWriter streamWriter, GeoPt instance) throws SerializationException { streamWriter.writeFloat(instance.getLatitude()); streamWriter.writeFloat(instance.getLongitude()); } }
@Test public void testGets() throws Exception { Query query = new Query(kindName, rootKey); GeoPt filter = new GeoPt(Float.valueOf(60).floatValue(), Float.valueOf(145).floatValue()); query.setFilter(new FilterPredicate(propertyName, Query.FilterOperator.EQUAL, filter)); Entity entity = service.prepare(query).asSingleEntity(); GeoPt geopt = (GeoPt) entity.getProperty(propertyName); assertTrue(geopt.equals(filter)); assertEquals(Float.valueOf(geopt.getLatitude()).toString(), Float.valueOf(60).toString()); assertEquals(Float.valueOf(geopt.getLongitude()).toString(), Float.valueOf(145).toString()); }
@Test public void testGeoptType() { List<Entity> elist = doQuery(kindName, propertyName, GeoPt.class, true); GeoPt rate = (GeoPt) elist.get(0).getProperty(propertyName); GeoPt sameDat = (GeoPt) elist.get(0).getProperty(propertyName); GeoPt diffDat = (GeoPt) elist.get(1).getProperty(propertyName); assertTrue(rate.equals(sameDat)); assertFalse(rate.equals(diffDat)); assertEquals(-12, rate.getLatitude(), 0); assertEquals(120, rate.getLongitude(), 0); assertEquals(0, rate.compareTo(sameDat)); assertTrue(rate.compareTo(diffDat) != 0); assertEquals(rate.hashCode(), rate.hashCode()); } }