supermap如何根据经纬度获取位置
我用的是这样的一个方法
步骤一:先用在地图上获取到的坐标通过api转换成百度坐标(以下是转换api)
var urlzuobiao = “http://www.supermapol.com/iserver/services/coordconvert/rest/coordinate/convert.json?points=[{x:"+lonlat.lon+",y:"+lonlat.lat+"}]&from=910113&to=910102&key=你的key”
可以参考:
https://www.supermapol.com/developer/webapi.html#convert
步骤二:用获取到的百度坐标用百度地图api生成了数据
String urlurl = “http://api.map.baidu.com/geocoder/v2/?ak=你的ak&callback=renderReverse&location=36.00821118020924,104.2681987359927&output=json&pois=1”;
获取到的数据是这样子的(如图)
具体详细做法:
前端:
$.ajax({
url:"/passengertransport/Line/selectZuoBiao.do",//转换成百度坐标
data: {"lon":lonlat.lon, "lat":lonlat.lat} ,
type:"post",
dataType:"json",
success:function(data){
$.ajax({
url:"/passengertransport/Line/selectDiZhi.do",//通过百度坐标查询出具体位置
data: {"lon":data[0].x, "lat":data[0].y} ,
type:"post",
dataType:"json",
success:function(datas){
dizhi=datas.result.formatted_address;//详细地址
dizhis = datas.result.addressComponent.city;//具体城市
if (arraydizhies.length == 0) {
arraydizhies.push(dizhis);//添加地址到数组中
}else{
for ( var t = 0; t < arraydizhies.length; t++) {
if (dizhis == arraydizhies[t]) {
pandaun++;
}
}
if (pandaun == 0) {
arraydizhies.push(dizhis);//添加地址到数组中
}else{
pandaun=1;
alert("选择的地点有重复请核对");
return false;
}
}
},
error:function(ers){
console.log("失败"+JSON.stringify(ers));
}
})
},
error:function(er){
console.log("失败"+JSON.stringify(er));
}
})
后端:
//根据地图上的坐标转换成百度坐标
@ResponseBody
@RequestMapping("/selectZuoBiao")
public Object selectZuoBiao(String lon,String lat)
{
String json="";
String str = "";
BufferedReader br=null;//读取访问结果
try {
URL getwalletAmountUrl = new URL("http://www.supermapol.com/iserver/services/coordconvert/rest/coordinate/convert.json?points=[{x:"+lon+",y:"+lat+"}]&from=910113&to=910102&key=fvV2osxwuZWlY0wJb8FEb2i5");
URLConnection context = getwalletAmountUrl.openConnection();
br = new BufferedReader(new InputStreamReader(
context.getInputStream(), "UTF-8"));
while ((str=br.readLine())!=null) {
json = json + str +"\n";
}
System.out.println("转换后的坐标"+json);
} catch (Exception e) {
e.printStackTrace();
}finally{
if (br != null) {//关闭流
try {
br.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
return json;
}
//根据转换后的坐标查出地址
@ResponseBody
@RequestMapping(value={"/selectDiZhi"},produces = "text/plain;charset=utf-8")
public Object selectDiZhi(String lon,String lat)
{
String json="";
String str = "";
BufferedReader br=null;//读取访问结果
try {
URL getwalletAmountUrl = new URL("http://api.map.baidu.com/geocoder/v2/?ak=USVjenOjbDbRDSeVvDwWgMk2DEsNdkDB&location="+lat+","+lon+"&output=json&pois=1");
System.out.println(getwalletAmountUrl);
URLConnection context = getwalletAmountUrl.openConnection();
br = new BufferedReader(new InputStreamReader(
context.getInputStream(), "UTF-8"));
while ((str=br.readLine())!=null) {
json += str;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if (br != null) {//关闭流
try {
br.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
return json;
}
之后代码能正常运行,得出的结果在控制台能显示,但是在浏览器上看到的中文出现乱码(“?”),(如下图所示)
所以要在该项目的springmvc.xml里面加上一段注解,以保证不会乱码
<!-- 注解 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
就阔以了哈哈哈
乱码的具体解决方法可以点击以下链接查看
https://ask.csdn.net/questions/718600