// 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
// ===========================================================
}