From dfcfc78c5084af2371268bc6991960b9d24bd5d7 Mon Sep 17 00:00:00 2001 From: elidioxg Date: Thu, 9 Feb 2017 01:21:42 -0300 Subject: [PATCH] Layout changes, some fixes. --- .../geocodigos/gpsmarker/ApplicationTest.java | 13 + GPSMarker/app/src/main/AndroidManifest.xml | 4 +- .../Conversion/CoordinateConversion.java | 768 ++++++++++++++++++ .../gpsmarker/Database/DatabaseHelper.java | 6 +- .../gpsmarker/Fragments/ViewPoints.java | 4 +- .../gpsmarker/GPSLocationViewFragment.java | 39 +- .../app/src/main/res/layout/kml_export.xml | 7 + .../app/src/main/res/layout/list_item.xml | 158 ++-- .../app/src/main/res/layout/view_points.xml | 40 +- .../app/src/main/res/layout/view_reccord.xml | 492 +++++------ .../app/src/main/res/mipmap-hdpi/ic_csv.png | Bin 0 -> 1806 bytes .../app/src/main/res/mipmap-mdpi/ic_csv.png | Bin 0 -> 1300 bytes .../app/src/main/res/mipmap-xhdpi/ic_csv.png | Bin 0 -> 2578 bytes .../app/src/main/res/mipmap-xxhdpi/ic_csv.png | Bin 0 -> 4069 bytes .../src/main/res/mipmap-xxxhdpi/ic_csv.png | Bin 0 -> 5773 bytes GPSMarker/app/src/main/res/values/strings.xml | 3 + README.md | 12 +- 17 files changed, 1171 insertions(+), 375 deletions(-) create mode 100644 GPSMarker/app/src/androidTest/java/geocodigos/gpsmarker/ApplicationTest.java create mode 100755 GPSMarker/app/src/main/java/geocodigos/gpsmarker/Conversion/CoordinateConversion.java create mode 100644 GPSMarker/app/src/main/res/mipmap-hdpi/ic_csv.png create mode 100644 GPSMarker/app/src/main/res/mipmap-mdpi/ic_csv.png create mode 100644 GPSMarker/app/src/main/res/mipmap-xhdpi/ic_csv.png create mode 100644 GPSMarker/app/src/main/res/mipmap-xxhdpi/ic_csv.png create mode 100644 GPSMarker/app/src/main/res/mipmap-xxxhdpi/ic_csv.png diff --git a/GPSMarker/app/src/androidTest/java/geocodigos/gpsmarker/ApplicationTest.java b/GPSMarker/app/src/androidTest/java/geocodigos/gpsmarker/ApplicationTest.java new file mode 100644 index 0000000..73743e2 --- /dev/null +++ b/GPSMarker/app/src/androidTest/java/geocodigos/gpsmarker/ApplicationTest.java @@ -0,0 +1,13 @@ +package geocodigos.gpsmarker; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/GPSMarker/app/src/main/AndroidManifest.xml b/GPSMarker/app/src/main/AndroidManifest.xml index 79f32e2..4043059 100644 --- a/GPSMarker/app/src/main/AndroidManifest.xml +++ b/GPSMarker/app/src/main/AndroidManifest.xml @@ -2,9 +2,9 @@ - - + diff --git a/GPSMarker/app/src/main/java/geocodigos/gpsmarker/Conversion/CoordinateConversion.java b/GPSMarker/app/src/main/java/geocodigos/gpsmarker/Conversion/CoordinateConversion.java new file mode 100755 index 0000000..5b5864b --- /dev/null +++ b/GPSMarker/app/src/main/java/geocodigos/gpsmarker/Conversion/CoordinateConversion.java @@ -0,0 +1,768 @@ +/* + * Author: Sami Salkosuo, sami.salkosuo@fi.ibm.com + * + * (c) Copyright IBM Corp. 2007 + */ +package geocodigos.gpsmarker.Conversion; + +import java.util.Hashtable; +import java.util.Map; + +public class CoordinateConversion +{ + + public CoordinateConversion() + { + + } + + public double[] utm2LatLon(String UTM) + { + UTM2LatLon c = new UTM2LatLon(); + return c.convertUTMToLatLong(UTM); + } + + public String latLon2UTM(double latitude, double longitude) + { + LatLon2UTM c = new LatLon2UTM(); + return c.convertLatLonToUTM(latitude, longitude); + + } + + private void validate(double latitude, double longitude) + { + if (latitude < -90.0 || latitude > 90.0 || longitude < -180.0 + || longitude >= 180.0) + { + throw new IllegalArgumentException( + "Legal ranges: latitude [-90,90], longitude [-180,180)."); + } + + } + + public String latLon2MGRUTM(double latitude, double longitude) + { + LatLon2MGRUTM c = new LatLon2MGRUTM(); + return c.convertLatLonToMGRUTM(latitude, longitude); + + } + + public double[] mgrutm2LatLon(String MGRUTM) + { + MGRUTM2LatLon c = new MGRUTM2LatLon(); + return c.convertMGRUTMToLatLong(MGRUTM); + } + + public double degreeToRadian(double degree) + { + return degree * Math.PI / 180; + } + + public double radianToDegree(double radian) + { + return radian * 180 / Math.PI; + } + + private double POW(double a, double b) + { + return Math.pow(a, b); + } + + private double SIN(double value) + { + return Math.sin(value); + } + + private double COS(double value) + { + return Math.cos(value); + } + + private double TAN(double value) + { + return Math.tan(value); + } + + private class LatLon2UTM + { + public String convertLatLonToUTM(double latitude, double longitude) + { + validate(latitude, longitude); + String UTM = ""; + + setVariables(latitude, longitude); + + String longZone = getLongZone(longitude); + LatZones latZones = new LatZones(); + String latZone = latZones.getLatZone(latitude); + + double _easting = getEasting(); + double _northing = getNorthing(latitude); + + UTM = longZone + " " + latZone + " " + ((int) _easting) + " " + + ((int) _northing); + // UTM = longZone + " " + latZone + " " + decimalFormat.format(_easting) + + // " "+ decimalFormat.format(_northing); + + return UTM; + + } + + protected void setVariables(double latitude, double longitude) + { + latitude = degreeToRadian(latitude); + rho = equatorialRadius * (1 - e * e) + / POW(1 - POW(e * SIN(latitude), 2), 3 / 2.0); + + nu = equatorialRadius / POW(1 - POW(e * SIN(latitude), 2), (1 / 2.0)); + + double var1; + if (longitude < 0.0) + { + var1 = ((int) ((180 + longitude) / 6.0)) + 1; + } + else + { + var1 = ((int) (longitude / 6)) + 31; + } + double var2 = (6 * var1) - 183; + double var3 = longitude - var2; + p = var3 * 3600 / 10000; + + S = A0 * latitude - B0 * SIN(2 * latitude) + C0 * SIN(4 * latitude) - D0 + * SIN(6 * latitude) + E0 * SIN(8 * latitude); + + K1 = S * k0; + K2 = nu * SIN(latitude) * COS(latitude) * POW(sin1, 2) * k0 * (100000000) + / 2; + K3 = ((POW(sin1, 4) * nu * SIN(latitude) * Math.pow(COS(latitude), 3)) / 24) + * (5 - POW(TAN(latitude), 2) + 9 * e1sq * POW(COS(latitude), 2) + 4 + * POW(e1sq, 2) * POW(COS(latitude), 4)) + * k0 + * (10000000000000000L); + + K4 = nu * COS(latitude) * sin1 * k0 * 10000; + + K5 = POW(sin1 * COS(latitude), 3) * (nu / 6) + * (1 - POW(TAN(latitude), 2) + e1sq * POW(COS(latitude), 2)) * k0 + * 1000000000000L; + + A6 = (POW(p * sin1, 6) * nu * SIN(latitude) * POW(COS(latitude), 5) / 720) + * (61 - 58 * POW(TAN(latitude), 2) + POW(TAN(latitude), 4) + 270 + * e1sq * POW(COS(latitude), 2) - 330 * e1sq + * POW(SIN(latitude), 2)) * k0 * (1E+24); + + } + + protected String getLongZone(double longitude) + { + double longZone = 0; + if (longitude < 0.0) + { + longZone = ((180.0 + longitude) / 6) + 1; + } + else + { + longZone = (longitude / 6) + 31; + } + String val = String.valueOf((int) longZone); + if (val.length() == 1) + { + val = "0" + val; + } + return val; + } + + protected double getNorthing(double latitude) + { + double northing = K1 + K2 * p * p + K3 * POW(p, 4); + if (latitude < 0.0) + { + northing = 10000000 + northing; + } + return northing; + } + + protected double getEasting() + { + return 500000 + (K4 * p + K5 * POW(p, 3)); + } + + // Lat Lon to UTM variables + + // equatorial radius + double equatorialRadius = 6378137; + + // polar radius + double polarRadius = 6356752.314; + + // flattening + double flattening = 0.00335281066474748;// (equatorialRadius-polarRadius)/equatorialRadius; + + // inverse flattening 1/flattening + double inverseFlattening = 298.257223563;// 1/flattening; + + // Mean radius + double rm = POW(equatorialRadius * polarRadius, 1 / 2.0); + + // scale factor + double k0 = 0.9996; + + // eccentricity + double e = Math.sqrt(1 - POW(polarRadius / equatorialRadius, 2)); + + double e1sq = e * e / (1 - e * e); + + double n = (equatorialRadius - polarRadius) + / (equatorialRadius + polarRadius); + + // r curv 1 + double rho = 6368573.744; + + // r curv 2 + double nu = 6389236.914; + + // Calculate Meridional Arc Length + // Meridional Arc + double S = 5103266.421; + + double A0 = 6367449.146; + + double B0 = 16038.42955; + + double C0 = 16.83261333; + + double D0 = 0.021984404; + + double E0 = 0.000312705; + + // Calculation Constants + // Delta Long + double p = -0.483084; + + double sin1 = 4.84814E-06; + + // Coefficients for UTM Coordinates + double K1 = 5101225.115; + + double K2 = 3750.291596; + + double K3 = 1.397608151; + + double K4 = 214839.3105; + + double K5 = -2.995382942; + + double A6 = -1.00541E-07; + + } + + private class LatLon2MGRUTM extends LatLon2UTM + { + public String convertLatLonToMGRUTM(double latitude, double longitude) + { + validate(latitude, longitude); + String mgrUTM = ""; + + setVariables(latitude, longitude); + + String longZone = getLongZone(longitude); + LatZones latZones = new LatZones(); + String latZone = latZones.getLatZone(latitude); + + double _easting = getEasting(); + double _northing = getNorthing(latitude); + Digraphs digraphs = new Digraphs(); + String digraph1 = digraphs.getDigraph1(Integer.parseInt(longZone), + _easting); + String digraph2 = digraphs.getDigraph2(Integer.parseInt(longZone), + _northing); + + String easting = String.valueOf((int) _easting); + if (easting.length() < 5) + { + easting = "00000" + easting; + } + easting = easting.substring(easting.length() - 5); + + String northing; + northing = String.valueOf((int) _northing); + if (northing.length() < 5) + { + northing = "0000" + northing; + } + northing = northing.substring(northing.length() - 5); + + mgrUTM = longZone + latZone + digraph1 + digraph2 + easting + northing; + return mgrUTM; + } + } + + private class MGRUTM2LatLon extends UTM2LatLon + { + public double[] convertMGRUTMToLatLong(String mgrutm) + { + double[] latlon = { 0.0, 0.0 }; + // 02CNR0634657742 + int zone = Integer.parseInt(mgrutm.substring(0, 2)); + String latZone = mgrutm.substring(2, 3); + + String digraph1 = mgrutm.substring(3, 4); + String digraph2 = mgrutm.substring(4, 5); + easting = Double.parseDouble(mgrutm.substring(5, 10)); + northing = Double.parseDouble(mgrutm.substring(10, 15)); + + LatZones lz = new LatZones(); + double latZoneDegree = lz.getLatZoneDegree(latZone); + + double a1 = latZoneDegree * 40000000 / 360.0; + double a2 = 2000000 * Math.floor(a1 / 2000000.0); + + Digraphs digraphs = new Digraphs(); + + double digraph2Index = digraphs.getDigraph2Index(digraph2); + + double startindexEquator = 1; + if ((1 + zone % 2) == 1) + { + startindexEquator = 6; + } + + double a3 = a2 + (digraph2Index - startindexEquator) * 100000; + if (a3 <= 0) + { + a3 = 10000000 + a3; + } + northing = a3 + northing; + + zoneCM = -183 + 6 * zone; + double digraph1Index = digraphs.getDigraph1Index(digraph1); + int a5 = 1 + zone % 3; + double[] a6 = { 16, 0, 8 }; + double a7 = 100000 * (digraph1Index - a6[a5 - 1]); + easting = easting + a7; + + setVariables(); + + double latitude = 0; + latitude = 180 * (phi1 - fact1 * (fact2 + fact3 + fact4)) / Math.PI; + + if (latZoneDegree < 0) + { + latitude = 90 - latitude; + } + + double d = _a2 * 180 / Math.PI; + double longitude = zoneCM - d; + + if (getHemisphere(latZone).equals("S")) + { + latitude = -latitude; + } + + latlon[0] = latitude; + latlon[1] = longitude; + return latlon; + } + } + + private class UTM2LatLon + { + double easting; + + double northing; + + int zone; + + String southernHemisphere = "ACDEFGHJKLM"; + + protected String getHemisphere(String latZone) + { + String hemisphere = "N"; + if (southernHemisphere.indexOf(latZone) > -1) + { + hemisphere = "S"; + } + return hemisphere; + } + + public double[] convertUTMToLatLong(String UTM) + { + double[] latlon = { 0.0, 0.0 }; + String[] utm = UTM.split(" "); + zone = Integer.parseInt(utm[0]); + String latZone = utm[1]; + easting = Double.parseDouble(utm[2]); + northing = Double.parseDouble(utm[3]); + String hemisphere = getHemisphere(latZone); + double latitude = 0.0; + double longitude = 0.0; + + if (hemisphere.equals("S")) + { + northing = 10000000 - northing; + } + setVariables(); + latitude = 180 * (phi1 - fact1 * (fact2 + fact3 + fact4)) / Math.PI; + + if (zone > 0) + { + zoneCM = 6 * zone - 183.0; + } + else + { + zoneCM = 3.0; + + } + + longitude = zoneCM - _a3; + if (hemisphere.equals("S")) + { + latitude = -latitude; + } + + latlon[0] = latitude; + latlon[1] = longitude; + return latlon; + + } + + protected void setVariables() + { + arc = northing / k0; + mu = arc + / (a * (1 - POW(e, 2) / 4.0 - 3 * POW(e, 4) / 64.0 - 5 * POW(e, 6) / 256.0)); + + ei = (1 - POW((1 - e * e), (1 / 2.0))) + / (1 + POW((1 - e * e), (1 / 2.0))); + + ca = 3 * ei / 2 - 27 * POW(ei, 3) / 32.0; + + cb = 21 * POW(ei, 2) / 16 - 55 * POW(ei, 4) / 32; + cc = 151 * POW(ei, 3) / 96; + cd = 1097 * POW(ei, 4) / 512; + phi1 = mu + ca * SIN(2 * mu) + cb * SIN(4 * mu) + cc * SIN(6 * mu) + cd + * SIN(8 * mu); + + n0 = a / POW((1 - POW((e * SIN(phi1)), 2)), (1 / 2.0)); + + r0 = a * (1 - e * e) / POW((1 - POW((e * SIN(phi1)), 2)), (3 / 2.0)); + fact1 = n0 * TAN(phi1) / r0; + + _a1 = 500000 - easting; + dd0 = _a1 / (n0 * k0); + fact2 = dd0 * dd0 / 2; + + t0 = POW(TAN(phi1), 2); + Q0 = e1sq * POW(COS(phi1), 2); + fact3 = (5 + 3 * t0 + 10 * Q0 - 4 * Q0 * Q0 - 9 * e1sq) * POW(dd0, 4) + / 24; + + fact4 = (61 + 90 * t0 + 298 * Q0 + 45 * t0 * t0 - 252 * e1sq - 3 * Q0 + * Q0) + * POW(dd0, 6) / 720; + + // + lof1 = _a1 / (n0 * k0); + lof2 = (1 + 2 * t0 + Q0) * POW(dd0, 3) / 6.0; + lof3 = (5 - 2 * Q0 + 28 * t0 - 3 * POW(Q0, 2) + 8 * e1sq + 24 * POW(t0, 2)) + * POW(dd0, 5) / 120; + _a2 = (lof1 - lof2 + lof3) / COS(phi1); + _a3 = _a2 * 180 / Math.PI; + + } + + double arc; + + double mu; + + double ei; + + double ca; + + double cb; + + double cc; + + double cd; + + double n0; + + double r0; + + double _a1; + + double dd0; + + double t0; + + double Q0; + + double lof1; + + double lof2; + + double lof3; + + double _a2; + + double phi1; + + double fact1; + + double fact2; + + double fact3; + + double fact4; + + double zoneCM; + + double _a3; + + double b = 6356752.314; + + double a = 6378137; + + double e = 0.081819191; + + double e1sq = 0.006739497; + + double k0 = 0.9996; + + } + + private class Digraphs + { + private Map digraph1 = new Hashtable(); + + private Map digraph2 = new Hashtable(); + + private String[] digraph1Array = { "A", "B", "C", "D", "E", "F", "G", "H", + "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", + "Y", "Z" }; + + private String[] digraph2Array = { "V", "A", "B", "C", "D", "E", "F", "G", + "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V" }; + + public Digraphs() + { + digraph1.put(new Integer(1), "A"); + digraph1.put(new Integer(2), "B"); + digraph1.put(new Integer(3), "C"); + digraph1.put(new Integer(4), "D"); + digraph1.put(new Integer(5), "E"); + digraph1.put(new Integer(6), "F"); + digraph1.put(new Integer(7), "G"); + digraph1.put(new Integer(8), "H"); + digraph1.put(new Integer(9), "J"); + digraph1.put(new Integer(10), "K"); + digraph1.put(new Integer(11), "L"); + digraph1.put(new Integer(12), "M"); + digraph1.put(new Integer(13), "N"); + digraph1.put(new Integer(14), "P"); + digraph1.put(new Integer(15), "Q"); + digraph1.put(new Integer(16), "R"); + digraph1.put(new Integer(17), "S"); + digraph1.put(new Integer(18), "T"); + digraph1.put(new Integer(19), "U"); + digraph1.put(new Integer(20), "V"); + digraph1.put(new Integer(21), "W"); + digraph1.put(new Integer(22), "X"); + digraph1.put(new Integer(23), "Y"); + digraph1.put(new Integer(24), "Z"); + + digraph2.put(new Integer(0), "V"); + digraph2.put(new Integer(1), "A"); + digraph2.put(new Integer(2), "B"); + digraph2.put(new Integer(3), "C"); + digraph2.put(new Integer(4), "D"); + digraph2.put(new Integer(5), "E"); + digraph2.put(new Integer(6), "F"); + digraph2.put(new Integer(7), "G"); + digraph2.put(new Integer(8), "H"); + digraph2.put(new Integer(9), "J"); + digraph2.put(new Integer(10), "K"); + digraph2.put(new Integer(11), "L"); + digraph2.put(new Integer(12), "M"); + digraph2.put(new Integer(13), "N"); + digraph2.put(new Integer(14), "P"); + digraph2.put(new Integer(15), "Q"); + digraph2.put(new Integer(16), "R"); + digraph2.put(new Integer(17), "S"); + digraph2.put(new Integer(18), "T"); + digraph2.put(new Integer(19), "U"); + digraph2.put(new Integer(20), "V"); + + } + + public int getDigraph1Index(String letter) + { + for (int i = 0; i < digraph1Array.length; i++) + { + if (digraph1Array[i].equals(letter)) + { + return i + 1; + } + } + + return -1; + } + + public int getDigraph2Index(String letter) + { + for (int i = 0; i < digraph2Array.length; i++) + { + if (digraph2Array[i].equals(letter)) + { + return i; + } + } + + return -1; + } + + public String getDigraph1(int longZone, double easting) + { + int a1 = longZone; + double a2 = 8 * ((a1 - 1) % 3) + 1; + + double a3 = easting; + double a4 = a2 + ((int) (a3 / 100000)) - 1; + return (String) digraph1.get(new Integer((int) Math.floor(a4))); + } + + public String getDigraph2(int longZone, double northing) + { + int a1 = longZone; + double a2 = 1 + 5 * ((a1 - 1) % 2); + double a3 = northing; + double a4 = (a2 + ((int) (a3 / 100000))); + a4 = (a2 + ((int) (a3 / 100000.0))) % 20; + a4 = Math.floor(a4); + if (a4 < 0) + { + a4 = a4 + 19; + } + return (String) digraph2.get(new Integer((int) Math.floor(a4))); + + } + + } + + private class LatZones + { + private char[] letters = { 'A', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', + 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Z' }; + + private int[] degrees = { -90, -84, -72, -64, -56, -48, -40, -32, -24, -16, + -8, 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 84 }; + + private char[] negLetters = { 'A', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', + 'L', 'M' }; + + private int[] negDegrees = { -90, -84, -72, -64, -56, -48, -40, -32, -24, + -16, -8 }; + + private char[] posLetters = { 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Z' }; + + private int[] posDegrees = { 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 84 }; + + private int arrayLength = 22; + + public LatZones() + { + } + + public int getLatZoneDegree(String letter) + { + char ltr = letter.charAt(0); + for (int i = 0; i < arrayLength; i++) + { + if (letters[i] == ltr) + { + return degrees[i]; + } + } + return -100; + } + + public String getLatZone(double latitude) + { + int latIndex = -2; + int lat = (int) latitude; + + if (lat >= 0) + { + int len = posLetters.length; + for (int i = 0; i < len; i++) + { + if (lat == posDegrees[i]) + { + latIndex = i; + break; + } + + if (lat > posDegrees[i]) + { + continue; + } + else + { + latIndex = i - 1; + break; + } + } + } + else + { + int len = negLetters.length; + for (int i = 0; i < len; i++) + { + if (lat == negDegrees[i]) + { + latIndex = i; + break; + } + + if (lat < negDegrees[i]) + { + latIndex = i - 1; + break; + } + else + { + continue; + } + + } + + } + + if (latIndex == -1) + { + latIndex = 0; + } + if (lat >= 0) + { + if (latIndex == -2) + { + latIndex = posLetters.length - 1; + } + return String.valueOf(posLetters[latIndex]); + } + else + { + if (latIndex == -2) + { + latIndex = negLetters.length - 1; + } + return String.valueOf(negLetters[latIndex]); + + } + } + + } + +} diff --git a/GPSMarker/app/src/main/java/geocodigos/gpsmarker/Database/DatabaseHelper.java b/GPSMarker/app/src/main/java/geocodigos/gpsmarker/Database/DatabaseHelper.java index 3aeb088..30e8cfd 100755 --- a/GPSMarker/app/src/main/java/geocodigos/gpsmarker/Database/DatabaseHelper.java +++ b/GPSMarker/app/src/main/java/geocodigos/gpsmarker/Database/DatabaseHelper.java @@ -61,7 +61,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } /** - * Add a Point in the Database + * Add a Point to the Database * @param pointModel */ public void addPoint(PointModel pointModel) { @@ -101,6 +101,10 @@ public void updateSelected(PointModel pointModel) { db.close(); } + /** + * Update a record on database + * @param pointModel + */ public void updatePoint(PointModel pointModel) { SQLiteDatabase db = this.getWritableDatabase(); diff --git a/GPSMarker/app/src/main/java/geocodigos/gpsmarker/Fragments/ViewPoints.java b/GPSMarker/app/src/main/java/geocodigos/gpsmarker/Fragments/ViewPoints.java index 1dc0edc..1d408b0 100644 --- a/GPSMarker/app/src/main/java/geocodigos/gpsmarker/Fragments/ViewPoints.java +++ b/GPSMarker/app/src/main/java/geocodigos/gpsmarker/Fragments/ViewPoints.java @@ -1,12 +1,12 @@ package geocodigos.gpsmarker.Fragments; import android.app.AlertDialog; +import android.app.Fragment; +import android.app.FragmentTransaction; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; diff --git a/GPSMarker/app/src/main/java/geocodigos/gpsmarker/GPSLocationViewFragment.java b/GPSMarker/app/src/main/java/geocodigos/gpsmarker/GPSLocationViewFragment.java index 8bfd8a3..ed5833a 100644 --- a/GPSMarker/app/src/main/java/geocodigos/gpsmarker/GPSLocationViewFragment.java +++ b/GPSMarker/app/src/main/java/geocodigos/gpsmarker/GPSLocationViewFragment.java @@ -1,13 +1,13 @@ package geocodigos.gpsmarker; import android.app.AlertDialog; +import android.app.Fragment; +import android.app.FragmentTransaction; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -29,7 +29,6 @@ */ public class GPSLocationViewFragment extends Fragment implements LocationListener { - private String strFormat = "%.5f"; private int requests = 3000; private int min_distance=1; @@ -41,7 +40,6 @@ public class GPSLocationViewFragment extends Fragment implements LocationListene private TextView tvLatitude, tvLongitude, tvPrecisao, tvAltitude, tvSetor, tvNorte, tvLeste, tvData, tvLatgms, tvLongms, tvGpsStatus; - private static boolean fragmentVisivel; private double latitude, longitude, altitude, precisao; private final String keyLatitude = "lat"; @@ -57,6 +55,13 @@ public class GPSLocationViewFragment extends Fragment implements LocationListene private View view; + /** + * Create View for the fragment + * @param inflater + * @param container + * @param savedInstanceState + * @return + */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -64,6 +69,18 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, ibPoints = (ImageButton) view.findViewById(R.id.ibViewPoints); ibMark = (ImageButton) view.findViewById(R.id.ibmarcar); + tvGpsStatus = (TextView) view.findViewById(R.id.in_status); + tvAltitude = (TextView) view.findViewById(R.id.in_altitude); + tvLongitude = (TextView) view.findViewById(R.id.in_longitude); + tvLatitude = (TextView) view.findViewById(R.id.in_latitude); + tvLeste = (TextView) view.findViewById(R.id.in_leste); + tvNorte = (TextView) view.findViewById(R.id.in_norte); + tvPrecisao = (TextView) view.findViewById(R.id.in_precisao); + tvSetor = (TextView) view.findViewById(R.id.in_quadrante); + tvLatgms = (TextView) view.findViewById(R.id.in_lat_gms); + tvLongms = (TextView) view.findViewById(R.id.in_lon_gms); + tvData = (TextView) view.findViewById(R.id.tv_data); + ibPoints.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -158,6 +175,9 @@ public void onClick(View v) { return view; } + /** + * Get the GPS status and show to the user + */ public void gpsStatus() { locationManager = (LocationManager) getActivity(). getSystemService(Context.LOCATION_SERVICE); @@ -178,7 +198,10 @@ public void gpsStatus() { locationManager.requestLocationUpdates(provider, requests, min_distance, this); } - public void preencheCampos(){ + /** + * Add the GPS information to TextView on fragment layout + */ + public void fillProperties(){ if(latitude!=0 && longitude!=0) { DMSConversion dms = new DMSConversion(); String sLat = dms.convertFromDegrees(latitude); @@ -225,9 +248,7 @@ public void onLocationChanged(Location location) { strTime = time.returnTime(); GetDate date = new GetDate(); strDate = date.returnDate(); - if (fragmentVisivel) { - preencheCampos(); - } + fillProperties(); } @Override @@ -246,7 +267,7 @@ public void onResume() { // TODO Auto-generated method stub super.onResume(); locationManager.requestLocationUpdates(provider, requests, min_distance, this); - preencheCampos(); + fillProperties(); gpsStatus(); } diff --git a/GPSMarker/app/src/main/res/layout/kml_export.xml b/GPSMarker/app/src/main/res/layout/kml_export.xml index cd3f5b6..076112e 100644 --- a/GPSMarker/app/src/main/res/layout/kml_export.xml +++ b/GPSMarker/app/src/main/res/layout/kml_export.xml @@ -5,6 +5,12 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" > + - + android:orientation="vertical" + android:rowCount="4"> - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_centerVertical="true" + android:layout_column="0" + android:layout_margin="@dimen/margem" + android:layout_row="1" + android:checked="true" /> + + - \ No newline at end of file + + + + + + + + + + + \ No newline at end of file diff --git a/GPSMarker/app/src/main/res/layout/view_points.xml b/GPSMarker/app/src/main/res/layout/view_points.xml index 5d915c6..01a8c9f 100644 --- a/GPSMarker/app/src/main/res/layout/view_points.xml +++ b/GPSMarker/app/src/main/res/layout/view_points.xml @@ -12,28 +12,30 @@ android:layout_height="wrap_content" android:text="" android:textColor="@color/branco" - android:layout_alignParentTop="true" + android:layout_alignParentBottom="true" android:background="@color/cinza" android:layout_centerHorizontal="true"/> - + android:layout_alignParentTop="true" + android:background="@color/preto"> + + @@ -50,8 +66,10 @@ android:layout_width="@dimen/buttons" android:layout_height="@dimen/buttons" android:contentDescription="@string/mapa" - android:layout_alignParentRight="true" android:layout_margin="@dimen/margem" + android:layout_column="3" + android:layout_row="0" + android:layout_gravity="right" android:background="@mipmap/ic_back" /> @@ -60,11 +78,13 @@ android:layout_width="@dimen/buttons" android:layout_height="@dimen/buttons" android:contentDescription="@string/apagar" - android:layout_alignParentLeft="true" + android:layout_column="0" + android:layout_row="0" + android:layout_gravity="right" android:layout_margin="@dimen/margem" android:background="@mipmap/ic_remove" /> - + \ No newline at end of file diff --git a/GPSMarker/app/src/main/res/layout/view_reccord.xml b/GPSMarker/app/src/main/res/layout/view_reccord.xml index 2f7bd2c..d864b87 100644 --- a/GPSMarker/app/src/main/res/layout/view_reccord.xml +++ b/GPSMarker/app/src/main/res/layout/view_reccord.xml @@ -1,324 +1,282 @@ - + android:layout_alignParentTop="true" + android:background="@color/preto"> + android:background="@mipmap/ic_left" /> + android:background="@mipmap/ic_save" /> + android:background="@mipmap/ic_right" /> + android:layout_height="fill_parent" + android:layout_below="@+id/layout_buttons"> - - - + + + android:layout_centerHorizontal="true" + android:layout_column="1" + android:layout_columnSpan="3" + android:layout_row="0" + android:textSize="@dimen/fonteNormal" + android:text="@string/registro" /> - - - - - - - - - - - + + - - - - - - - - - - - - + + + + + + + + - - - - - - - - + + + + - - - - - - - - + + + + - - - - - - - - + + + + - - - - - - - - + + + + - - - - - - - - + + + + - - - - - - - - - - - - + android:layout_column="1" + android:layout_row="7" + android:layout_columnSpan="3" + android:layout_margin="@dimen/margem" + android:layout_toRightOf="@+id/tvLeste" + android:hint="@string/east" + android:inputType="number" /> + + + + + + + + + + diff --git a/GPSMarker/app/src/main/res/mipmap-hdpi/ic_csv.png b/GPSMarker/app/src/main/res/mipmap-hdpi/ic_csv.png new file mode 100644 index 0000000000000000000000000000000000000000..0aaffd1cad99b187ecb8693dd700f6a49d9b8750 GIT binary patch literal 1806 zcmV+p2l4ocP)$=;WN{Zs3h~cj5#c`!Pvjk}64^max~QRZIAqQ!P65a|R^K zgTX#*!UIgmV8V22=Tlxts`J_Lpk+d{!G!4)kfVZA7N5kO7;Aw8RB()DK}@Fr_UikA zR%gcnF`@xq85>X_dwp}oizr<-K+N>~R~a9W-}+)*%MOT%fBGu`D6?4C@&U>)KA?6R zDgda%YU2a)-6#MFKmw2eBmfCO0+0YC00}^q3#fYaw<#znibjt7lxEEMlBQ2zL_>#u zOdUEzQnhMtmAc3V4SJBtG>#@snoBcheofP+EubMo;;D1zD5_n%t1`~btrK~Bcc=RG z-?b?@C(fRX#k=a~C&!0c0r%#KN_fMWYq@0{1)V1p{ zT`*0XhEqnyk97C$KYYBkJbU(tu3x`KW5<5M$2V*kMpv(1qk@7vHYGN8zUDhZLWbEK zi;Z*{py1#S>Fn7HiZVxzA00jmPqT9D`DT`aPW@`!4o;r1&MuDwc_h|Ze z?8sL7($jz7$H)3;0J<8GS^!CY9v0iUvB~Z+#*r#4yhlYv|B|n7U)T8{FRw0i`t+X~ z%Yic13$g}u@Ze#kuSJVq^ytxliuKq!g0Ko(fO_?spd4ig{FXgH6DKC|al3Y9yVgnL z+^T&_~z((S` z`uC4@9U!(S^Qlv3lttaRab1oCB?LzxeKTvlZ95vvaIde{Lz0L#V=hxS)HftSobx7b3?%cVhfdt3dz56H)$kGG> zK|ZRGl$7su$HB*;f7Yy2*XBWyk#T0VQcISsD|dnx9i2#zA3xAQf)(uEy`OsajCLr0 zf@9ymKUaAkN6tD}Ajd*Thl6h3Ji@hrCQL}w074E_kt}x5plLkM(aVA0)GcAyu8bR( zpz&wn;nAA@$&-_nG{EJVbWBW=2GGKVt16u8*QxUk&7Qr2Zr;360uu6;`SZWEd+h4f z3)Li=NICRU1v{{v2War%cnzQ}TXs3ECW4|UQ!Zb=QX-pZu%b%6 z?m(zS@u`NCnwnW^{(`FyYe4pV*qAZ1l=+VxJ6Y=dZQ8s~4<8n4ph7}JM^^rQ(1;PA zD3!4+d-opTkwR@v@K4B^w{PFe>o;pad3pJ~WUyW|s&+a0z_*MZ{kcPyxo6L>nl&9h zoaabB<$OR$(56gD*6f(Q8W8#rVcA1K-Et&TTCt1HQ2MPKkBWm?L8o`CG^vL736j)mvm~|2VzQ0N z_9`aZir3z1bFnT`kVQAI3jWOwsTPyhnfNgYz;DH?xCB^qX~Lwov;Kw$b70=g6zlj% w(rb;Ywm=8yB6&(KXl@1((L@tXv?|g52k*q;mEQeQhX4Qo07*qoM6N<$f|#**x&QzG literal 0 HcmV?d00001 diff --git a/GPSMarker/app/src/main/res/mipmap-mdpi/ic_csv.png b/GPSMarker/app/src/main/res/mipmap-mdpi/ic_csv.png new file mode 100644 index 0000000000000000000000000000000000000000..bb10f868a5f652f5356d79e6c41fa7747e68689b GIT binary patch literal 1300 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 LGr_*ocYgdImSD#g literal 0 HcmV?d00001 diff --git a/GPSMarker/app/src/main/res/mipmap-xxhdpi/ic_csv.png b/GPSMarker/app/src/main/res/mipmap-xxhdpi/ic_csv.png new file mode 100644 index 0000000000000000000000000000000000000000..5326781c84c519827c989cd6f98322d7f80185ad GIT binary patch literal 4069 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 literal 0 HcmV?d00001 diff --git a/GPSMarker/app/src/main/res/mipmap-xxxhdpi/ic_csv.png b/GPSMarker/app/src/main/res/mipmap-xxxhdpi/ic_csv.png new file mode 100644 index 0000000000000000000000000000000000000000..dd664308ce23eca3679cb557efc450bcb213eecc GIT binary patch literal 5773 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 B#s>fZ literal 0 HcmV?d00001 diff --git a/GPSMarker/app/src/main/res/values/strings.xml b/GPSMarker/app/src/main/res/values/strings.xml index fb65305..232fba2 100644 --- a/GPSMarker/app/src/main/res/values/strings.xml +++ b/GPSMarker/app/src/main/res/values/strings.xml @@ -104,6 +104,9 @@ Convert from Latitude/Longitude Convert from deg, min, sec + CSV Export + File name + @string/marcar_ponto @string/pontos_marcados diff --git a/README.md b/README.md index d92209f..fd755db 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ -<<<<<<< HEAD -Aplicativo que funciona como GPS, salva os pontos no banco de dados, exporta para KML e CSV, mostra os pontos no Google Maps ======= # GPSMarker GPS tools for moobile ->>>>>>> 7dfac9ce8420f5256af309bb3c2735886627aec7 + +# What is it? +======= +GPS tool for mobile applications. Give the coordinates in Latitude/Longitude on decimal degrees, UTM and Latitude/Longitude on degrees, minutes and seconds. The points saved can be exported as Csv file or Kml layers. + +======= + +#Documentation +