高德地图应用——与云图后台交互

用途:

在高德地图中查看已存在的兴趣点信息,并上报GPS位置错误。

准备工作:
是在高德申请开发账号,建立一个云图。(过程略。)
_name字段作为唯一标示。
云图的表增加一个字段reportid,用以辨别是哪个终端上报的位置信息,防止重复上报。

主要代码:
1.开启GPS定位:
private void initgps() {
myLocation.setText("开始定位...");
locationManager = LocationManagerProxy.getInstance(PoiActivity.this);
// API定位采用GPS定位方式,第一个参数是定位provider,第二个参数时间最短是2000毫秒,第三个参数距离间隔单位是米,第四个参数是定位监听者
// locationManager.requestLocationUpdates(
// LocationManagerProxy.GPS_PROVIDER, 2000, 10, this);
locationManager.requestLocationData(LocationManagerProxy.GPS_PROVIDER,
2000, 10, this);
}

2.关闭GPS定位:
private void stopgps() {
myLocation.setText("定位停止");
locationisok = false;
if (locationManager != null) {
locationManager.removeUpdates(this);
}
locationManager = null;
}
3.获取当前GPS信息

/**
* gps定位回调方法
*/
@Override
public void onLocationChanged(AMapLocation location) {
if (location != null) {
Double geoLat = location.getLatitude();
Double geoLng = location.getLongitude();
this.lat = geoLat;
this.lng = geoLng;

String str = ("定位成功:(" + geoLng + "," + geoLat + ")"
+ "\n精 度 :" + location.getAccuracy() + "米"
+ "\n定位方式:" + location.getProvider() + "\n定位时间:" + AMapUtil
.convertToTime(location.getTime()));
myLocation.setText(str);
thisplocation = geoLng + "," + geoLat;
locationisok = true;
} else {
locationisok = false;
}
}

4.获取手机串号作为reportid
private String getimei() {
String is = null;
try {
TelephonyManager telephonyManager = (TelephonyManager) cx
.getSystemService(Context.TELEPHONY_SERVICE);
is = telephonyManager.getDeviceId();
} catch (Exception e) {
is = "";
}
return is;
}

5.查询是否重复HttpGet方法
public int checkexist(String sname, String srid) {
// String sname 兴趣点名称, String srid 电话IMEI
String BASEURL = "http://yuntuapi.amap.com/datamanage/data/list?key=你的KEY"
+ "limit=10&page=1&filter=";
String LASTURL = "&tableid=你的tableid";
String asks = "";
// 检查IMEI是否为空
srid.replaceAll(" ", "");
if (srid == null || srid.length() <= 0) {
asks = "_name:" + sname;
} else {
asks = "_name:" + sname + "+reportid:" + srid;
}
;

String countid = "10";// 未成功获取信息,返回>1的数值供判断。
try {
// 创建一个HttpClient对象
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet(BASEURL + asks + LASTURL);
request.addHeader("Accept", "text/json");
// JSON的解析过程
HttpResponse response = httpclient.execute(request);
// 获取HttpEntity
HttpEntity entity = response.getEntity();
int code = response.getStatusLine().getStatusCode();
if (code == 200) {
// 获取响应的结果信息
String json = EntityUtils.toString(entity, "UTF-8");
// JSON的解析过程
if (json != null) {
JSONObject jsonObject = new JSONObject(json);
countid = jsonObject.get("count").toString();
testcount = countid;
testinfo = jsonObject.get("info").toString();
}
}

} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return Integer.valueOf(countid).intValue();
}

6.上报GPS位置信息HttpPost方法
private boolean postreport(String sname, String sid, String slocation) {
String BASEURL = "http://yuntuapi.amap.com/datamanage/data/create?";
String KEYS = "你的KEY";
String TID = "你的tableid";

try {
HttpClient httpclient = new DefaultHttpClient();
String uri = BASEURL;//
HttpPost httppost = new HttpPost(uri);
httppost.addHeader("Content-Type",
"application/x-www-form-urluncoded");

JSONObject obj = new JSONObject();
obj.put("_name", sname);
obj.put("_location", slocation);
obj.put("reportid", sid);

List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("key", KEYS));
formparams.add(new BasicNameValuePair("tableid", TID));
formparams.add(new BasicNameValuePair("data", obj.toString()));
UrlEncodedFormEntity uefEntity;

uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
httppost.setEntity(uefEntity);

HttpResponse response;
response = httpclient.execute(httppost);
// 检验状态码,如果成功接收数据
int code = response.getStatusLine().getStatusCode();
if (code == 200) {
String rev = EntityUtils.toString(response.getEntity());// 返回json格式:
obj = new JSONObject(rev);
String infos = obj.getString("info");
String stats = obj.getString("status");
if (infos.equals("OK")) {
return true;
}
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
} catch (Exception e) {
}
return false;
}

7.更新界面线程

private class Asynpost extends AsyncTask<Void, Void, String> {
private final String TAG = "dopost";

// onPreExecute方法在execute()后执行
@Override
protected void onPreExecute() {
Log.i(TAG, "onPreExecute() enter");
postisok = false;
}

// onCancelled方法用于取消Task执行,更新UI
@Override
protected void onCancelled() {
Log.i(TAG, "onCancelled() called");
postisok = false;
}

@Override
protected void onPostExecute(String result) {
// mPoiTextView.setText(result);
dissmissProgressDialog();
if (result.equals("true")) {
Toast.makeText(cx, "您的信息已成功提交", Toast.LENGTH_LONG)
.show();
}else if (result.equals("false")) {
Toast.makeText(cx, "您的信息提交失败,原因是:您已经提交过信息。",
Toast.LENGTH_LONG).show();
}else if (result.equals("error")){
Toast.makeText(cx, "您的信息提交失败,原因是:可能是网络问题,",
Toast.LENGTH_LONG).show();
};
}

@Override
protected String doInBackground(Void... arg0) {
// TODO Auto-generated method stub
String rr = "";
if (checkexist(thispname, repid) == 0) {
if (postreport(thispname, repid, thisplocation)){
postisok = true;
rr = "true";
}else{
postisok = false;
rr = "error";
};

} else {
postisok = false;
rr = "false";
}
return rr;
}

}

