// Created by plusminus on 17:09:24 - 25.01.2009 package org.androad.sys.ors.aps; import java.util.Formatter; import java.util.List; import java.util.Locale; import org.osmdroid.util.GeoPoint; import org.androad.sys.ors.aps.util.constants.APSConstants; import org.androad.sys.ors.util.constants.ORSXMLConstants; public class APSRequestComposer implements ORSXMLConstants, APSConstants { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== // =========================================================== // Constructors // =========================================================== // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== // =========================================================== // Methods // =========================================================== /** * <pre><?xml version="1.0" encoding="UTF-8"?> * <xls:XLS xmlns:xls="http://www.opengis.net/xls" * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" * xmlns:gml="http://www.opengis.net/gml" version="1.1" * xsi:schemaLocation="http://www.opengis.net/xls * http://schemas.opengis.net/ols/1.1.0/RouteService.xsd"> * <xls:RouteGeometry> * <gml:LineString srsName="EPSG:4326"> * <gml:pos>8.68108 49.40781</gml:pos> * ... * <gml:pos>8.69311 49.41473</gml:pos> * </gml:LineString> * </xls:RouteGeometry> * </xls:XLS></pre> * @param startIndex */ public static String createXMLPostRequest(final List<GeoPoint> pGeoPoints, final int pStartIndex){ final StringBuilder sb = new StringBuilder(); final Formatter f = new Formatter(sb, Locale.ENGLISH); sb.append(XML_BASE_TAG_UTF8) .append(XLS_OPENGIS_ALTITUDESERVICE_TAG_OPEN) .append(XLS_ROUTEGEOMETRY_TAG_OPEN) .append(GML_LINESTRING_TAG_OPEN); /* Will hold the summed up length. */ int lengthSummed = 0; final int geoPointCount = pGeoPoints.size(); /* Ensure the startIndex. */ final int min = Math.min(pStartIndex, geoPointCount - 1); GeoPoint previous = pGeoPoints.get(min); for(int i = min; i < geoPointCount; i++) { final GeoPoint gp = pGeoPoints.get(i); f.format(GML_POS_TAG, gp.getLongitudeE6() / 1E6, gp.getLatitudeE6() / 1E6); lengthSummed += previous.distanceTo(gp); previous = gp; if(lengthSummed > MAXIMUM_LENGTH) { break; } } sb.append(GML_LINESTRING_TAG_CLOSE) .append(XLS_ROUTEGEOMETRY_TAG_CLOSE) .append(XLS_OPENGIS_ALTITUDESERVICE_TAG_CLOSE); return sb.toString(); } public static String createRestFulRequestURL(final String pBaseURL, final List<GeoPoint> pGeoPoints, final int pStartIndex) { final StringBuilder latBuilder = new StringBuilder(); final StringBuilder lonBuilder = new StringBuilder(); int lengthSummed = 0; GeoPoint previous = pGeoPoints.get(0); for(final GeoPoint gp : pGeoPoints){ latBuilder.append(gp.getLatitudeE6() / 1E6); latBuilder.append(','); lonBuilder.append(gp.getLongitudeE6() / 1E6); lonBuilder.append(','); lengthSummed += previous.distanceTo(gp); previous = gp; if(lengthSummed > MAXIMUM_LENGTH) { break; } } /* Cur last comma. */ if(latBuilder.length() > 0 && lonBuilder.length() > 0){ latBuilder.setLength(latBuilder.length() - 1); lonBuilder.setLength(lonBuilder.length() - 1); } return String.format(Locale.ENGLISH, pBaseURL, latBuilder.toString(), lonBuilder.toString()); } // =========================================================== // Inner and Anonymous Classes // =========================================================== }