package org.androad.sys.ors.ds.openrouteservice; import java.util.Formatter; import java.util.Locale; import junit.framework.Assert; import org.osmdroid.util.GeoPoint; import org.androad.sys.ors.adt.ds.DirectoryType; import org.androad.sys.ors.adt.ds.POIType; import org.androad.sys.ors.util.Util; import org.androad.sys.ors.util.constants.ORSXMLConstants; import android.content.Context; public class OpenRouteServiceDSRequestComposer implements ORSXMLConstants { /** * <pre><?xml version="1.0" encoding="UTF-8"?> * <xls:XLS xmlns:xls="http://www.opengis.net/xls" xmlns:sch="http://www.ascc.net/xml/schematron" * xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" * xsi:schemaLocation="http://www.opengis.net/xls http://schemas.opengis.net/ols/1.1.0/DirectoryService.xsd" version="1.1"> * <xls:RequestHeader/> * <xls:Request methodName="DirectoryRequest" requestID="123456789" version="1.1"> * <xls:DirectoryRequest distanceUnit="M" sortCriteria="Distance"> * <xls:POILocation> * <xls:WithinDistance> * <xls:Position> * <gml:Point> * <gml:pos>7.092298 50.733306</gml:pos> * </gml:Point> * </xls:Position> * <xls:MinimumDistance value="500" uom="M"/> * </xls:WithinDistance> * </xls:POILocation> * <xls:POIProperties directoryType="OSM"> * <xls:POIProperty name="Keyword" value="public_tran"/> * </xls:POIProperties> * </xls:DirectoryRequest> * </xls:Request> * </xls:XLS></pre> */ public static String create(final Context ctx, final GeoPoint aGeoPoint, final POIType aPOIType, final int pRadiusMeters){ Assert.assertNotNull(aGeoPoint); Assert.assertNotNull(aPOIType); final StringBuilder sb = new StringBuilder(); final Formatter f = new Formatter(sb, Locale.ENGLISH); sb.append(XML_BASE_TAG_UTF8) .append(XLS_OPENGIS_DIRECTORYSERVICE_TAG_OPEN); f.format(XLS_REQUESTHEADER_TAG, Util.getORSClientName(ctx)); sb.append(XLS_REQUESTMETHOD_DIRECTORY_TAG_OPEN) .append(XLS_DIRECTORYREQUEST_TAG_OPEN) .append(XLS_POILOCATION_TAG_OPEN) .append(XLS_WITHINDISTANCE_TAG_OPEN) .append(XLS_POSITION_TAG_OPEN) .append(GML_POINT_TAG_OPEN); f.format(GML_POS_TAG, aGeoPoint.getLongitudeE6() / 1E6, aGeoPoint.getLatitudeE6() / 1E6); sb.append(GML_POINT_TAG_CLOSE) .append(XLS_POSITION_TAG_CLOSE); f.format(XLS_MAXIMUMDISTANCE_TAG, pRadiusMeters); sb.append(XLS_WITHINDISTANCE_TAG_CLOSE) .append(XLS_POILOCATION_TAG_CLOSE); f.format(XLS_POIPROPERTIES_TAG_OPEN, DirectoryType.OSM.mName); switch(aPOIType.POIGROUPS[0]){ case MAINGROUP: f.format(XLS_POIPROPERTY_TAG, XLS_POIPROPERTY_MAINGROUP_NAME, aPOIType.RAWNAME); break; default: f.format(XLS_POIPROPERTY_TAG, XLS_POIPROPERTY_SUBGROUP_NAME, aPOIType.RAWNAME); break; } sb.append(XLS_POIPROPERTIES_TAG_CLOSE) .append(XLS_DIRECTORYREQUEST_TAG_CLOSE) .append(XLS_REQUESTMETHOD_DIRECTORY_TAG_CLOSE) .append(XLS_OPENGIS_DIRECTORYSERVICE_TAG_CLOSE); return sb.toString(); } }