public class CreateKmlFileActivity extends FragmentActivity {
private GoogleMap googleMap;
private SupportMapFragment supportMapFragment;
private ArrayList<LatLng> latLngArrayList = new ArrayList<>();
private ArrayList<LatLng> latLngArrayListLine = new ArrayList<>();
private Button button, buttonLine;
private XmlSerializer xmlSerializer;
private boolean flag = false;
private Handler handler;
private Runnable runnable;
GPSTracker gpsTracker;
private double lat;
private double lng;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_task3);
init();
listener();
}
private void init() {
button = (Button) findViewById(R.id.btn_find);
buttonLine = (Button) findViewById(R.id.btn_line);
supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
googleMap = supportMapFragment.getMap();
gpsTracker = new GPSTracker(this);
lat = gpsTracker.latitude;
lng = gpsTracker.longitude;
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
gpsTracker.getLocation();
if (lat != gpsTracker.latitude || lng != gpsTracker.longitude) {
latLngArrayListLine.add(new LatLng(gpsTracker.latitude, gpsTracker.longitude));
lat = gpsTracker.latitude;
lng = gpsTracker.longitude;
}
handler.postDelayed(runnable, 1000 * 60);
}
};
if (!gpsTracker.getIsGPSTrackingEnabled()) {
gpsTracker.showSettingsAlert();
}
//gpsTracker.latitude
}
private void listener() {
googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
if (!flag)
latLngArrayList.add(latLng);
else
googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
}
});
buttonLine.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.removeCallbacks(runnable);
flag = false;
try {
FileOutputStream fileOutputStream = openFileOutput("testLine.kml", Context.MODE_PRIVATE);
xmlSerializer = XmlPullParserFactory.newInstance().newSerializer();
xmlSerializer.setOutput(fileOutputStream, "UTF-8");
xmlSerializer.startDocument(null, null);
xmlSerializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
xmlSerializer.startTag(null, "kml");
xmlSerializer.startTag(null, "Document");
xmlSerializer.startTag(null, "name");
xmlSerializer.text("kmlFile");
xmlSerializer.endTag(null, "name");
xmlSerializer.startTag(null, "Style");
xmlSerializer.attribute(null, "id", "transGreenPoly");
xmlSerializer.startTag(null, "LineStyle");
xmlSerializer.startTag(null, "width");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "width");
xmlSerializer.startTag(null, "color");
xmlSerializer.text("7dff0000");
xmlSerializer.endTag(null, "color");
xmlSerializer.startTag(null, "colorMode");
xmlSerializer.text("random");
xmlSerializer.endTag(null, "colorMode");
xmlSerializer.endTag(null, "LineStyle");
xmlSerializer.endTag(null, "Style");
xmlSerializer.startTag(null, "Folder");
xmlSerializer.startTag(null, "name");
xmlSerializer.text("Google Campus");
xmlSerializer.endTag(null, "name");
xmlSerializer.startTag(null, "visibility");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "visibility");
xmlSerializer.startTag(null, "description");
xmlSerializer.text("Your Data");
xmlSerializer.endTag(null, "description");
xmlSerializer.startTag(null, "Placemark");
xmlSerializer.startTag(null, "name");
xmlSerializer.text("Data");
xmlSerializer.endTag(null, "name");
xmlSerializer.startTag(null, "visibility");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "visibility");
xmlSerializer.startTag(null, "styleUrl");
xmlSerializer.text("#transRedPoly");
xmlSerializer.endTag(null, "styleUrl");
xmlSerializer.startTag(null, "LineString");
xmlSerializer.startTag(null, "extrude");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "extrude");
xmlSerializer.startTag(null, "altitudeMode");
xmlSerializer.text("relativeToGround");
xmlSerializer.endTag(null, "altitudeMode");
//xmlSerializer.startTag(null, "outerBoundaryIs");
// xmlSerializer.startTag(null, "LinearRing");
xmlSerializer.startTag(null, "coordinates");
for (int i = 0; i < latLngArrayListLine.size(); i++) {
if (isPointInPolygon(latLngArrayListLine.get(i), latLngArrayList))
xmlSerializer.text(latLngArrayListLine.get(i).longitude + "," + latLngArrayListLine.get(i).latitude + ",17 \n");
}
xmlSerializer.endTag(null, "coordinates");
// xmlSerializer.endTag(null, "LinearRing");
//xmlSerializer.endTag(null, "outerBoundaryIs");
xmlSerializer.endTag(null, "LineString");
xmlSerializer.endTag(null, "Placemark");
xmlSerializer.endTag(null, "Folder");
xmlSerializer.endTag(null, "Document");
xmlSerializer.endTag(null, "kml");
xmlSerializer.endDocument();
xmlSerializer.flush();
fileOutputStream.close();
} catch (IOException | XmlPullParserException e) {
e.printStackTrace();
}
}
});
}
}