Cell2GPSUtil.java,最近项目中用到的,记录一下。
package your.package;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Cell2GPSUtil {
private static final Logger Log = LoggerFactory
.getLogger(Cell2GPSUtil.class);
private static final String GOOGLE_API_KEY = "YOURS";
/**
* 通过google接口基站转经纬度 way 2: use JSONObject to build post data
*
* @param towers
* @return
*/
public static Map<String, Double> cell2GPSByGoogle(
List<Map<String, String>> towers) {
Map<String, Double> result = new HashMap<String, Double>();
StringBuffer sb = new StringBuffer();
String cellId = null;
String LAC = null;
String MCC = null;
String MNC = null;
for (Map<String, String> tower : towers) {
cellId = tower.get("cellId");
LAC = tower.get("LAC");
MCC = tower.get("MCC");
MNC = tower.get("MNC");
if (MCC == null || MNC == null) {
continue;
}
}
try {
// 组装JSON查询字符串
JSONObject holder = new JSONObject();
holder.put("version", "1.1.0");
holder.put("host", "maps.google.com");
holder.put("access_token", GOOGLE_API_KEY);
holder.put("address_language", "zh_CN");
// holder.put("request_address", true);
JSONArray array = new JSONArray();
JSONObject data = new JSONObject();
data.put("cell_id", cellId); // 25070
data.put("location_area_code", LAC);// 4474
data.put("mobile_country_code", MCC);// 460
data.put("mobile_network_code", MNC);// 0
array.put(data);
holder.put("cell_towers", array);
// 创建连接,发送请求并接受回应
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.google.com/loc/json");
StringEntity se = new StringEntity(holder.toString());
post.setEntity(se);
HttpResponse resp = client.execute(post);
HttpEntity entity = resp.getEntity();
BufferedReader br = new BufferedReader(new InputStreamReader(
entity.getContent()));
String line = br.readLine();
while (line != null) {
sb.append(line);
line = br.readLine();
}
JSONObject jo = new JSONObject(sb.toString());
if (jo.has("location")
&& jo.getJSONObject("location").has("latitude")
&& jo.getJSONObject("location").has("longitude")) {
result.put("lat",
jo.getJSONObject("location").getDouble("latitude"));
result.put("log",
jo.getJSONObject("location").getDouble("longitude"));
}
} catch (Exception e) {
Log.error("cell2GPSByGoogle Exception" + e.getMessage());
}
Log.debug("cellId -> GPS: cellId=" + cellId + ",LAC=" + LAC + ",MNC="
+ MNC + ",MCC=" + MCC + " => " + result);
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
List<Map<String, String>> towers = new ArrayList<Map<String, String>>();
Map<String, String> towerMap = new HashMap<String, String>();
towerMap.put("cellId", "3620");
towerMap.put("LAC", "9340");
towerMap.put("MCC", "460");
towerMap.put("MNC", "0"); // is 0, not 01
towers.add(towerMap);
Map<String, Double> gps = Cell2GPSUtil.cell2GPSByGoogle(towers);
System.out.println(gps);
}
}
分享到:
相关推荐
地球表面cgcs2000大地坐标转经纬度源码
本篇将详细讲解如何利用Java调用WPS(金山办公软件)或PDFCreator的COM接口来实现doc到pdf的转换。我们将探讨以下知识点: 1. **什么是COM接口**: COM(Component Object Model)是微软提出的一种组件对象模型,...
### 基站转经纬知识点解析 #### 一、基础知识介绍 在移动通信领域中,基站(Base Station,简称BS)是提供无线通信服务的关键基础设施之一。为了更好地管理和定位这些基站,通常会将基站的位置信息转换为地理坐标,...
主要介绍了Java编程调用微信接口实现图文信息等推送功能,涉及java微信图文信息推送接口调用及相关文件、字符串编码转换相关操作技巧,需要的朋友可以参考下
将度分秒坐标转换为度,把你的度分秒坐标复制放进EXECL表里,再计算下
总的来说,Java调用WPS实现Word到PDF和Word到图片的转换涉及技术包括:Java编程、API接口调用、文件格式转换、图像处理等。这需要对Java和WPS API有深入理解,同时熟悉文档处理和格式转换的相关知识。通过合理利用...
本示例主要探讨的是如何使用C#调用Java接口,实现不同编程语言之间的交互。C#和Java都是广泛应用的编程语言,它们各自拥有丰富的库和生态系统,但有时需要在两者之间建立桥梁,以利用各自的优点。本文将详细介绍这一...
本话题聚焦于“wgs84平面坐标转经纬度”,这是一个将WGS84坐标系下的平面坐标转换为经纬度坐标的操作。WGS84(World Geodetic System 1984)是一种全球统一的大地坐标系统,广泛用于GPS定位和其他地球科学应用。 ...
大地坐标转经纬度
Delphi 11作为一款强大的Windows桌面应用程序开发工具,有时需要与Java环境进行交互,这通常涉及到跨语言调用接口。本篇将详细介绍如何在Delphi 11中调用Java接口,并传递参数及接收返回结果。 1. **JNI(Java ...
度分秒转经纬度公式示例
总结,C++库封装JNI接口实现Java调用C++涉及的主要步骤包括:声明Java中的本地方法,生成JNI头文件,编写C++实现,编译成库,最后在Java中加载并调用。这个过程需要理解Java和C++之间的数据类型转换,以及如何在两种...
2. **调用Web Service**:使用客户端工具或编程语言(如Java、Python、C#等)发送HTTP请求到提供地址转经纬度服务的Web Service接口。请求中通常包含待转换的地址信息。 3. **发送SOAP请求**:请求数据会以SOAP格式...
在跨平台应用开发中,有时候我们需要在Java环境中调用C#实现的功能,这通常通过Web服务或者中间件来实现。本文将深入探讨如何在Java中调用C#接口,以及涉及的相关技术栈。 1. **Java与C#的互操作性** Java和C#虽然...
在IT行业中,集成不同系统和服务是常见的需求,而金蝶作为一款企业级的ERP软件,有时需要调用第三方的Web服务来实现特定功能。本文主要介绍如何使用SOAP(Simple Object Access Protocol)方式来调用Webservice接口...
本实例主要关注的是如何调用Web Service接口,我们将探讨相关的关键知识点。 首先,理解Web Service的基本概念非常重要。它通过SOAP(Simple Object Access Protocol)协议传输数据,使用WSDL(Web Services ...
在Java编程中,通过URL调用接口是一种常见的网络通信方式,尤其在Web服务和API交互中扮演着重要角色。这个项目提供了一种方法,通过URL发送请求并接收响应,然后将响应的字符串转换为JSON格式进行处理。接下来,我们...
在Java编程中,调用Web服务接口是一种常见的任务,尤其是当需要实现跨平台通信或集成不同系统时。本文将深入探讨如何使用Java调用WebService接口,以实例分析有参方法Add的使用技巧。 首先,我们需要了解WebService...
这在需要多次调用同一接口获取大量分页数据时非常有用。 描述中提到的变量运用是Kettle中动态配置的重要组成部分。在处理HTTP分页接口时,我们可以设置全局变量来存储页码、每页大小等参数,然后在循环中动态更新...
纬度以赤道为0度,向南北两侧各延伸至90度。 2. **高斯平面直角坐标系**:在GIS领域,为了简化计算和避免投影误差的积累,通常采用分带投影,即高斯-克吕格投影。它将地球表面划分成6°宽的带,每带内使用平面直角...