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编程调用微信接口实现图文信息等推送功能,涉及java微信图文信息推送接口调用及相关文件、字符串编码转换相关操作技巧,需要的朋友可以参考下
将度分秒坐标转换为度,把你的度分秒坐标复制放进EXECL表里,再计算下
本示例主要探讨的是如何使用C#调用Java接口,实现不同编程语言之间的交互。C#和Java都是广泛应用的编程语言,它们各自拥有丰富的库和生态系统,但有时需要在两者之间建立桥梁,以利用各自的优点。本文将详细介绍这一...
简单的javascript的地方坐标与经纬度坐标间的转换代码
本话题聚焦于“wgs84平面坐标转经纬度”,这是一个将WGS84坐标系下的平面坐标转换为经纬度坐标的操作。WGS84(World Geodetic System 1984)是一种全球统一的大地坐标系统,广泛用于GPS定位和其他地球科学应用。 ...
坐标转换,西安80,坐标转经纬度
使用方法:双击软件弹出对话框提示是否需要新建模板表格,如果不需要则回车继续弹出拾取模板对话框拾取模板点击确定执行程序
纬度以赤道为0度,向南北两侧各延伸至90度。 2. **高斯平面直角坐标系**:在GIS领域,为了简化计算和避免投影误差的积累,通常采用分带投影,即高斯-克吕格投影。它将地球表面划分成6°宽的带,每带内使用平面直角...
本教程将深入探讨如何在Kettle中使用动态参数调用HTTP和POST接口,实现高效的数据交互。 一、Kettle简介 Kettle是一款由社区驱动的ETL工具,它以图形化的方式设计和执行数据转换。Kettle的作业(Job)和转换...
Java RPC(Remote Procedure Call)调用是分布式系统中常见的通信方式,它允许一个程序在不关心远程系统具体实现的情况下调用另一个网络上的程序。在这个Java RPC调用示例中,我们将探讨RPC的基本概念、实现机制以及...
此外,熟悉C++编程基础,包括文件输入/输出、函数调用和数据类型,也是必要的。对于高级用户,可以进一步研究代码,优化性能或扩展功能,例如添加对其他坐标系统的支持。 总之,这个基于C++的坐标转换程序为地理...
在本示例中,我们将关注的是"C# HTTP接口设计及调用demo",这通常涉及到如何创建一个HTTP服务端接口,以及如何使用C#客户端进行调用。HTTP接口在分布式系统中扮演着重要角色,它允许不同组件之间通过HTTP协议交换...
在IT行业中,地理编码(Geocoding)是一项关键任务,它涉及到将人类可读的地址转换为地理位置坐标,如经度和纬度。在Python编程环境下,我们可以利用各种API,如百度地图API,来实现这一功能。本篇文章将深入探讨...
本教程将深入探讨如何使用Axis库来实现在Java中调用WebService接口。Axis是一个开源的Java SOAP栈,它提供了从Java代码中创建和消费Web服务的能力。 **一、什么是WebService?** WebService是一种基于XML的协议,它...
在易语言中,调用API(应用程序接口)是实现某些特定功能,如系统操作、硬件交互等常用手段。API是操作系统提供给开发者用于扩展或控制系统的接口,通常包括函数调用、常量定义、结构体等。 在这个主题中,“易语言...
Unity3D 实现谷歌地球旋转效果教程 本教程旨在指导读者使用 Unity3D 实现谷歌地球旋转效果。该教程涵盖了 Unity3D 中的基本概念,如游戏对象、组件、脚本、碰撞检测、鼠标事件和旋转矩阵等。 一、 Unity3D 基础...
// Activity A 实现接口 public class ActivityA extends AppCompatActivity implements MyInterface { @Override public void onEventHappened() { // 处理事件 } } // Activity B 调用接口 public class ...
本篇文章将详细讲解如何使用C#语言调用高德、百度和Google地图的API来实现这些功能,并提供相关源码的解读。 首先,让我们来看一下C#与高德地图API的结合。高德地图提供了丰富的SDK和API,包括JavaScript、Android...
本项目涉及的主题是“调用天气接口存入数据库—MySQL”,这是一套实现从网络获取天气预报数据并将其存储到MySQL数据库的流程。下面我们将详细探讨这个过程中的关键知识点。 首先,我们需要了解“天气接口”。这是一...