`

获取地理位置

 
阅读更多
public class LocationUtil {

	public static void getLoc(Context context){
		LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
		Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		final long maxAgeMilliSeconds = 1000 * 60 * 1; // 1 minute
		final long maxAgeNetworkMilliSeconds = 1000 * 60 * 10; // 10 minutes
		final long now = System.currentTimeMillis();
		if(location==null || location.getTime() <now - maxAgeMilliSeconds){
			location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
			if(location == null || location.getTime() < now - maxAgeNetworkMilliSeconds){
				//ͨ  cellid  λ
				TelephonyManager telephonyManager = (TelephonyManager)context
				.getSystemService(Context.TELEPHONY_SERVICE);
				GsmCellLocation gsmCellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
				if (gsmCellLocation != null){
					int cid = gsmCellLocation.getCid();
					int lac = gsmCellLocation.getLac();
					int mnc = Integer.valueOf(telephonyManager.getNetworkOperator().substring(3, 5));
					AppContext.currLoc= getLocationByCell(cid, lac, mnc);
				}
			}else{
				//    γ ȱ  浽 ڴ 
				AppContext.currLoc = new LoctionInfo(String.valueOf(location.getLatitude()),String.valueOf(location.getLongitude()));
				
			}
		}
	}
	
	public static City getCurrCity(Context context){
		LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
		Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		final long maxAgeMilliSeconds = 1000 * 60 * 1; // 1 minute
		final long maxAgeNetworkMilliSeconds = 1000 * 60 * 10; // 10 minutes
		final long now = System.currentTimeMillis();
		if(location==null || location.getTime() <now - maxAgeMilliSeconds){
			location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
			if(location == null || location.getTime() < now - maxAgeNetworkMilliSeconds){
				//ͨ  cellid  λ
				TelephonyManager telephonyManager = (TelephonyManager)context
				.getSystemService(Context.TELEPHONY_SERVICE);
				GsmCellLocation gsmCellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
				if (gsmCellLocation != null){
					int cid = gsmCellLocation.getCid();
					int lac = gsmCellLocation.getLac();
					int mnc = Integer.valueOf(telephonyManager.getNetworkOperator().substring(3, 5));
					AppContext.currLoc= getLocationByCell(cid, lac, mnc);
				}
			}else{
				//    γ ȱ  浽 ڴ 
				AppContext.currLoc = new LoctionInfo(String.valueOf(location.getLatitude()),String.valueOf(location.getLongitude()));
				
			}
		}
		if(AppContext.currLoc!=null){
			context.getSharedPreferences("locInfo", context.MODE_WORLD_WRITEABLE)
			.edit().putString("currlat",AppContext.currLoc.getLat())
			.putString("currlng",AppContext.currLoc.getLon())
			.commit();
			//  server        
			String latlng = AppContext.currLoc.getLat()+","+AppContext.currLoc.getLon();
			String reqUrl = "http://ditu.google.cn/maps/geo?output=json&key=abcdef&q="+latlng;
			City city = sendToServer(reqUrl);
			if(city!=null&& city.getCityName()!=null){
				//  ȡ   س      
				if(AppContext.arrayList!=null){
					if(AppContext.arrayList.contains(city)){
						City city2 = (City) AppContext.arrayList.get(AppContext.arrayList.indexOf(city));
						return city2;
					}
				}
				ResultData resultData;
				String cityJson = StringUtil.readCityJson(context);
				if(cityJson!=null && !"".equals(cityJson)){
					resultData = ParseManger.getCityList(cityJson,context);
				}else{
					String param = "?ctype=iphone&m=get_citylist";
					String cityUrl = APIContants.API+param;
					String response = NetManger.doPost(cityUrl, null);
					resultData = ParseManger.getCityList(response,context);
				}
				if(resultData!=null && resultData.getArrayList()!=null){
					ArrayList arrayList= resultData.getArrayList();
					if(arrayList.contains(city)){
						City city2 = (City) arrayList.get(arrayList.indexOf(city));
						return city2;
					}
				}
		}
		}
		return new City("北京", "bei_jing");//如果取不到城市,则默认返回北京
	}
	
	public static final String MAPABC_KEY = "4726f4e7aa32db60204e6c05d7e41ada440055e47021072e45322d670324223eedbbd89f7b0788d2";
	public static String MAPAPC_INTERFACE_URL = "http://search1.mapabc.com/sisserver";

	// config config=BSPS           
	// mnc mnc=  Ӫ ̱ ʶ
	// lac lac=λ ñ   
	// cellid cellid=  վID
	// a_k a_k=api key  û      key
	/**
	 *  lat, lon
	 */
	private static LoctionInfo getLocationByCell(int cid, int lac, int mnc) {
		StringBuilder url = new StringBuilder(MAPAPC_INTERFACE_URL);
		url.append("?config=BSPS&mnc=").append(mnc).append("&lac=").append(lac).append("&cellid=").append(cid).append(
				"&a_k=").append(MAPABC_KEY);
		String xCoord = "-1";
		String yCoord = "-1";
		HttpClient httpClient = new DefaultHttpClient();
		LogUtil.printInfo("url.toString() : "+url.toString());
		HttpGet request = new HttpGet(url.toString());
		try {
			HttpResponse response = httpClient.execute(request);
			HttpEntity entity = response.getEntity();
			InputStream is = entity.getContent();
			
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document dom = builder.parse(is);
			Element root = dom.getDocumentElement();
			NodeList personNodes = root.getElementsByTagName("location");
			String lat=null,lon=null;
			for(int i=0 ; i<personNodes.getLength(); i++){
				Element personNode = (Element)personNodes.item(i);
				NodeList childNodes = personNode.getChildNodes();
				for(int j=0 ; j < childNodes.getLength(); j++){
					Node childNode = childNodes.item(j);
					if(childNode.getNodeType()==Node.ELEMENT_NODE){
						Element element = (Element)childNode;
						if("cenx".equals(childNode.getNodeName())){
							lon = element.getFirstChild().getNodeValue();
						}else if("ceny".equals(childNode.getNodeName())){
							lat = element.getFirstChild().getNodeValue();
						}
					}
				}
			}
			if(lat!=null && lon !=null){
				return new LoctionInfo(lat,lon);
			}
			
			/*XmlPullParser pullParser = Xml.newPullParser();
			pullParser.setInput(is, "GBK");
			int eventType = pullParser.getEventType();
			while (eventType != XmlPullParser.END_DOCUMENT) {
				switch (eventType) {
				case XmlPullParser.START_TAG:
					if ("cenx".equals(pullParser.getName())) {
						xCoord = pullParser.nextText();
					} else if ("ceny".equals(pullParser.getName())) {
						yCoord = pullParser.nextText();
					}
					break;
				}
				eventType = pullParser.next();
			}*/
			/*if (!xCoord.equals("-1") && !yCoord.equals("-1")) {
				return new LoctionInfo(xCoord,yCoord);
			} else {
				return null;
			}*/
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return null;
	}
	
	public static String convertStreamToString(InputStream is) {
		StringBuilder sb = new StringBuilder();
		try {
		BufferedReader reader = new BufferedReader(new InputStreamReader(is,"gb2312"));

		String line = null;
			while ((line = reader.readLine()) != null) {
				sb.append(line + "\n");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}


	private static City sendToServer(String reqUrl) {
		City city=null;
		try {
			URL url = new URL(reqUrl);
			LogUtil.printInfo("reqUrl : "+reqUrl);
			String response = NetManger.convertStreamToString(url.openStream());
			city = ParseManger.getCurrCity(response);
//			LogUtil.printInfo("response : "+response);
//			LogUtil.printInfo("city : "+city);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return city;
	}
	
}

分享到:
评论

相关推荐

    java实现根据ip地址获取地理位置的代码分享

    本篇文章将分享一个利用Java实现根据IP地址获取地理位置的简单示例,主要使用了QQ在线接口,同时提到了其他如新浪、淘宝等提供的接口作为替代选项。 首先,我们来看一下核心的Java代码。这段代码定义了一个`...

    百度地图wifi定位获取地理位置

    **标题详解:** "百度地图WiFi定位获取地理位置" 在标题中提到的“百度地图WiFi定位获取地理位置”,是指利用百度地图提供的API(应用程序接口)服务,通过用户的WiFi信号来确定其所在的地理位置。这种技术通常用于...

    通过IP获取地理位置

    "通过IP获取地理位置"就是一种常见的方法,它涉及到网络协议、数据库技术和地理编码等多个知识点。 首先,我们需要理解IP地址的工作原理。IP(Internet Protocol)地址是互联网上的每个设备的唯一标识,分为IPv4和...

    根据经纬度获取地理位置

    java 根据经纬度获取地理位置

    微信开发获取地理位置实例(java)

    微信开发获取地理位置实例(java),使用环境 eclipse + maven + springmvc,虽然项目名是first_maven_project,但是确实是微信开发实例哈,不要有任何怀疑,免费分享啦,哈哈。实例讲解欢迎访问博主博客...

    百度地图webapi获取地理位置

    百度地图webapi获取地理位置

    微信小程序-获取地理位置

    微信小程序-获取地理位置

    IP获取地理位置asp

    本项目"IP获取地理位置asp"是基于ASP(Active Server Pages)和Access数据库技术实现的,它允许开发者通过用户的IP地址获取其大概的物理位置信息。在网页应用中,这种功能常用于提供个性化服务、安全验证、数据分析...

    java实现根据ip地址获取地理位置

    在Java编程中,根据IP地址获取地理位置是一项常见的需求,尤其在大数据分析、用户行为追踪或者安全防护等场景中。本文将介绍如何利用新浪和淘宝的API接口来实现这一功能。 首先,我们来看新浪的接口实现。新浪提供...

    googleMap根据经纬度获取地理位置

    在这个场景中,我们将主要探讨如何使用Google Maps API 根据经纬度获取地理位置信息。 首先,`googleMap根据经纬度获取地理位置`这个标题涉及到的核心技术是Google Maps Geocoding服务。Geocoding是将地址或坐标...

    php获取访客IP和地理位置信息的类

    3. 类文件`IpLocation.class.php`:这是一个PHP类,可能包含了获取和解析IP地址的函数,如`getIp()`用于获取IP,`getLocation()`用于根据IP获取地理位置信息。类的结构可能会包括构造函数、私有方法以及公开的方法...

    获取地理位置ip

    在IT行业中,获取地理位置IP是一项基础且重要的任务,它通常涉及到网络编程、Web服务和地理定位技术。在标题“获取地理位置IP”中,我们聚焦于通过IP地址来确定设备所在的地理位置。描述提到“打开即获取到本机IP...

    Android获取地理位置

    在Android开发中,获取地理位置是应用中常见的功能,尤其对于导航、社交、生活服务类应用而言,用户的位置信息至关重要。本教程将详细讲解如何通过异步加载的方式优化地理位置的获取,以解决gtLastKnownLocation()...

    android简单实现输入经纬度获取地理位置demo

    在Android开发中,获取地理位置是常见的功能之一,尤其在构建地图应用、导航系统或与位置相关的服务时。这个“android简单实现输入经纬度获取地理位置demo”是一个基础的示例,教你如何通过用户输入的经纬度数据来...

    java 根据ip获取地理位置

    这些服务通常基于RESTful API,使用HTTP请求获取地理位置信息。在Java中,可以使用`HttpURLConnection`或`HttpClient`来发送GET或POST请求,并解析返回的JSON数据。例如,MaxMind的GeoLite2数据库可以免费下载,但...

    从google的json接口获取地理位置信息的Java代码

    【标题】: 使用Java通过Google JSON接口获取地理位置信息 【描述】: 在Android开发中,有时需要获取设备的地理位置信息,Google提供了公开的JSON接口,允许开发者通过GPS、基站信息或WiFi热点信息来获取这些数据。...

    百度地图wifi定位获取地理位置最新版

    【标题】:“百度地图WiFi定位获取地理位置最新版”是指百度地图提供的一种服务,它通过结合WiFi信号和GPS(全球定位系统)以及基站信息,来精确地确定用户所在位置。这项技术在移动应用中广泛使用,尤其对于那些...

    PHP版基于GeoIP2实现根据ip获取地理位置

    $location = ['error' =&gt; '无法获取地理位置信息']; } return response()-&gt;json($location); } ``` 上述代码首先获取客户端的IP地址,然后通过`app('geoip2')`获取GeoIP2实例,最后调用`city()`方法查询地理...

    Vue集成Cordova的Navtive功能:获取地理位置,手机振动,调取手机图片,扫描二维码等

    本教程将详细介绍如何将Vue与Cordova集成,以实现获取地理位置、手机振动、调用手机图片以及扫描二维码等原生功能。 首先,我们需要安装并配置Cordova环境。确保已经安装了Node.js,然后通过命令行运行`npm install...

Global site tag (gtag.js) - Google Analytics