java servlet手机app访问接口(三)高德地图云存储及检索
本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址
https://www.baiydu.com
这篇关于高德地图的随笔内容会多一点,
一、业务说明
对应APP业务中的成员有两类,一是服务人员,二是被服务人员, 主要实现功能, 对APP中的服务人员位置进行时时定位, 然后通过被服务人员登录APP时提供的一个经纬度来计算服务人员与被服务人员之间的距离 单位m。
下面是整个详细流程,从创建高德对应应用(这里注册我就不说了)------最后完成此功能。
二、创建servlet对应的高德地图应用,创建自己的云图数据库表
注册帐号后登录点击右上角的控制台,会出现下面这个界面,我截图
这里当然是我已经注册好了的界面,如果没注册进来就一个 button 获取key,这里你直接点进去,就可以创建你的应用了,应用名称随便取,由于我们这里是servlet来处理
相关的业务,所以选项为Web服务API, 这里你点击获取key就会出现下面的截图
这一步完成,后我们就可以去创建我们要的云图表了,进入控制台,选择鼠标移到我的数据,然后选择下面的数据管理台(Web)进入增加云图表界面
下面是进入后的截图,这个截图完了我就直接使用文字讲解了。
上面这个截图是我创建好的结果,这里我们需要先点击右上角的 数据模版下载,将模版下载下来之后,修改相应的数据,增加自己需要的字段后,然后点新建地图将
修改后的模版导入到云图库中去,这个模版其实就是一个EXCEL导出的数据库表。下面我直接截取我创建的表,我这个表增加了两个字段,并且将一个字段设置成了索引字段。
记得红色的字段名称必须保留(内容可以随便修改),那是系统模版自带的,后面两个黑色的字段是自己增加的,可以随意修改,即使你将它上传到了高德云图服务器之后也是可以改的。
上传上面的表后,你再打开之前 数据管理(WEB)就会出现之前一张地图的界面了,左边有一张地图方块出现,你点进去,就能看到你上传人员的详细信息,以及通过上传的经纬度在地图上展示的 黄色五角星标识。下面有截图
这个表中显示的字段是我修改过的,不是刚才Excel中上传的,点击栏中的标题可以进行一系列的设置,这个我就不详细说了,
只说下索引字段的设置,
进去后我选择是 筛选排序索引-->筛选排序索引就是对用户自己新增加的字段设置一个筛选条件。
我这里使用的是上面云图中截图的用户类型,它的作用我也给各位截下图。
到这一步我们整个创建云图及上传的步骤就完成了。。。接下去我会讲调用的方法。
二、servlet查询云图库的请求方法
1、先贴上开发者文档地址:
http://lbs.amap.com/yuntu/reference/cloudsearch/ 这个我建议自己还是去看下
这里servlet使用的是云检索API, 对应APP使用的是云存储API,也许明天会增加一篇关于IOS客户端对应这个接口的时时定位文章。
下面是拼接的URL格式,直接在URL中输入刷新可以已GET方式获取相关数据。
http://yuntuapi.amap.com/datasearch/local?tableid=568bd32b305a2a31f604c650&city=北京&keywords=%20&filter=type:服务人员limit=15&page=1&key=? (这里的参数 KEY这些都是你自己的)
下面是封装的请求方法代码
package Helper; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map; public class HttpRequest {
/**
* 向指定URL发送GET方法的请求
*
* @param url
* 发送请求的URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null; try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
} /**
* 向指定 URL 发送POST方法的请求
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数 out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
} try {
result= new String(result.getBytes("ISO8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
下面是请求方法
String mapParameter=new String("tableid=568bd32b305a2a31f604c650&city=北京&keywords=%20&filter=type:按摩师limit=15&page=1&key=?").getBytes("ISO8859-1"),"UTF-8");
String returnResult=HttpRequest.sendPost(" http://yuntuapi.amap.com/datasearch/local", mapParameter);
out.println("<script> alert("+returnResult+");</script>");
这里我们查询的筛选条件就是我们自己创建的字段(并且它被我们设置成了索引字段) type:按摩师------------------上面的_updatetime前面的字段都是我们数据库中放的数据,后面的都是通过传的经纬度查询出来的真实数据,但是在真正使用时用时,这些数据都是 App端往里面增加的,而且APP还需要传当前定位的城市名称给Servlet,所以这里的数据都是错的。
二、servlet计算两个经纬度间的距离,
这里就是servlet通过经纬度计算被服务人员与服务人员的距离,这里其实是一对多的关系。一个被 被服务人员可以对应N个提供服务的人员。 被服务人员的所在位置经纬度会去匹配所有此次查询出的服务人员的经纬度,计算出距离。
下面贴计算距离的方法,这个是一个公用的方法各大地图都适用。
public static double getDistance(LatLng start,LatLng end){
double lat1 = (Math.PI/180)*start.latitude;
double lat2 = (Math.PI/180)*end.latitude; double lon1 = (Math.PI/180)*start.longitude;
double lon2 = (Math.PI/180)*end.longitude; double R = 6371; double d = Math.acos(Math.sin(lat1)*Math.sin(lat2)+Math.cos(lat1)*Math.cos(lat2)*Math.cos(lon2-lon1))*R;
return d*1000;
}
参数中的LatLng 你可以自己创建一个类,里面包含两个字段都是double类型。一个代表精度,一个代表纬度。
使用这个方法产生的流程:当用户打开服务人员的APP界面时,请求了读取服务人员列表的接口,这时候SERVLET就需要查询一次高德云图里面的服务人员信息,可以限制查询条数,然后查询出来,循环每条数据中的经纬度与使用被服务人员打开APP界面传的经纬度,匹配计算出相对距离。 明天也许会发布一篇IOS的随笔,就对应这个接口,主要贴在IOS上实现的时时定位传云图数据库的代码
本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。
java servlet手机app访问接口(三)高德地图云存储及检索的更多相关文章
- java servlet手机app访问接口(一)数据加密传输验证
前面几篇关于servlet的随笔,算是拉通了 servlet的简单使用流程,接下去的文章将主要围绕手机APP访问接口这块出发续写,md5加密传输--->短信验证--->手机推送---> ...
- java servlet手机app访问接口(二)短信验证
今天找了几个短信平台,其实最想使用的一个是sharesdk,使用它上面http api短信功能,不仅价格低,而且最少可以充值100RMB,但是审核过于严格,对应APP还必须集成他们的短信功能,而且要上 ...
- java servlet手机app访问接口(四)推送
一. 服务端DEMO下载及运行. 登录友盟后,浏览器直接输入下面这个URL,直接进入文档开发和DEMO下载页面:http://dev.umeng.com/push/ios/integration(下面 ...
- java实现利用httpclient访问接口
HTTP协议时Internet上使用的很多也很重要的一个协议,越来越多的java应用程序需要通过HTTP协议来访问网络资源. HTTPClient提供的主要功能: 1.实现了所有HTTP的方法(GET ...
- Java 调用 Hbase API 访问接口实现方案
HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件 ...
- 【http抓包】记录一次抓手机app的接口
抓手机的接口地址,好用的工具很多,想 windows下的 Fiddler 和mac下的Charles 1. fiddler的设置教程是 http://jingyan.baidu.com/article ...
- android 高德地图API 之 java.lang.UnsatisfiedLinkError: Couldn't load amapv3: findLibrary returned null错误
错误场景: 运行android app时,在运行到调用高德地图API时,出现 “java.lang.UnsatisfiedLinkError: Couldn't load amapv3: findLi ...
- java Servlet接口及应用
基本类和接口 一.javax.servlet.Servlet接口 servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理 ...
- java Servlet接口及应用(转)
基本类和接口 一.javax.servlet.Servlet接口 servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理 ...
随机推荐
- 大叔也说Xamarin~Android篇~调用远程API接口,发POST请求
回到目录 Xamarin我们在上节已经教大家如何去部署它的环境了,今天来说一个实际的例子,使用android客户调用.net web api的一个接口,并发送POST请求,当服务端回到请求后做出响应, ...
- vagrant homestead laravel 编程环境搭建
这里面其实坑不少的,首先介绍 VirtualBox 虚拟机,windows下安装linux必须用的一个工具 vagrant 封装虚拟机的一个软件,可以设置好系统,安装好软件,什么时候用,直接导入就行 ...
- linker command failed with exit code 1 (use -v to see invocation)
背景:用U盘从另一台电脑考过来后,出现错误 linker command failed with exit code 1 (use -v to see invocation) 出现这种情况很可能是,项 ...
- PC端和移动端地址适配
判断当前页面的打开方式是pc还是移动设备,如果是移动设备,跳转到对应移到端网站的方法: 方法一.还是用@media screen 思路:css使用媒体查询,当屏幕小于760px时,使某个元素的样式发生 ...
- ASP.NET常用的SqlDbHelper类
请引用 using System.Data;using System.Data.SqlClient; 两个命名空间. 可以满足常用的数据集,读取多条数据,以及增删改操作 代码: /// <sum ...
- 【WP 8.1开发】电子罗盘
罗盘,估计也不用我过多介绍,学过初中物理的都知道,不管是指南针,还是指北针,其本质就是用来辨别方向的. 操作电子罗盘伟感器也不复杂,主要就是两个角度: 1.当前方向与磁北的夹角: 2.当前方向与地北的 ...
- 浏览器端获取局域网IP地址,本机的MAC,以及机器名
原文链接:http://www.orlion.ga/59/ 只针对IE且客户端的IE允许AcitiveX运行 code: <html> <head> <title> ...
- [转载]UML类图总结
前言 类图和序列图是UML中最常用的两种Diagram.我将做详细的总结.在许多书中,或者网站中,在介绍一个系统的子系统的设计时,很多时候,都是给出简单的类图来简述构成子系统的类之间的关系.这足以说明 ...
- Android Studio1.4.x JNI开发基础-基本环境配置
从Eclipse时代到Android Studio普及,开发工具越来越好用.早些时候还需要安装Cygwin工具,从Android Studio1.3以后,在Android 环境开发JNI程序搭建开发环 ...
- javaccript学习1
1.javascript中的三种消息框 (1)警告框 警告框经常用于确保用户可以得到某些信息. 当警告框出现后,用户需要点击确定按钮才能继续进行操作. 语法: alert("文本" ...