时间: 2024-10-23 23:40:42

高德地图应用——与云图后台交互的相关文章

Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作

刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息            使用的Unity版本为5.5,Androad Studio 2.3.1 接下来开始讲具体操作 首先是Androad Studio的基本配置 1.创建工程,空白的就行,反正也用不到界面布局 等待创建完成 2.新建库模块: 切换到Project视图 右击你的项目 新建一个库模块-用来负责与Unity交互 当然你也可以不

高德地图组件在Android的应用以及Android与JavaScript的交互

最近在慕课网学习了关于高德地图组件的课程(其实就是一个广告,内容和官网的API完全一样),发现这个JavaScript API比Android API简单方便多了,于是就打算放在Android APP上来实现,花了一点小功夫,但是最终还是实现了,后来打算扩展的时候遇到个问题:就是高德官网有一个坐标拾取点(高德的坐标和我们平时取的坐标不一样,可以将高德坐标理解为中国的国标,直接获取的坐标是国际标准的坐标),后来发现有html文件直接实现了这个功能,于是就把这个html扒出来了,但是重点问题来了:如

【高德地图API】汇润做爱地图技术大揭秘

昨日收到了高德地图微信公众号的消息推送,说有[一大波免费情趣用品正在袭来],点进去看了一眼,说一个电商公司(估计是卖情趣用品的)用高德云图制作了一张可以标记做爱地点与详情的地图.这不就是中国版的I just made love麽? 滑到屏幕底下,看了看阅读量,哇塞,居然有4万3!!!说明实在是有很多人关注做爱地图啊.本着研究地图的心情(绝对不是为了什么价值300的智能情趣用品!),我也就点击了[阅读原文]…… 好吧,为了证明我真的不是为了奖品,我会一边写活动步骤,一边揭秘其中的LBS技术.  

【原创】web端高德地图javascript API的调用

关于第三放地图的使用,腾讯.百度.高德 具体怎么选择看你自己怎么选择了. 高德地图开放平台:http://lbs.amap.com/ 本次使用的是高德的javascript API http://lbs.amap.com/api/javascript-api/summary/ 使用方法 1.注册成为高德地图开发者,创建应用后申请key. 2.引入高德地图API <script type="text/javascript" src="http://webapi.amap.

【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物

覆盖物,是一张地图的灵魂.有覆盖物的地图,才是完整的地图.在一张地图上,除了底层的底图(瓦片图,矢量图),控件(有功能可操作的工具),最重要最不可缺少的就是覆盖物了.覆盖物有多种,包括,标注.折线.多边形.信息窗口.聚合marker.麻点图和图片覆盖物.本文会详细介绍每一种覆盖物的概念,添加方法,修改方法,移除方法等.最后会提供示例和源代码下载. 示例demo:http://zhaoziang.com/amap/zero_3_1.html ----------------------------

【高德地图API】从零开始学高德JS API(三)覆盖物

摘要:覆盖物,是一张地图的灵魂.有覆盖物的地图,才是完整的地图.在一张地图上,除了底层的底图(瓦片图,矢量图),控件(有功能可操作的工具),最重要最不可缺少的就是覆盖物了.覆盖物有多种,包括,标注.折线.多边形.信息窗口.聚合marker.麻点图和图片覆盖物.本文会详细介绍每一种覆盖物的概念,添加方法,修改方法,移除方法等.最后会提供示例和源代码下载. 示例demo:http://zhaoziang.com/amap/zero_3_1.html -------------------------

高德地图iOS SDK限制地图的缩放比例

问题 高德地图的iOS SDK 3D版中(v2.4.0), 显示范围在560m左右时建筑会呈现3D效果. 我们有没有办法可以限制地图最小缩放到这个比例, 从而保证建筑始终使用3D效果显示呢? 探索 高德地图的MAMapView再怎么封装也是个UIView, 通过加断点很容易看出它的结构 很明显, 地图上的操作都是依赖UIGestureRecognizer来处理的. 为了限制地图的交互, 我们只需要想办法修改一下这些gesture的处理逻辑即可. 对于pinch操作它提供了handlePinch:

百度地图API和高德地图API资料集锦

[高德地图API]从零开始学高德JS API(五)路线规划--驾车|公交|步行 [高德地图API]从零开始学高德JS API(四)搜索服务--POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 [高德地图API]从零开始学高德JS API(三)覆盖物--标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物 [高德地图API]从零开始学高德JS API(二)地图控件与插件--测距.圆形编辑器.鼠标工具.地图类型切换.鹰眼鱼骨 [高德地图API]从零开始学高德JS API

【高德地图API】从零开始学高德JS API(四)搜索服务

摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公交导航,驾车导航,步行导航,道路查询(交叉口),行政区划等等.如果说覆盖物Marker是地图的骨骼,那么服务,就是地图的气血.有个各种各样的地图服务,我们的地图应用才能变得有血有肉,活灵活现.第四篇拆成了几个要点,本篇主要讲搜索服务.包括周边搜索,关键词搜索,范围搜索,搜索提示(自动完成,输入提示),行政区域,交叉路口,检索自有数据(云图). demo:http://zhaoziang.com/amap/zero_4_1.html