1c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood/* 28ab8b411b81e4581060a31a97a0cb204a803b2e5Mike Lockwood * Copyright (C) 2008 The Android Open Source Project 3c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 4c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * use this file except in compliance with the License. You may obtain a copy of 6c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * the License at 7c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 8c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 9c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * 10c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Unless required by applicable law or agreed to in writing, software 11c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * License for the specific language governing permissions and limitations under 14c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * the License. 15c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */ 16c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 17191d898468d2f4910a684f429bec518320843744Mike Lockwoodpackage com.android.locationtracker.data; 18c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 19191d898468d2f4910a684f429bec518320843744Mike Lockwoodimport com.android.locationtracker.data.TrackerEntry.EntryType; 20c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 21c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodimport android.location.Location; 22c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 23c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood/** 24c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Formats tracker data as KML output 25c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */ 26c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodclass KMLFormatter implements IFormatter { 27c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 28c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood public String getHeader() { 29c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood LineBuilder builder = new LineBuilder(); 30c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); 31c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("<kml xmlns=\"http://earth.google.com/kml/2.2\">"); 32c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("<Document>"); 33c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return builder.toString(); 34c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 35c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 36c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood public String getFooter() { 37c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood LineBuilder builder = new LineBuilder(); 38c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("</Document>"); 39c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("</kml>"); 40c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return builder.toString(); 41c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 42c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 43c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood public String getOutput(TrackerEntry entry) { 44c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood LineBuilder builder = new LineBuilder(); 45c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 46c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood if (entry.getType() == EntryType.LOCATION_TYPE) { 47c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 48c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood Location loc = entry.getLocation(); 49c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("<Placemark>"); 50c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("<description>"); 51c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("accuracy = " + loc.getAccuracy()); 52c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("distance from last network location = " 53c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood + entry.getDistFromNetLocation()); 54c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("</description>"); 55c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("<TimeStamp>"); 56c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("<when>" + entry.getTimestamp() + "</when>"); 57c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("</TimeStamp>"); 58c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("<Point>"); 59c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("<coordinates>"); 60c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine(loc.getLongitude() + "," + loc.getLatitude() + "," 61c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood + loc.getAltitude()); 62c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("</coordinates>"); 63c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("</Point>"); 64c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood builder.addLine("</Placemark>"); 65c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 66c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return builder.toString(); 67c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 68c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 69c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private static class LineBuilder { 70c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood private StringBuilder mBuilder; 71c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 72c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood public LineBuilder() { 73c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mBuilder = new StringBuilder(); 74c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 75c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 76c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood public void addLine(String line) { 77c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mBuilder.append(line); 78c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood mBuilder.append("\n"); 79c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 80c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 81c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood @Override 82c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood public String toString() { 83c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood return mBuilder.toString(); 84c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 85c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 86c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood } 87c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood 88c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood} 89