java servlet手机app访问接口(三)高德地图云存储及检索_java

这篇关于高德地图的随笔内容会多一点,

一、业务说明

对应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上实现的时时定位传云图数据库的代码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, servlet
, 手机app
访问接口
ios 高德地图poi检索、高德地图周边检索、高德云检索、ios高德地图周边检索、高德地图云图检索demo,以便于您获取更多的相关知识。

时间: 2024-11-09 01:45:10

java servlet手机app访问接口(三)高德地图云存储及检索_java的相关文章

java servlet手机app访问接口(一)数据加密传输验证_java

前面几篇关于servlet的随笔,算是梳理了servlet的简单使用流程,接下去的文章将主要围绕手机APP访问接口这块出发续写,md5加密传输--->短信验证--->手机推送--->分享--->百度云图---->支付....第三方的业务 ...由于我是新手我也是一边学一边写,不足地方希望谅解. 今天这篇文章主要涉及到 javaservlet传输数据的加密,客户端请求参数的组合,并且会附带上我中途遇到的所有问题以及解决方法.  由于手机访问接口是公布出来的,所以不管用什么语言编

手机app接口开发-手机APP登录接口设计问题,不知道加密方式如何登录?

问题描述 手机APP登录接口设计问题,不知道加密方式如何登录? 不知道网站的密码的加密方式,知道密码,手机APP接口该怎么设计登录呢? 解决方案 用fiddler调试,看看密码是不是明文传过去的.如果不是,再用js调试工具看密码在客户端的加密方式是什么. 解决方案二: 设计基于HTML5的APP登录功能及安全调用接口的方式(原理篇)设计基于HTML5的APP登录功能及安全调用接口的方式(原理篇) 解决方案三: 知道密码,但不知道加密方式,这个就需要从 PC,即网页端分析了.只有分析出加密的算法,

Java Servlet中用户访问权限的问题

问题描述 我做了一个Servlet通过Jacob访问Excel与Word.在Tomcat中测试通过了,但是在Was中发布后测试失败.我在TaskManager观察到的现象如下:Tomcat访问Servlet的场合,是Administrator用户去调用的Excel.exeWas访问Servlet的场合,是User用户去调用的Excel.exeUser用户调用Excel.exe的时候,总是提示权限不足,无法保存的问题.各位高手,谁能告诉我,怎么在Web.config中配置权限,才能用Adminis

高德地图app怎么反馈意见?高德地图反馈意见方法

当我们使用高德地图的时候,发现他的定位不准.那么,我们可以反馈正确的定位上去,反馈时可以写上该地点比较显眼的商户等.接下来,小编就和大家分享下,该如何在高德地图上反馈意见. 1.打开地图,如图. 2.点击[我的],如图. 3.点击[帮助与反馈],如图. 4.点击[我要反馈],如图. 5.如果要新增未收录的商户等,则选择[新增地点].如果是对产品提出建议,则点击[改进建议].如果是卡顿.闪退等,则选择[性能问题].如果是定位不准,则点击[定位不准].如果是不知道属于哪一类的问题,则选择[其他问题]

百度云Site App新版上线 送站长免费云存储

中介交易 SEO诊断 淘宝客 云主机 技术大厅 作为国内首个PC网站快速"移动化"工具,百度云Site App自从2012年9月百度世界大会正式发布以来,已成功转化站点近1万家.为庆祝即将召开的2013年百度联盟峰会,百度云将举办"网站轻松移动化,送你免费云存储"线上活动,向开发者免费开放云存储资源.同时,新版Site App也已上线. 网站轻松移动化,送你免费云存储 活动地址(http://siteapp.baidu.com/league_act/) 据悉,新版的

Java servlet、filter、listener、interceptor之间的区别和联系_java

servlet.filter.listener.interceptor之间的区别和联系 一.概念 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层. 2.filter:filter是一个可以复用的代码片段,可以用来转换HTTP请求.响应和头信息.Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应. 3.listener:

零基础写Java知乎爬虫之将抓取的内容存储到本地_java

说到Java的本地存储,肯定使用IO流进行操作. 首先,我们需要一个创建文件的函数createNewFile: 复制代码 代码如下: public static boolean createNewFile(String filePath) {          boolean isSuccess = true;          // 如有则将"\\"转为"/",没有则不产生任何变化          String filePathTurn = filePath.r

mybatis-手机app后台接口用java怎么写?

问题描述 手机app后台接口用java怎么写? 有没有demo可以提供的?听说用rest.rest不是有get.put吗?那样不是不安全吗? 解决方案 restful api之上你可以附加一些参数,比如appkey,secretid,sign等,伪造的程序因为对不上这些参数,所以不可以调用. 解决方案二: 可以使用网络协议 或者 对数据接口参数进行签名,后台验证签名通过才可操作 否则直接返回 解决方案三: 后台一般来说是基于网络协议的,如果你想和app进行交互的话可以通过htto请求来进行数据的

求教,要用java写个app的服务端,请问需要使用哪些技术或组件?

问题描述 求教,要用java写个app的服务端,请问需要使用哪些技术或组件? 好像需要用到xmpp,数据传递打算使用json,然后框架准备使用springmvc+mybties,但是我不清楚该怎么实现接收app传过来的数据,还有就是怎么将数据传递给app. 好像说进行接口交互,但是这个大概是怎么实现或运行的,有没有大神介绍下,有例子链接更好哈! 解决方案 这个我来告诉你,因为我现在就在用JAVA做手机APP的服务器. 首先你不要被什么框架啊这些给迷惑了,如果你连原理都不知道就去弄这些框架,会把你