当前位置: 首页 > 面试题库 >

使用json获取当前位置

陈正业
2023-03-14
问题内容

嗨,我写了一个应用程序,获取当前的纬度和经度并将其转换为相应的地址。我可以获取纬度和经度,但是如何使用json将其转换为相应的地址。我是json的新手。我尝试了一些示例代码,但没有得到地址

这是我的代码

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.maps.GeoPoint;



public class GMapActivity extends FragmentActivity {
private GoogleMap map;


       @Override

       protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_map);
              LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

              LocationListener locListener = new GpsActivity(getBaseContext());
        locManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, locListener);


              if (map == null) {
                     map = ((SupportMapFragment)  getSupportFragmentManager().findFragmentById(R.id.map))
                             .getMap();

                map.setMyLocationEnabled(true);


              }
       }

       @Override
       public boolean onCreateOptionsMenu(Menu menu) {
              // Inflate the menu; this adds items to the action bar if it is present.
              getMenuInflater().inflate(R.menu.map, menu);
              return true;
       }



              private class GpsActivity implements LocationListener{
                     Marker marker;
                     Context mcontext;
                     public GpsActivity(Context context){
                           super();
                           mcontext=context;
                     }
                     @Override
                     public void onLocationChanged(Location location) {
                           // TODO Auto-generated method stub
                           if (location != null) {

                                  double latitude=location.getLatitude();

                                  double longitude=location.getLongitude();

                                  LatLng gpslocation=new LatLng(latitude,longitude);


                                     Toast.makeText(getApplicationContext(),"" +gpslocation,
                                                      Toast.LENGTH_LONG).show();

请帮助我

提前致谢


问题答案:

要改回可读格式,您也可以使用Geocoder,但有时由于Google Play服务问题而无法正常工作。我将这个json地理编码用作第二种选择,以防万一。

请参考 Google Geocoding
API

工作流程是通过您的纬度和经度并获取当前位置。请求网址将是这样。

String reqURL = "http://maps.googleapis.com/maps/api/geocode/json?latlng="+ lat+","+lng +"&sensor=true";

希望这个答案对您有帮助。

public static JSONObject getLocationInfo(double lat, double lng) {

    HttpGet httpGet = new HttpGet("http://maps.googleapis.com/maps/api/geocode/json?latlng="+ lat+","+lng +"&sensor=true");
    HttpClient client = new DefaultHttpClient();
    HttpResponse response;
    StringBuilder stringBuilder = new StringBuilder();

    try {
        response = client.execute(httpGet);
        HttpEntity entity = response.getEntity();
        InputStream stream = entity.getContent();
        int b;
        while ((b = stream.read()) != -1) {
            stringBuilder.append((char) b);
        }
    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    }

    JSONObject jsonObject = new JSONObject();
    try {
        jsonObject = new JSONObject(stringBuilder.toString());
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return jsonObject;
}

public static String getCurrentLocationViaJSON(double lat, double lng) {

    JSONObject jsonObj = getLocationInfo(lat, lng);
    Log.i("JSON string =>", jsonObj.toString());

    String currentLocation = "testing";
    String street_address = null;
    String postal_code = null;

    try {
        String status = jsonObj.getString("status").toString();
        Log.i("status", status);

        if(status.equalsIgnoreCase("OK")){
            JSONArray results = jsonObj.getJSONArray("results");
            int i = 0;
            Log.i("i", i+ "," + results.length() ); //TODO delete this
            do{

                JSONObject r = results.getJSONObject(i);
                JSONArray typesArray = r.getJSONArray("types");
                String types = typesArray.getString(0);

                if(types.equalsIgnoreCase("street_address")){
                    street_address = r.getString("formatted_address").split(",")[0];
                    Log.i("street_address", street_address);
                }else if(types.equalsIgnoreCase("postal_code")){
                    postal_code = r.getString("formatted_address");
                    Log.i("postal_code", postal_code);
                }

                if(street_address!=null && postal_code!=null){
                    currentLocation = street_address + "," + postal_code;
                    Log.i("Current Location =>", currentLocation); //Delete this
                    i = results.length();
                }

                i++;
            }while(i<results.length());

            Log.i("JSON Geo Locatoin =>", currentLocation);
            return currentLocation;
        }

    } catch (JSONException e) {
        Log.e("testing","Failed to load JSON");
        e.printStackTrace();
    }
    return null;
}

根据我的经验, 只有设备生成的纬度和经度 会起作用。然后打电话

String currentLocation = getCurrentLocationViaJSON(lat, lng);


 类似资料:
  • 本文向大家介绍使用JS获取当前地理位置方法汇总,包括了使用JS获取当前地理位置方法汇总的使用技巧和注意事项,需要的朋友参考一下 今年的项目开发中,初步接触了移动端WEB开发,也就边学习HTML5边开发,主要使用了JQuery Mobile技术,发现这个不适合做互联网产品,大部分样式都需要重写,只用了部分功能。手机端WEB开发过程中第一次接触了定位功能,通过各大搜索引擎发现手机端定位都是通过浏览器的

  • 问题内容: 我正在使用jQuery。如何获取当前URL的路径并将其分配给变量? 范例网址: 问题答案: 要获取路径,可以使用:

  • 问题内容: 我想要的只是获取网站URL。不是从链接获取的URL。在页面加载过程中,我需要能够获取网站的完整,当前URL,并将其设置为一个变量,以便我随意使用。 问题答案: 使用: 如评论中所述,下面的行有效,但对于Firefox而言是错误的。

  • 我意识到这个问题以前被问过很多次,但我现在问这个问题是因为答案很旧(与新的API相比)。 我以前使用过Location Manager,但我发现它非常不可靠。例如,在我的应用程序中,使用getLastKnownLocation和/或current location,它会立即将相机加载到用户的当前位置。但是,如果我在启动应用程序之前打开设备上的位置,它就不会把摄像头放在用户的当前位置,而是放在Nig

  • 问题内容: 我在使用android定位系统的NETWORK提供程序获取当前位置坐标时遇到麻烦。 已经阅读了很多教程,并为我的项目实现了4到5个现有的类,所有这些类都给了我最后的坐标,而不是当前的坐标。 我很确定这个问题是我遗漏的根本问题,但是我无法理解到底是什么。 我现在正在使用的代码: 这是我的主要活动 这是我用于跟踪的课程: 这是我的AndroidManifest.xml 实际上,GPS定位工

  • 问题内容: 我正在尝试通过GPS功能获取用户的当前位置, 编写了一个实现的简单类 通过一个简单的动作,我正在访问这些经度和纬度值 但是它总是返回0.0作为结果。无法找出问题所在。 问题答案: 您必须在onCreate()返回之后才能触发您的位置更新回调。如果您将经纬度变量初始化为虚拟值,则可能会看到您正在打印这些值。 在onLocationChanged中添加一些日志记录,以便可以看到它已被触发,