vignesh vignesh - 2 months ago 12
Java Question

Google reverse Geo Coding to get address from latitude and longitude

My string format is

">RPV21305+1134038+7772277800000012;ID=0011<"

I am spliting latitude and longitude as in the below code. But I can't access the address from latitude and longitude from google API. I need reverse geo code for my program.

My program is

import java.io.*;
import java.net.*;
import java.util.*;
import java.sql.*;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.SimpleDateFormat;

public class FileHandler {
public static void main(String [] args) {
//reading a file for iput
String fileName = "File1/ascii_file";
String line = null;
try {
FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
int se = line.endsWith("<")? (line.length() - 1) : line.length();
System.out.println("se-----------------------------"+se);
String parsedstring = line.substring(1,se);
System.out.println("parsedString"+parsedstring);
String T[] = parsedstring.split(";");
System.out.println("ttttt-----------------------------"+T[0]);
String mobileID = null;
for (int i = 1; i < T.length; i++) {
if (T[i].startsWith("ID=")) {
mobileID = T[i].substring(3);
System.out.println("mobileID-----------------"+mobileID);
break;
}
}

//getting lattitude and longitude from string;
int gpsTOD = Integer.parseInt(T[0].substring(
float latitude = Float.parseFloat(T[0].substring( 8
float lat =latitude/100000;
float longitude = Float.parseFloat(T[0].substring(16,25));
float lon =longitude/1000000;
float speedKPH = Float.parseFloat(T[0].substring(25,28));
float headingDeg = Float.parseFloat(T[0].substring(28,31));
String srcStr = T[0].substring(31,32);
String ageStr = T[0].substring(32,33);
double altitudeM = 0.0;
double odomKM = 0.0;
long gpioInput = 0L;
String accountID ="demo";
String status ="0";
System.out.println("gpstod:"+gpsTOD);
System.out.println("lat:"+lat);
System.out.println("lon:"+lon);
System.out.println("speedKPH:"+speedKPH);
System.out.println("headingDeg:"+headingDeg);
System.out.println("srcStr:"+srcStr);
System.out.println("ageStr:"+ageStr);
System.out.println("altitudeM:"+altitudeM);
System.out.println("odomKM:"+odomKM);
System.out.println("gpioInput:"+gpioInput);
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/gts","gts","opengts");
Statement stmt=con.createStatement();
stmt.executeUpdate("insert into EventData(accountID,deviceID,timestamp,statusCode,latitude,longitude,gpsAge,speedKPH,heading,altitude,odometerKM)values('"+ accountID +"','"+ mobileID +"','"+ gpsTOD +"','"+ status +"','"+ lat +"','"+ lon +"','"+ ageStr +"','"+ speedKPH +"','"+ headingDeg +"','"+ altitudeM +"','"+ odomKM +"')");
System.out.println("insert into EventData(accountID,deviceID,timestamp,latitude,longitude,gpsAge,speedKPH,heading,altitude,odometerKM)values('"+ accountID +"','"+ mobileID +"','"+ gpsTOD+"','"+ lat +"','"+ lon +"','"+ ageStr +"','"+ speedKPH +"','"+ headingDeg +"','"+ altitudeM +"','"+ odomKM +"')");
con.close();
}
catch (Exception e) {
System.out.println(e);
}
}
bufferedReader.close();
}
catch(FileNotFoundException ex) {
System.out.println("Unable to open file '" + fileName + "'");
}
catch(IOException ex) {
System.out.println("Error reading file '" + fileName + "'");
}
}
}

Answer

You will need something like this in code

GeoApiContext gtx = new GeoApiContext().setApiKey("**<<<<your-key-here>>>>**");
try {
    GeocodingResult[] gResp = GeocodingApi.newRequest(gtx).latlng(new LatLng(37, -121)).await();
    System.out.println(gResp[0].formattedAddress);
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();

Also make sure the google APIs is enabled from console and you have the key with you. With those two in place you should get output as shown below for

INFO: Request: https://maps.googleapis.com/maps/api/geocode/json?key=your-key&latlng=37.38000000%2C-121.88000000 1685 Lederer Cir, San Jose, CA 95131, USA

Underneath that geocode API is the http request so if you want you can try that out straight as well

Something like below should also work

https://maps.googleapis.com/maps/api/geocode/json?latlng=23,82.5