经纬度转换

本文介绍了如何使用Java实现不同地图平台之间的坐标转换,包括腾讯地图到百度地图的坐标转换,以及如何利用百度地图API获取地址的经纬度、将米制坐标转换为经纬度坐标、经纬度转米制坐标,并获取经纬度对应的行政区划信息。
package com.teamdev.jxbrowser.chromium.demo.k_spider.app.elm.shopInfo.怀远县;

import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;

import org.jsoup.Jsoup;
import org.jsoup.helper.HttpConnection;
import org.jsoup.nodes.Document;

import com.alibaba.fastjson.JSON;

public class Dtzh {
/**
* 坐标转换,腾讯地图转换成百度地图坐标
* @param lat腾讯纬度
* @param lon腾讯经度
* @return 返回结果:经度,纬度
*/
public static String map_tx2bd(String lat1, String lon1) {
double lat=Double.parseDouble(lat1) ;
double lon=Double.parseDouble(lon1) ;
double bd_lat;
double bd_lon;
double x_pi = 3.14159265358979324;
double x = lon, y = lat;
double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
bd_lon = z * Math.cos(theta) + 0.0065;
bd_lat = z * Math.sin(theta) + 0.006;
System.out.println("bd_lat:" + bd_lat);
System.out.println("bd_lon:" + bd_lon);
return bd_lon + "," + bd_lat;
}


public static void main(String[] args) {
try {
System.out.println(map_tx2bd("36.964335","114.27269"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//http://waimai.baidu.com/mobile/waimai?qt=shoplist&address=%E7%B4%AB%E9%87%91%E5%A4%A7%E5%8E%A6&lat=4829655.971240592&lng=12952488.961430874
}



/**
* 根据地址获取经纬度
* @param address
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static Map search(String address) throws Exception {
Document doc = null;
//orgFbuCQCBhbNfRcIHE3kKEPHLplWNQt 企业账号一天可以执行300万次
//alOg1tI7Vd9wdWO0ZKi8GgdpZRMUsLlp 个人注册三十万次的
/*String strs[]={"dqxCDjXvKBhVnEPkvI58hhhsS3us4P0P" ,"ZggCQbBqeshQmpKe9w4HLOVYQOnmSDEU","nVvDqgDlzTBYwlHqwh3GOPjGrsCHx6ZW"
,"MsbgK4s3HBeihFaNln5v9N2HwVl1ZiqV","rZIFvzDNijO502VuFIFYYTmjYGsp57Lv","cnr6OANCHaothbre0hZMalus6u17zVlV","SfwR1x4Uaes3Er87E4ULM47rUYEqZN9f"
,"alOg1tI7Vd9wdWO0ZKi8GgdpZRMUsLlp","nVvDqgDlzTBYwlHqwh3GOPjGrsCHx6ZW","IDvNBsejl9oqMbPF316iKsXR","mbqLK09XY3iFlGahdeyd2gQMr7jAynKn"
};
*/
String url = "http://api.map.baidu.com/geocoder/v2/?address="+address+"&output=json&ak="+"orgFbuCQCBhbNfRcIHE3kKEPHLplWNQt"+"&callback=showLocation";
try{
doc = Jsoup.connect(url).userAgent("Mozilla").ignoreContentType(true).timeout(200000).data().get();
} catch (Exception e2) {
e2.printStackTrace();
}
String text = doc.text();
System.out.println(text);
Map map = new HashMap();
if(text.contains("lng")){
String[] lng = text.split("\"lng\":");
String[] lng_Result = lng[1].split(",");
String lngx = lng_Result[0];
String[] lat = text.split("\"lat\":");
String[] lat_Result = lat[1].split("}");
String laty = lat_Result[0];
map.put("lng", lngx);
map.put("lat", laty);
}else{
map.put("lng", "0");
map.put("lat", "0");
}
return map;
}

//将米制坐标转换为正常的经纬度坐标
public static String getJwd(String mzlat,String mzLng) throws Exception{
//String url="http://restapi.amap.com/v3/geocode/regeo?key=169d2dd7829fe45690fabec812d05bc3&s=rsv3&location="+lon+","+lat+"&callback=jsonp_320937_&platform=JS&logversion=2.0&sdkversion=1.3&appname=http%3A%2F%2Fwww.gpsspg.com%2Fiframe%2Fmaps%2Famap_161128.htm%3Fmapi%3D3&csid=4394B494-F394-470D-BE2E-E99EC33C028A";
String url="http://api.map.baidu.com/geoconv/v1/?coords="+mzLng+","+mzlat+"&from=2&to=5&ak=orgFbuCQCBhbNfRcIHE3kKEPHLplWNQt";
URL baseurl = new URL(url);
trustEveryone();
org.jsoup.Connection conn = HttpConnection.connect(baseurl);
conn.timeout(10000);
conn.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");
conn.ignoreContentType(true);
conn.execute();
String html = conn.get().text().replace("{\"status\":0,\"result\":[", "").replace("]}", "");
Map map=(Map) JSON.parse(html);
return map.get("x").toString()+","+map.get("y").toString();
}

//将经纬度转换为米制坐标
public static String getMzzb(String lat,String lng) throws Exception{
//String url="http://restapi.amap.com/v3/geocode/regeo?key=169d2dd7829fe45690fabec812d05bc3&s=rsv3&location="+lon+","+lat+"&callback=jsonp_320937_&platform=JS&logversion=2.0&sdkversion=1.3&appname=http%3A%2F%2Fwww.gpsspg.com%2Fiframe%2Fmaps%2Famap_161128.htm%3Fmapi%3D3&csid=4394B494-F394-470D-BE2E-E99EC33C028A";
String url="http://api.map.baidu.com/geoconv/v1/?coords="+lng+","+lat+"&from=5&to=6&ak=orgFbuCQCBhbNfRcIHE3kKEPHLplWNQt";
URL baseurl = new URL(url);
trustEveryone();
org.jsoup.Connection conn = HttpConnection.connect(baseurl);
conn.timeout(10000);
conn.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");
conn.ignoreContentType(true);
conn.execute();
String html = conn.get().text().replace("{\"status\":0,\"result\":[", "").replace("]}", "");
Map map=(Map) JSON.parse(html);
return map.get("x").toString()+","+map.get("y").toString();
}


public static Map getArea(String lon,String lat) throws Exception {
//String url="http://restapi.amap.com/v3/geocode/regeo?key=169d2dd7829fe45690fabec812d05bc3&s=rsv3&location="+lon+","+lat+"&callback=jsonp_320937_&platform=JS&logversion=2.0&sdkversion=1.3&appname=http%3A%2F%2Fwww.gpsspg.com%2Fiframe%2Fmaps%2Famap_161128.htm%3Fmapi%3D3&csid=4394B494-F394-470D-BE2E-E99EC33C028A";
String url="http://api.map.baidu.com/geocoder/v2/?ak=orgFbuCQCBhbNfRcIHE3kKEPHLplWNQt&callback=renderReverse&location="+lat+","+lon+"&output=json&pois=1";
URL baseurl = new URL(url);
trustEveryone();
org.jsoup.Connection conn = HttpConnection.connect(baseurl);
conn.timeout(10000);
conn.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");
conn.ignoreContentType(true);
conn.execute();
String html = conn.get().text().replace("renderReverse&&renderReverse(", "");
html=html.substring(0, html.length()-1);
Map map=(Map) JSON.parse(html);
System.out.println(map);
map=(Map) JSON.parse(map.get("result").toString());
map=(Map) JSON.parse(map.get("addressComponent").toString());
// System.out.println(map.get("province").toString());
// System.out.println(map.get("city").toString());
// System.out.println(map.get("district").toString());
return map;
}
public static void trustEveryone() {
try {
HttpsURLConnection
.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname,
SSLSession session) {
return true;
}
});
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new X509TrustManager[] { new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}

public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}

public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
} }, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(context
.getSocketFactory());
} catch (Exception e) {
// e.printStackTrace();
}
}




}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sort浅忆

觉得有用,大大们可以打赏1毛毛

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值