‘壹’ jpush推送java后台怎么调用
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6439313.html
Java后台实现极光推送有两种方式,一种是使用极光推送官方提供的推送请求API:https://api.jpush.cn/v3/push,另一种则是使用官方提供的第三方Java SDK,这里先进行第一种方式推送的实现代码:
importorg.apache.http.HttpResponse;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.entity.StringEntity;
importorg.apache.http.impl.client.DefaultHttpClient;
importorg.apache.http.util.EntityUtils;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importcom.alibaba.fastjson.JSONArray;
importnet.sf.json.JSONObject;
importsun.misc.BASE64Encoder;
/**
*java后台极光推送方式一:使用HttpAPI
*此种方式需要自定义http请求发送客户端:HttpClient
*/
@SuppressWarnings({"deprecation","restriction"})
publicclassJiguangPush{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(JiguangPush.class);
privateStringmasterSecret="xxxxxxxxxxxxxxxxxxxx";
privateStringappKey="xxxxxxxxxxxxxxxxxxx";
privateStringpushUrl="https://api.jpush.cn/v3/push";
privatebooleanapns_proction=true;
privateinttime_to_live=86400;
privatestaticfinalStringALERT="推送信息";
/**
*极光推送
*/
publicvoidjiguangPush(){
Stringalias="123456";//声明别名
try{
Stringresult=push(pushUrl,alias,ALERT,appKey,masterSecret,apns_proction,time_to_live);
JSONObjectresData=JSONObject.fromObject(result);
if(resData.containsKey("error")){
log.info("针对别名为"+alias+"的信息推送失败!");
JSONObjecterror=JSONObject.fromObject(resData.get("error"));
log.info("错误信息为:"+error.get("message").toString());
}
log.info("针对别名为"+alias+"的信息推送成功!");
}catch(Exceptione){
log.error("针对别名为"+alias+"的信息推送失败!",e);
}
}
/**
*组装极光推送专用json串
*@paramalias
*@paramalert
*@returnjson
*/
(Stringalias,Stringalert,booleanapns_proction,inttime_to_live){
JSONObjectjson=newJSONObject();
JSONArrayplatform=newJSONArray();//平台
platform.add("android");
platform.add("ios");
JSONObjectaudience=newJSONObject();//推送目标
JSONArrayalias1=newJSONArray();
alias1.add(alias);
audience.put("alias",alias1);
JSONObjectnotification=newJSONObject();//通知内容
JSONObjectandroid=newJSONObject();//android通知内容
android.put("alert",alert);
android.put("builder_id",1);
JSONObjectandroid_extras=newJSONObject();//android额外参数
android_extras.put("type","infomation");
android.put("extras",android_extras);
JSONObjectios=newJSONObject();//ios通知内容
ios.put("alert",alert);
ios.put("sound","default");
ios.put("badge","+1");
JSONObjectios_extras=newJSONObject();//ios额外参数
ios_extras.put("type","infomation");
ios.put("extras",ios_extras);
notification.put("android",android);
notification.put("ios",ios);
JSONObjectoptions=newJSONObject();//设置参数
options.put("time_to_live",Integer.valueOf(time_to_live));
options.put("apns_proction",apns_proction);
json.put("platform",platform);
json.put("audience",audience);
json.put("notification",notification);
json.put("options",options);
returnjson;
}
/**
*推送方法-调用极光API
*@paramreqUrl
*@paramalias
*@paramalert
*@returnresult
*/
publicstaticStringpush(StringreqUrl,Stringalias,Stringalert,StringappKey,StringmasterSecret,booleanapns_proction,inttime_to_live){
Stringbase64_auth_string=encryptBASE64(appKey+":"+masterSecret);
Stringauthorization="Basic"+base64_auth_string;
returnsendPostRequest(reqUrl,generateJson(alias,alert,apns_proction,time_to_live).toString(),"UTF-8",authorization);
}
/**
*发送Post请求(json格式)
*@paramreqURL
*@paramdata
*@paramencodeCharset
*@paramauthorization
*@returnresult
*/
@SuppressWarnings({"resource"})
(StringreqURL,Stringdata,StringencodeCharset,Stringauthorization){
HttpPosthttpPost=newHttpPost(reqURL);
HttpClientclient=newDefaultHttpClient();
HttpResponseresponse=null;
Stringresult="";
try{
StringEntityentity=newStringEntity(data,encodeCharset);
entity.setContentType("application/json");
httpPost.setEntity(entity);
httpPost.setHeader("Authorization",authorization.trim());
response=client.execute(httpPost);
result=EntityUtils.toString(response.getEntity(),encodeCharset);
}catch(Exceptione){
log.error("请求通信["+reqURL+"]时偶遇异常,堆栈轨迹如下",e);
}finally{
client.getConnectionManager().shutdown();
}
returnresult;
}
/**
*BASE64加密工具
*/
(Stringstr){
byte[]key=str.getBytes();
BASE64Encoderbase64Encoder=newBASE64Encoder();
Stringstrs=base64Encoder.encodeBuffer(key);
returnstrs;
}
}
以上代码中使用的是第一种方式实现推送,下面介绍第二种方式:使用java SDK
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importcn.jiguang.common.ClientConfig;
importcn.jiguang.common.resp.APIConnectionException;
importcn.jiguang.common.resp.APIRequestException;
importcn.jpush.api.JPushClient;
importcn.jpush.api.push.PushResult;
importcn.jpush.api.push.model.Options;
importcn.jpush.api.push.model.Platform;
importcn.jpush.api.push.model.PushPayload;
importcn.jpush.api.push.model.audience.Audience;
importcn.jpush.api.push.model.notification.AndroidNotification;
importcn.jpush.api.push.model.notification.IosNotification;
importcn.jpush.api.push.model.notification.Notification;
/**
*java后台极光推送方式二:使用JavaSDK
*/
@SuppressWarnings({"deprecation","restriction"})
publicclassJiguangPush{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(JiguangPush.class);
="xxxxxxxxxxxxxxxxx";
privatestaticStringappKey="xxxxxxxxxxxxxxxx";
privatestaticfinalStringALERT="推送信息";
/**
*极光推送
*/
publicvoidjiguangPush(){
Stringalias="123456";//声明别名
log.info("对别名"+alias+"的用户推送信息");
PushResultresult=push(String.valueOf(alias),ALERT);
if(result!=null&&result.isResultOK()){
log.info("针对别名"+alias+"的信息推送成功!");
}else{
log.info("针对别名"+alias+"的信息推送失败!");
}
}
/**
*生成极光推送对象PushPayload(采用javaSDK)
*@paramalias
*@paramalert
*@returnPushPayload
*/
_android_ios_alias_alert(Stringalias,Stringalert){
returnPushPayload.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.alias(alias))
.setNotification(Notification.newBuilder()
.addPlatformNotification(AndroidNotification.newBuilder()
.addExtra("type","infomation")
.setAlert(alert)
.build())
.addPlatformNotification(IosNotification.newBuilder()
.addExtra("type","infomation")
.setAlert(alert)
.build())
.build())
.setOptions(Options.newBuilder()
.setApnsProction(false)//true-推送生产环境false-推送开发环境(测试使用参数)
.setTimeToLive(90)//消息在JPush服务器的失效时间(测试使用参数)
.build())
.build();
}
/**
*极光推送方法(采用javaSDK)
*@paramalias
*@paramalert
*@returnPushResult
*/
publicstaticPushResultpush(Stringalias,Stringalert){
ClientConfigclientConfig=ClientConfig.getInstance();
JPushClientjpushClient=newJPushClient(masterSecret,appKey,null,clientConfig);
PushPayloadpayload=buildPushObject_android_ios_alias_alert(alias,alert);
try{
returnjpushClient.sendPush(payload);
}catch(APIConnectionExceptione){
log.error("Connectionerror.Shouldretrylater.",e);
returnnull;
}catch(APIRequestExceptione){
log.error("ErrorresponsefromJPushserver.Shouldreviewandfixit.",e);
log.info("HTTPStatus:"+e.getStatus());
log.info("ErrorCode:"+e.getErrorCode());
log.info("ErrorMessage:"+e.getErrorMessage());
log.info("MsgID:"+e.getMsgId());
returnnull;
}
}
}
可以看出使用Java SDK实现推送的方式很简单,代码量也少,理解起来也不难,官方提供的SDK中讲很多内容都实现了,我们只是需要配置一下信息,然后发起推送即可。需要注意的是使用第二种方式,需要导入极光官网提供的jar包。
直接在maven中的pom文件中加入:
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.2.15</version>
</dependency>
原本我们项目中也是采用第二种方式实现的,但是最后在提交代码时发现一个问题,那就是虽然我们只是带入了官网提供的那三个jar包,但是最后一统计,竟然无缘无故增多了80+个jar包,如此多的jar包提交过于臃肿,而且不现实,所以才临时改变方案,采用第一种方式进行编码。
代码中采用的是别名方式进行推送,需要在在手机APP端进行别名设置,最好就是在用户登录之后就设置好,这样只要用户登录一次,它的绑定别名就可以保存到极光服务器,而我们推送时,指定这个别名,就能将信息推送到对应用户的手机上。
其实我们发起推送请求,只是将信息发送到了极光服务器之上,这个信息有一个保存时限,默认一天,只要用户登录手机APP,极光服务器就会将信息自动推送到对应别名的手机上,由此可见,信息并非由我们后天直接推送到手机,而是通过极光服务器这个中转站,而这正式极光的工作。
‘贰’ 课程开发的三个阶段
‘壹’ FCF右脑开发里面的课程有几个阶段
总共是五个课程,最主要的是它们是环环相扣,一个都不能少,但是课程的含金量是很高的
‘贰’ 尚学堂的java课程主要学习什么呢
第一阶段:小型桌面应用开发
阶段目的:掌握JAVA语言的语法,理解面回向对象的编程思想,能够答熟练使用JAVA语言开发小型桌面应用。
基础技能训练:操作系统与网络技术、JAVA面向功能对象程序设计、JAVA核心编程、JAVA网络编程
第二阶段:中小型网站应用开发
阶段目的:掌握数据库设计与开发技能,熟练使用JAVAEE组件技术开发中小型网站应用。
数据库(Oracle数据库管理及开发)、UI开发(WEB页面开发基础、XML、Ajax)、JAVAEE组件开发(jsp、servlet、jdbc)、框架技术(struts2.0、hibernate、spring、springMVC、mybatis)
第三阶段:软件工程工业实践
阶段目的:熟悉软件工程流程及规范,使用以前三个阶段所学的技能,进行软件工程工业实践。
软件工程方法论、软件工程项目实践
第四阶段:职业素质培养及就业
阶段目的:提高团队协作能力、职业道德、沟通能力和面试技巧,成功面试,成为标准IT职业人。
职业素质培养(职业道德、项目经理座谈、面试技能)、就业。
‘叁’ 安卓开发课程分为哪几个阶段
安卓越的安卓开发课程分为5个阶段,共768课时,第一阶段:android介绍与Java核心部分
(168课时)
第二阶段:Android基础编程
(152课时)
第三阶段:专项技能突破(160课时)第四阶段:高级篇(48课时)Android
OpenGL
开发基础
OpenGL基本知识、OpenGL和OpenGl
ES介绍
掌握OpenGL开发技巧
第五阶段:高级篇(112课时)
Android项目实战
掏客(个人媒体客户端)
‘肆’ 想学习5培训的课程,谁能介绍一下课程的体系
所有互联网的页面开发都可以用到HTML5,包括PC端,手机端和平板。
HTML5高端课程大纲分为十个阶段。
第一阶段:前端页面重构;
第二阶段:JavaScript高级程序设计;
第三阶段:PC端全栈开发;
第四阶段:移动WebApp开发;
第五阶段 : 混合(RN,HybridAPP)开发;
第六阶段:NodeJS开发;
第七阶段:游戏开发;
第八阶段:Java开发;
第九阶段:PHP开发;
第十阶段:Android开发。
‘伍’ 安卓开发课程分为哪几个阶段
安卓越的安卓开发课程分为5个阶段,共768课时,第一阶段:android介绍与Java核心部分 (168课时)
第二阶段:Android基础编程 (152课时) 第三阶段:专项技能突破(160课时)第四阶段:高级篇(48课时)Android OpenGL 开发基础 OpenGL基本知识、OpenGL和OpenGl ES介绍 掌握OpenGL开发技巧
第五阶段:高级篇(112课时) Android项目实战 掏客(个人媒体客户端)
‘陆’ 学习方法内容
高效的学习,首先要学会听课:
1、有准备的去听,也就是说听课前要先预习,找出不懂的知识、发现问题,带着知识点和问题去听课会有解惑的快乐,也更听得进去,容易掌握;
2、参与交流和互动,不要只是把自己摆在“听”的旁观者,而是“听”的参与者,积极思考老师讲的或提出的问题,能回答的时候积极回答(回答问题的好处不仅仅是表现,更多的是可以让你注意力更集中)。
3、听要结合写和思考。纯粹的听很容易懈怠,能记住的点也很少,所以一定要学会快速的整理记忆。
4、如果你因为种种原因,出现了那些似懂非懂、不懂的知识,课上或者课后一定要花时间去弄懂。不然问题只会越积越多,最后就只能等着拥抱那“不三不四”的考试分数了。
其次,要学会记忆:
1、要学会整合知识点。把需要学习的信息、掌握的知识分类,做成思维导图或知识点卡片,会让你的大脑、思维条理清醒,方便记忆、温习、掌握。同时,要学会把新知识和已学知识联系起来,不断糅合、完善你的知识体系。这样能够促进理解,加深记忆。
2、合理用脑。所谓合理,一是要交替复习不同性质的课程,如文理交叉,历史与地理交叉,这可使大脑皮层的不同部位轮流兴奋与抑制,有利于记忆能力的增强与开发;二是在最佳时间识记,一般应安排在早晨、晚上临睡前,具体根据自己的记忆高峰期来选择。
3、借助高效工具。速读记忆是一种高效的阅读学习方法,其训练原理就在于激活“脑、眼”潜能,培养形成眼脑直映式的阅读学习方式,主要练习提升阅读速度、注意力、记忆力、理解力、思维力等方面。掌握之后,在阅读文章、材料的时候可以快速的提取重点,促进整理归纳分析,提高理解和记忆效率;同时很快的阅读速度,还可以节约大量的时间,游刃有余的做其它事情。具体学习可以参考《精英特全脑速读记忆训练软件》。
学习思维导图,思维导图是一种将放射性思考具体化的方法,也是高效整理,促进理解和记忆的方法。不仅在记忆上可以让你大脑里的资料系统化、图像化,还可以帮助你思维分析问题,统筹规划。不过,要学好思维导图,做到灵活运用可不是一件简单的事,需要花费很多时间的。前面说的“精英特全脑速读记忆训练软件”中也有关于思维导图的练习和方法讲解,可以参考。
最后,要学会总结:
一是要总结考试成绩,通过总结学会正确地看待分数。只有正确看待分数,才不会被分数蒙住你的双眼,而专注于学习的过程,专注于蕴藏在分数背后的秘密。二是要总结考试得失,从中找出成败原因,这是考后总结的中心任务。学习当然贵在努力过程,但分数毕竟是知识和技能水平的象征之一,努力过程是否合理也常常会在分数上体现出来。三是要总结、整理错题,收集错题,做出对应的一些解题思路(不解要知道这题怎么解,还有知道这一类型的题要怎么解)。四是要通过总结,确定下阶段的努力方向。
‘柒’ web课程里面会学习到哪几种框架呢
这里整理了一份系统全面的web前端学习路线,框架的相关内容在第三阶段,希望可以帮到你~
第一阶段:专业核心基础
阶段目标:
1. 熟练掌握HTML5、CSS3、Less、Sass、响应书布局、移动端开发。
2. 熟练运用HTML+CSS特性完成页面布局。
4. 熟练应用CSS3技术,动画、弹性盒模型设计。
5. 熟练完成移动端页面的设计。
6. 熟练运用所学知识仿制任意Web网站。
7. 能综合运用所学知识完成网页设计实战。
知识点:
1、Web前端开发环境,HTML常用标签,表单元素,Table布局,CSS样式表,DIV+CSS布局。熟练运用HTML和CSS样式属性完成页面的布局和美化,能够仿制任意网站的前端页面实现。
2、CSS3选择器、伪类、过渡、变换、动画、字体图标、弹性盒模型、响应式布局、移动端。熟练运用CSS3来开发网页、熟练开发移动端,整理网页开发技巧。
3、预编译css技术:less、sass基础知识、以及插件的运用、BootStrap源码分析。能够熟练使用 less、sass完成项目开发,深入了解BootStrap。
4、使用HTML、CSS、LESS、SASS等技术完成网页项目实战。通过项目掌握第一阶段、css的内容、完成PC端页面设计和移动端页面设计。
第二阶段:Web后台技术
阶段目标:
1. 了解JavaScript的发展历史、掌握Node环境搭建及npm使用。
2. 熟练掌握JavaScript的基本数据类型和变量的概念。
3. 熟练掌握JavaScript中的运算符使用。
4. 深入理解分之结构语句和循环语句。
5. 熟练使用数组来完成各种练习。
6.熟悉es6的语法、熟练掌握JavaScript面向对象编程。
7.DOM和BOM实战练习和H5新特性和协议的学习。
知识点:
1、软件开发流程、算法、变量、数据类型、分之语句、循环语句、数组和函数。熟练运用JavaScript的知识完成各种练习。
2、JavaScript面向对象基础、异常处理机制、常见对象api,js的兼容性、ES6新特性。熟练掌握JavaScript面向对象的开发以及掌握es6中的重要内容。
3、BOM操作和DOM操作。熟练使用BOM的各种对象、熟练操作DOM的对象。
4、h5相关api、canvas、ajax、数据模拟、touch事件、mockjs。熟练使用所学知识来完成网站项目开发。
第三阶段:数据库和框架实战
阶段目标:
1. 综合运用Web前端技术进行页面布局与美化。
2. 综合运用Web前端开发框架进行Web系统开发。
3. 熟练掌握Mysql、Mongodb数据库的发开。
4. 熟练掌握vue.js、webpack、elementui等前端框技术。
5. 熟练运用Node.js开发后台应用程序。
6. 对Restful,Ajax,JSON,开发过程有深入的理解,掌握git的基本技能。
知识点:
1、数据库知识,范式,MySQL配置,命令,建库建表,数据的增删改查,mongodb数据库。深入理解数据库管理系统通用知识及MySQL数据库的使用与管理,为Node.js后台开发打下坚实基础。
2、模块系统,函数,路由,全局对象,文件系统,请求处理,Web模块,Express框架,MySQL数据库处理,RestfulAPI,文件上传等。熟练运用Node.js运行环境和后台开发框架完成Web系统的后台开发。
3、vue的组件、生命周期、路由、组件、前端工程化、webpack、elementui框架。Vue.js框架的基本使用有清晰的理解,能够运用Vue.js完成基础前端开发、熟练运用Vue.js框架的高级功能完成Web前端开发和组件开发,对MVVM模式有深刻理解。
4、需求分析,数据库设计,后台开发,使用vue、node完成pc和移动端整站开发。于Node.js+Vue.js+Webpack+Mysql+Mongodb+Git,实现整站项目完整功能并上线发布。
第四阶段:移动端和微信实战
阶段目标:
1.熟练掌握React.js框架,熟练使用React.js完成开发。
2.掌握移动端开发原理,理解原生开发和混合开发。
3.熟练使用react-native和Flutter框架完成移动端开发。
4.掌握微信小程序以及了解支付宝小程序的开发。
5.完成大型电商项目开发。
知识点:
1、React面向组件编程、表单数据、组件通信、监听、声明周期、路由、Rex基本概念。练使用react完成项目开发、掌握Rex中的异步解决方案Saga。
2、react-native、开发工具、视图与渲染、api操作、Flutter环境搭建、路由、ListView组件、网络请求、打包。练掌握react-native和Flutter框架,并分别使用react-native和Flutter分别能开发移动端项目。
3、微信小程序基本介绍、开发工具、视图与渲染、api操作、支付宝小程序的入门和api学习。掌握微信小程序开发了解支付宝小程序。
4、大型购物网站实战,整个项目前后端分离开发;整个项目分为四部分:PC端网页、移动端APP、小程序、后台管理。团队协作开发,使用git进行版本控制。目期间可以扩展Three.js 、TypeScript。
‘捌’ UI设计都需要学什么
UI设计师技抄能一:熟练设计技巧袭,用户界面设计主要包含图形设计、用户体验设计和应用程序开发几个方面。UI设计师首先需要具备基本的UI设计技巧,既要懂设计,又要懂技术。
UI设计师技能二:UI设计师必须掌握前端开发的知识,包括HTML、CSS和JavaScript,以及Photoshop、图形设计以及代码编写的能力。
UI设计师技能三:设计理念强,UI设计师必须在产品功能和视觉元素间找到平衡,既要满足产品的功能需求,又要尽量美观。
单纯只掌握ps,对于UI设计是不够用的。
(8)课程开发的三个阶段扩展阅读:
UI设计(或称界面设计)是指对软件的人机交互、操作逻辑、界面美观的整体设计。UI设计分为实体UI和虚拟UI,互联网说的UI设计是虚拟UI,UI即User Interface(用户界面)的简称。
好的UI设计不仅是让软件变得有个性有品位,还要让软件的操作变得舒适简单、自由,充分体现软件的定位和特点。
‘玖’ 孩子三岁半了,想给他选择一个幼儿逻辑思维或者是多元智能脑力开发的课程,有哪位吉林市的家长给点建议
这位家长,你好! 孩子的思维发展是分阶段的。如果孩子还没有发展一定的思维阶段,再大量的训练,也不可能得到质的突破。 三岁多的孩子,处于前运算阶段,简单的说就是还没有发育到进行逻辑运算思维能力的阶段。思维特点是认知过于简单和静止。以形象思维和直观反射为主要思考方式,所以应重视孩子的形象思维训练和运动反射训练。多看图画,听音乐,让他讲故事,平时玩玩一些简单投掷,串珠子,跳跃运动就可以了。 这个阶段孩子思维的局限性有下面三个特点: 1自我中心:说话,回答问题时经常喜欢自说自话。看一个玩具时,站在自己的位置,想象不出从另一个位置看它,是什么样子。 2特征扩大:看一个玩具或者人,只记住最大的特征忽视其他特点。 3静止判断:推理,运算时候,往往答案是最后出现的静止的状态和事物。 因为,每个孩子的发展有快有慢,也许你的孩子思维发展比一般的孩子要快,你也可以从简单的日常生活训练孩子的逻辑思维就,比如,教孩子换位思考,完整的看一个图片各个位置,数珠子,看大小,火车跑的快等游戏。 关于多元智能脑力开发或者逻辑思维训练课程,你当地的各大早教机构,情商训练机构都应该有这方面的课程。如何选择?最好的方法是去免费试听!看看老师对孩子的态度,看看教育机构的教学内容,问问参加过家长的口碑等。 给你几个教育领域比较的老师,可以参考他们的教育理念 林格和皇甫军伟——中国养成教育网,养树养根,养人养心。 董进宇——亲子关系,发明了家长可以套用的“教育公式”。 周宏——赏识教育,利用“人人渴望赞美”激发孩子的动力。 王东华——《发现母亲》母亲手里有开发孩子潜能的金钥匙。 尹建莉和孔屏——儿童心理咨询师,发现孩子成长的动力。 雷京魁——亲子关系,开展父母效能培训《父母执照》。 余世维——人才培训,揭示成为未来企业精英的成长规律。 张健柏——今日学堂校长,批判当今中国教育的现状,自办学堂。 杨东平——教育公共政策、教育公平研究者。可敬的“教育愤青” 侯成山——性格分析领域权威,解决家庭婚姻,亲子沟通等困惑。
‘拾’ 大数据培训学校学哪些内容
以下介绍的课程主要针对零基础大数据工程师每个阶段进行通俗易懂简易介绍,方面大家更好的了解大数据学习课程。课程框架是科多大数据的零基础大数据工程师课程。
一、 第一阶段:静态网页基础(HTML+CSS)
1. 难易程度:一颗星
2. 课时量(技术知识点+阶段项目任务+综合能力)
3. 主要技术包括:常用标签、CSS常见布局、样式、定位等、静态页面的设计制作方式等
4. 描述如下:
从技术层面来说,该阶段使用的技术代码很简单、易于学习、方便理解。从后期课程层来说,因为我们重点是大数据,但前期需要锻炼编程技术与思维。经过我们多年开发和授课的项目经理分析,满足这两点,目前市场上最好理解和掌握的技术是J2EE,但J2EE又离不开页面技术。所以第一阶段我们的重点是页面技术。采用市场上主流的HTMl+CSS。
二、 第二阶段:JavaSE+JavaWeb
1. 难易程度:两颗星
2. 课时量(技术知识点+阶段项目任务+综合能力)
3. 主要技术包括:java基础语法、java面向对象(类、对象、封装、继承、多态、抽象类、接口、常见类、内部类、常见修饰符等)、异常、 *** 、文件、IO、MYSQL(基本SQL语句操作、多表查询、子查询、存储过程、事务、分布式事务)JDBC、线程、反射、Socket编程、枚举、泛型、设计模式
4. 描述如下:
称为Java基础,由浅入深的技术点、真实商业项目模块分析、多种存储方式的设计
与实现。该阶段是前四个阶段最最重要的阶段,因为后面所有阶段的都要基于此阶段,也是学习大数据紧密度最高的阶段。本阶段将第一次接触团队开发、产出具有前后台(第一阶段技术+第二阶段的技术综合应用)的真实项目。
三、 第三阶段:前端框架
1. 难易程序:两星
2. 课时量(技术知识点+阶段项目任务+综合能力):64课时
3. 主要技术包括:Java、Jquery、注解反射一起使用,XML以及XML解析、解析dom4j、jxab、jdk8.0新特性、SVN、Maven、easyui
4. 描述如下:
前两个阶段的基础上化静为动,可以实现让我们网页内容更加的丰富,当然如果从市场人员层面来说,有专业的前端设计人员,我们设计本阶段的目标在于前端的技术可以更直观的锻炼人的思维和设计能力。同时我们也将第二阶段的高级特性融入到本阶段。使学习者更上一层楼。
四、 第四阶段:企业级开发框架
1. 难易程序:三颗星
2. 课时量(技术知识点+阶段项目任务+综合能力)
3. 主要技术包括:Hibernate、Spring、SpringMVC、log4j slf4j 整合、myBatis、struts2、Shiro、redis、流程引擎activity, 爬虫技术nutch,lucene,webServiceCXF、Tomcat集群和热备、MySQL读写分离
4. 描述如下:
如果将整个JAVA课程比作一个糕点店,那前面三个阶段可以做出一个武大郎烧饼(因为是纯手工-太麻烦),而学习框架是可以开一个星巴克(高科技设备-省时省力)。从J2EE开发工程师的任职要求来说,该阶段所用到的技术是必须掌握,而我们所授的课程是高于市场(市场上主流三大框架,我们进行七大框架技术传授)、而且有真实的商业项目驱动。需求文档、概要设计、详细设计、源码测试、部署、安装手册等都会进行讲解。
五、 第五阶段: 初识大数据
1. 难易程度:三颗星
2. 课时量(技术知识点+阶段项目任务+综合能力)
3. 主要技术包括:大数据前篇(什么是大数据,应用场景,如何学习大数据库,虚拟机概念和安装等)、Linux常见命令(文件管理、系统管理、磁盘管理)、Linux Shell编程(SHELL变量、循环控制、应用)、Hadoop入门(Hadoop组成、单机版环境、目录结构、HDFS界面、MR界面、简单的SHELL、java访问hadoop)、HDFS(简介、SHELL、IDEA开发工具使用、全分布式集群搭建)、MapRece应用(中间计算过程、Java操作MapRece、程序运行、日志监控)、Hadoop高级应用(YARN框架介绍、配置项与优化、CDH简介、环境搭建)、扩展(MAP 端优化,COMBINER 使用方法见,TOP K,SQOOP导出,其它虚拟机VM的快照,权限管理命令,AWK 与 SED命令)
4. 描述如下:
该阶段设计是为了让新人能够对大数据有一个相对的大概念怎么相对呢?在前置课程JAVA的学习过后能够理解程序在单机的电脑上是如何运行的。现在,大数据呢?大数据是将程序运行在大规模机器的集群中处理。大数据当然是要处理数据,所以同样,数据的存储从单机存储变为多机器大规模的集群存储。
(你问我什么是集群?好,我有一大锅饭,我一个人可以吃完,但是要很久,现在我叫大家一起吃。一个人的时候叫人,人多了呢? 是不是叫人群啊!)
那么大数据可以初略的分为: 大数据存储和大数据处理所以在这个阶段中呢,我们课程设计了大数据的标准:HADOOP大数据的运行呢并不是在咋们经常使用的WINDOWS 7或者W10上面,而是现在使用最广泛的系统:LINUX。
六、 第六阶段:大数据数据库
1. 难易程度:四颗星
2. 课时量(技术知识点+阶段项目任务+综合能力)
3. 主要技术包括:Hive入门(Hive简介、Hive使用场景、环境搭建、架构说明、工作机制)、Hive Shell编程(建表、查询语句、分区与分桶、索引管理和视图)、Hive高级应用(DISTINCT实现、groupby、join、sql转化原理、java编程、配置和优化)、hbase入门、Hbase SHELL编程(DDL、DML、Java操作建表、查询、压缩、过滤器)、细说Hbase模块(REGION、HREGION SERVER、HMASTER、ZOOKEEPER简介、ZOOKEEPER配置、Hbase与Zookeeper集成)、HBASE高级特性(读写流程、数据模型、模式设计读写热点、优化与配置)
4. 描述如下:
该阶段设计是为了让大家在理解大数据如何处理大规模的数据的同时。简化咋们的编写程序时间,同时提高读取速度。
怎么简化呢?在第一阶段中,如果需要进行复杂的业务关联与数据挖掘,自行编写MR程序是非常繁杂的。所以在这一阶段中我们引入了HIVE,大数据中的数据仓库。这里有一个关键字,数据仓库。我知道你要问我,所以我先说,数据仓库呢用来做数据挖掘分析的,通常是一个超大的数据中心,存储这些数据的呢,一般为ORACLE,DB2,等大型数据库,这些数据库通常用作实时的在线业务。
总之,要基于数据仓库分析数据呢速度是相对较慢的。但是方便在于只要熟悉SQL,学习起来相对简单,而HIVE呢就是这样一种工具,基于大数据的SQL查询工具,这一阶段呢还包括HBASE,它为大数据里面的数据库。纳闷了,不是学了一种叫做HIVE的数据“仓库”了么?HIVE是基于MR的所以查询起来相当慢,HBASE呢基于大数据可以做到实时的数据查询。一个主分析,另一个主查询
七、 第七阶段:实时数据采集
1. 难易程序:四颗星
2. 课时量(技术知识点+阶段项目任务+综合能力)
3. 主要技术包括:Flume日志采集,KAFKA入门(消息队列、应用场景、集群搭建)、KAFKA详解(分区、主题、接受者、发送者、与ZOOKEEPER集成、Shell开发、Shell调试)、KAFKA高级使用(java开发、主要配置、优化项目)、数据可视化(图形与图表介绍、CHARTS工具分类、柱状图与饼图、3D图与地图)、STORM入门(设计思想、应用场景、处理过程、集群安装)、STROM开发(STROM MVN开发、编写STORM本地程序)、STORM进阶(java开发、主要配置、优化项目)、KAFKA异步发送与批量发送时效,KAFKA全局消息有序,STORM多并发优化
4. 描述如下:
前面的阶段数据来源是基于已经存在的大规模数据集来做的,数据处理与分析过后的结果是存在一定延时的,通常处理的数据为前一天的数据。
举例场景:网站防盗链,客户账户异常,实时征信,遇到这些场景基于前一天的数据分析出来过后呢?是否太晚了。所以在本阶段中我们引入了实时的数据采集与分析。主要包括了:FLUME实时数据采集,采集的来源支持非常广泛,KAFKA数据数据接收与发送,STORM实时数据处理,数据处理秒级别
八、 第八阶段:SPARK数据分析
1. 难易程序:五颗星
2. 课时量(技术知识点+阶段项目任务+综合能力)
3. 主要技术包括:SCALA入门(数据类型、运算符、控制语句、基础函数)、SCALA进阶(数据结构、类、对象、特质、模式匹配、正则表达式)、SCALA高级使用(高阶函数、科里函数、偏函数、尾迭代、自带高阶函数等)、SPARK入门(环境搭建、基础结构、运行模式)、Spark数据集与编程模型、SPARK SQL、SPARK 进阶(DATA FRAME、DATASET、SPARK STREAMING原理、SPARK STREAMING支持源、集成KAFKA与SOCKET、编程模型)、SPARK高级编程(Spark-GraphX、Spark-Mllib机器学习)、SPARK高级应用(系统架构、主要配置和性能优化、故障与阶段恢复)、SPARK ML KMEANS算法,SCALA 隐式转化高级特性
4. 描述如下:
同样先说前面的阶段,主要是第一阶段。HADOOP呢在分析速度上基于MR的大规模数据集相对来说还是挺慢的,包括机器学习,人工智能等。而且不适合做迭代计算。SPARK呢在分析上是作为MR的替代产品,怎么替代呢? 先说他们的运行机制,HADOOP基于磁盘存储分析,而SPARK基于内存分析。我这么说你可能不懂,再形象一点,就像你要坐火车从北京到上海,MR就是绿皮火车,而SPARK是高铁或者磁悬浮。而SPARK呢是基于SCALA语言开发的,当然对SCALA支持最好,所以课程中先学习SCALA开发语言。
在科多大数据课程的设计方面,市面上的职位要求技术,基本全覆盖。而且并不是单纯的为了覆盖职位要求,而是本身课程从前到后就是一个完整的大数据项目流程,一环扣一环。
比如从历史数据的存储,分析(HADOOP,HIVE,HBASE),到实时的数据存储(FLUME,KAFKA),分析(STORM,SPARK),这些在真实的项目中都是相互依赖存在的。
‘叁’ android上的socket通信的开源框架有哪些
请去360手机助手下载android学习手册里面有例子、源码和文档
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。目前正在使用 MINA 的软件包括有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、Openfire 等等。
以上是从网上找到的mina框架简单介绍。
由于正在开发的项目中要求加入及时通信功能(游戏方面),所以在网上找了好几种框架,像openfire、tigase等都是基于Xmpp协议开发的优秀框架。但这些侧重于消息的推送,不适合游戏上的简单交互。所以后来找到了mina这个框架,顺手搭建起来。接下来就是这几天学习的总结了,文章里面没有涉及到逻辑层的方面,只是简单的实现即时通信功能。资源下载我会放在文章的最后面。
一、相关资源下载
(1)Apache官方网站:http://mina.apache.org/downloads.html
(2) Android用jar包(包括官网的资源,我会一律放在网络网盘下)
二、Mina简单配置
服务器端一共要用到四个jar包,包括一个日志包。将他们放在lib中,并加载进去
分别为mina-core-2.0.7.jar slf4j-log4j12-1.7.6.jar slf4j-api-1.7.6.jar log4j-1.2.14.jar(日志管理包)
如果要使用日志的jar包,则要在项目的src目录下新建一个log4j.properties,添加内容如下:
log4j.rootCategory=INFO, stdout , R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
1log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
log4j.logger.com.neusoft=DEBUG
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
log4j.logger.org.displaytag=ERROR
log4j.logger.org.springframework=DEBUG
log4j.logger.com.ibatis.db=WARN
log4j.logger.org.apache.velocity=FATAL
log4j.logger.com.canoo.webtest=WARN
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
log4j.logger.org.hibernate=DEBUG
log4j.logger.org.logicalcobwebs=WARN
log4j.rootCategory=INFO, stdout , R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
1log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
log4j.logger.com.neusoft=DEBUG
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
log4j.logger.org.displaytag=ERROR
log4j.logger.org.springframework=DEBUG
log4j.logger.com.ibatis.db=WARN
log4j.logger.org.apache.velocity=FATAL
log4j.logger.com.canoo.webtest=WARN
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
log4j.logger.org.hibernate=DEBUG
log4j.logger.org.logicalcobwebs=WARN
Android客户端要加入的jar包:mina-core-2.0.7.jar slf4j-android-1.6.1-RC1.jar两个jar包(可能直接使用上面的jar包也会行,我没试过~)
二、Mina服务端
我这边使用的是mina2.0版本,所以可能与mina1.0的版本有所不同。那么首先在服务器端创建开始
新建一个Demo1Server.class文件,里面包含着程序的入口,端口号,Acceptor连接.
1 public class Demo1Server {
2 //日志类的实现
3 private static Logger logger = Logger.getLogger(Demo1Server.class);
4 //端口号,要求客户端与服务器端一致
5 private static int PORT = 4444;
6
7 public static void main(String[] args){
8 IoAcceptor acceptor = null;
9 try{
10 //创建一个非阻塞的server端的Socket
11 acceptor = new NioSocketAcceptor();
12 //设置过滤器(使用mina提供的文本换行符编解码器)
13 acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())));
14 //自定义的编解码器
15 //acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new CharsetCodecFactory()));
16 //设置读取数据的换从区大小
17 acceptor.getSessionConfig().setReadBufferSize(2048);
18 //读写通道10秒内无操作进入空闲状态
19 acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
20 //为接收器设置管理服务
21 acceptor.setHandler(new Demo1ServerHandler());
22 //绑定端口
23 acceptor.bind(new InetSocketAddress(PORT));
24
25 logger.info("服务器启动成功... 端口号未:"+PORT);
26
27 }catch(Exception e){
28 logger.error("服务器启动异常...",e);
29 e.printStackTrace();
30 }
31 }
32
33 }
一个很简单的程序入口吧,简单的说就是在服务器上设置一个消息接收器,让它监听从端口传过来的消息并进行处理。那么接下来我们看看怎么进行消息处理。
新建一个消息处理类,或者说是是业务逻辑处理器——Demo1ServerHandler,它继承了IoHandlerAdapter类,它默认覆盖了七个方法,而我们主要使用messageReceived()。
public class Demo1ServerHandler extends IoHandlerAdapter {
public static Logger logger = Logger.getLogger(Demo1ServerHandler.class);
//从端口接受消息,会响应此方法来对消息进行处理
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String msg = message.toString();
if("exit".equals(msg)){
//如果客户端发来exit,则关闭该连接
session.close(true);
}
//向客户端发送消息
Date date = new Date();
session.write(date);
logger.info("服务器接受消息成功...");
super.messageReceived(session, message);
}
//向客服端发送消息后会调用此方法
@Override
public void messageSent(IoSession session, Object message) throws Exception {
logger.info("服务器发送消息成功...");
super.messageSent(session, message);
}
//关闭与客户端的连接时会调用此方法
@Override
public void sessionClosed(IoSession session) throws Exception {
logger.info("服务器与客户端断开连接...");
super.sessionClosed(session);
}
//服务器与客户端创建连接
@Override
public void sessionCreated(IoSession session) throws Exception {
logger.info("服务器与客户端创建连接...");
super.sessionCreated(session);
}
//服务器与客户端连接打开
@Override
public void sessionOpened(IoSession session) throws Exception {
logger.info("服务器与客户端连接打开...");
super.sessionOpened(session);
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
logger.info("服务器进入空闲状态...");
super.sessionIdle(session, status);
}
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
logger.info("服务器发送异常...");
super.exceptionCaught(session, cause);
}
}
很直白的一段程序,相当于将服务器分成了七个状态,而每个状态都有自己的一套逻辑处理方案。
至此,一个最简单的Mina服务器框架就搭好了,我们可以使用电脑上的telnet命令来测试一下服务器能否使用
cmd控制台—>telnet <ip地址> <端口号> 如我的服务器ip地为192.168.1.10 那我就写telnet 192.168.1.10 4444 .此时我们可以看到输出日志为
此时连接已经创建,我们在输入信息服务器就会对信息进行处理,并给出相应的应答。
(telnet的用法不知道的可以自行网络)
三、Mina客户端(Android端)
服务器简单搭建完毕,那么开始在Android端是配置服务器吧。同样的不要忘记加载jar包, 由于Android自带了Logout,所以就不使用Mina的日志包了。
由于接受消息会阻塞Android的进程,所以我把它开在子线程中(同时将其放在Service中,让其在后台运行)
1 public class MinaThread extends Thread {
2
3 private IoSession session = null;
4
5 @Override
6 public void run() {
7 // TODO Auto-generated method stub
8 Log.d("TEST","客户端链接开始...");
9 IoConnector connector = new NioSocketConnector();
10 //设置链接超时时间
11 connector.setConnectTimeoutMillis(30000);
12 //添加过滤器
13 //connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new CharsetCodecFactory()));
14 connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())));
15 connector.setHandler(new MinaClientHandler(minaService));
16
17 try{
18 ConnectFuture future = connector.connect(new InetSocketAddress(ConstantUtil.WEB_MATCH_PATH,ConstantUtil.WEB_MATCH_PORT));//创建链接
19 future.awaitUninterruptibly();// 等待连接创建完成
20 session = future.getSession();//获得session
21 session.write("start");
22 }catch (Exception e){
23 Log.d("TEST","客户端链接异常...");
24 }
25 session.getCloseFuture().awaitUninterruptibly();//等待连接断开
26 Log.d("TEST","客户端断开...");
27 connector.dispose();
28 super.run();
29 }
30
31 }
不知道你们注意到了没,客户端的代码与服务器端的极其相似,不同的是服务器是创建NioSocketAcceptor对象,而客户端是创建NioSocketConnect对象。当然同样需要添加编码解码过滤器和业务逻辑过滤器。
业务逻辑过滤器代码:
1 public class MinaClientHandler extends IoHandlerAdapter{
2
3
4 @Override
5 public void exceptionCaught(IoSession session, Throwable cause)
6 throws Exception {
7 Log.d("TEST","客户端发生异常");
8 super.exceptionCaught(session, cause);
9 }
10
11 @Override
12 public void messageReceived(IoSession session, Object message)
13 throws Exception {
14 String msg = message.toString();
15 Log.d("TEST","客户端接收到的信息为:" + msg);
16 super.messageReceived(session, message);
17 }
18
19 @Override
20 public void messageSent(IoSession session, Object message) throws Exception {
21 // TODO Auto-generated method stub
22 super.messageSent(session, message);
23 }
24 }
方法功能与服务器端一样。测试这里就不做了。可以的话自己写个Demo效果更好
四、Mina的更多功能
拿到所有客户端Session
Collection<IoSession> sessions = session.getService().getManagedSessions().values();
自定义编码解码器,可以对消息进行预处理。要继承ProtocolEncoder和ProtocolDecode类。
数据对象的传递
这些功能不便放在这里讲了,可能我会以后再找机会另开一篇来讲述这些功能~,大家可以浏览结尾处的参考文章来加深对mina的理解。
在我认为,熟悉和快速使用一个新的的框架可以看出一个程序员的水平,同样及时总结和归纳自己学到的新知识也是一个好的程序员该具有的习惯。那么Mina的简单搭建就到这里为止了,希望对大家有所帮助
‘肆’ 嗯那个嗯地图上的坐标一般都画在地图的什么位置
众所周知地球是一个不规则椭圆体,GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定。 基准面是利用特定椭球体对特定地区地球表面的逼近,因此每个国家或地区均有各自的基准面。基准面是在椭球体基础上建立的,椭球体可以对应多个基准面,而基准面只能对应一个椭球体。 意思就是无论是谷歌地图、搜搜地图还是高德地图、网络地图区别只是针对不同的大地地理坐标系标准制作的经纬度,不存在准不准的问题,大家都是准的只是参照物或者说是标准不一样。
谷歌地图采用的是WGS84地理坐标系(中国范围除外),谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系,网络采用的是BD09坐标系,而设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,为什么不统一用WGS84地理坐标系这就是国家地理测绘总局对于出版地图的要求,出版地图必须符合GCJ02坐标系标准了,也就是国家规定不能直接使用WGS84地理坐标系。所以定位大家感觉不准确很多又叫出版地图为火星地图其实只是坐标系不一样而已。
这就是为什么设备采集的经纬度在地图上显示的时候经常有很大的偏差,远远超出民用GPS 10米偏移量的技术规范,于是我们就有了谷歌地图纠偏 腾讯搜搜纠偏 混合地图纠偏 网络谷歌互转存在的价值。
那如何对谷歌地图纠偏、搜搜soso地图纠偏或者对网络地图纠偏呢,如果用算法目前没有太好的算法直接转换,所以大家采用的都是比对的方法吧地球划分成若干个小块找到地图的偏差量记录下来,然后根据任意经纬度找寻最接近的偏差量加上偏差量就可以实现不同地图之间的经纬度转换。现在有0.01度纠偏经纬度信息,可以提供任意格式,可以直接把经纬度偏移量调整回来。
网络地图纠偏信息包含中国海域一共29,699,997条纠偏数据,谷歌地图只包含中国陆地一共12,597,551条纠偏数据,基站数据移动和联通的共340万数据。
移动联通基站数据字段说明: MCC:国家 (460是中国) MNC:0是移动,1是联通 LAC:小区号 CELL:基站号 LNG:纬度 LAT:经度 O_LNG:纠偏后的纬度(用于google地图显示) O_LAT:纠偏后的经度(用于google地图显示)PRECISION:基站半径范围单位米 ADDRESS:详细地址中文描述 REGION:省份 CITY:城市 COUNTRY:国家
以上摘自http://www.haotsp.com/
之所以说这个是因为前些日子做的项目有这样的一个需求,展示的是网络地图,然后想利用网络地图上取到经纬度的点,用高德地图的api逆地理编码获取当前位置的文字信息。一开始以为全球的经纬度都是确定值的嘛,大家共用的。其实不然,由于每个地图使用的坐标系不同,我伟大的祖国为了保密需要,规定不能直接使用WGS84地理坐标系,于是应用于中国的各个地图就会在原来坐标的基础上经过一个加密的加偏算法,把加偏过的坐标呈现给你,而不同地图的加偏算法又是不一样的,有的甚至是多次加偏。也就是说同样你是在人民广场,用网络地图和谷歌地图取到的坐标值是不一样的。
经研究发现,网络地图的坐标系为BD09,高德地图坐标为GCJ02,这样就存在不同坐标系的坐标之间转换的问题了,查api吧,然后又发现无论网络地图还是高德地图,api列表里都没有提这个事情。但是上网一查,还是发现了他们都有个隐藏类:CoordinateConvert,但是这个类只提供了转向他们自己坐标系的方法,比如说:
1
2
3
4
5
6
7
8
9
10
11
//网络api
CoordinateConvert.fromGcjToBai(GeoPoint geoPoint);
//从gcj02坐标系转到bd09坐标系
CoordinateConvert.fromWgs84ToBai(GeoPoint geoPoint);
//从wgs84坐标系转到bd09坐标系
//高德api
//从wgs84坐标系转到gcj02坐标系
CoordinateConvert.fromGpsToAMap(double arg0, double arg1);
CoordinateConvert.fromSeveralGpsToAMap(String arg0);
CoordinateConvert.fromSeveralGpsToAMap(String arg0);
而因为我是展示的网络地图,有要获取网络地图上的中心点的经纬度然后在作为参数调用高德地图api的需求,而网络地图并未提供bd09坐标系转出的api(也可以理解,因为如果这样的话,相当于没加密啊,自己将加密算法写出来,再给个解密的api不是有毛病么,不能不把国家的规定放眼里嘛,网络也说有深层次的需求要以公司名义给他们发邮件什么的,但是一般来说一个小安卓项目客户不会那么兴师动众,而且据群众反映,邮件的效果也不怎么好),所以一时做了罢。
但是柳暗花明又一村了,虽然无法将网络地图上的任意点转为gcj02坐标系的点,但是网络地图还是在他们的定位api里提供了方法,使得应用在获取当前位置的时候,可以获取以“gcj02”为坐标系的点:
1
2
LocationClientOption option = new LocationClientOption();
option.setCoorType("gcj02");//设置坐标类型
这样以来,就可以用高德地图获取位置信息了,虽然说只能有当前位置这一个点是取成gcj02坐标的点是比较囧的o(╯□╰)o ,还有,别忘了,取得的当前点要转化成bd09的坐标系之后,再展示在网络地图上,不然是会有偏差的。
另外比较一下网络地图和高德地图(因为害怕谷歌地图在大陆地区的服务受限问题等等,所以没考虑使用谷歌地图,也就没怎么研究)。
网络地图在页面上的展示方面做的还是很好的,包括页面的缩放,信息的标注等等,相比之下高德地图就会在某些安卓版本的某些机器上出现在放缩的时候地图信息展示的不够清晰不够明确的情况,而且在定位时,网络的地位相对准确,因为我们公司的网络服务器不在公司办公所在地,所以高德地图有时候定位就定位到服务器的地址去了,网络从我使用至今还没出现过这样的错误。
但是网络地图在poi搜索这一块,在我看来是相对薄弱的,网络地图的poi搜索在不输入关键字的时候,是不能做模糊搜索的,而且也不能根据类型搜索(比如仅搜索饮食,搜索学校之类的),而在高德地图里这些就做到了。而且在逆地理编码时,高德地图获取的结果是相对比网络地图更丰富的。
点击阅读全文
打开CSDN APP,看更多技术内容
ios - 网络地图和高德地图坐标的区别
一、在地图开发中,我们一般解除的三种坐标系 1.WGS-84坐标系(原始坐标系),它是国际GPS记录仪记录下来的经纬度.Google和高德地图定位的经纬度都是基于WGS-84坐标系的,但是国内是不允许直接使用WGS-84坐标系标注的,必须经过加密后才能使用; 2.GCJ-02坐标系,又名"火星坐标系",是我国国测局独创的坐标系,是基于WGS-84基础上进行加密形成的新坐标系.在国内,是必须至少...
继续访问
(转)关于网络地图和高德地图,关于地图坐标系
原文作者: 深白Andy 原文地址: [url]http://my.eoe.cn/gueryue/archive/15390.html[/url] 众所周知地球是一个不规则椭圆体,GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定。 基准面是利用特定椭球体对特定地区地球表面的逼近,因此每个国家或地区均有各自的基准面。基准面是在椭球体基础上...
继续访问
最新发布 地图--WGS84 高德坐标 网络坐标的相互转换(好用推荐)
地图 WGS84 高德坐标 网络坐标的相互转换
继续访问
Android 高德网络地图坐标的区别
1.高德、搜搜、google中国皆采用gcj02坐标系,即国测局提供的坐标系 google全球采用的是wgs84坐标系(国际经纬度坐标系) 网络使用bd09坐标系,实际上是对gcj02的基础上再次的加偏(非线性加偏),无法通过算法来脱偏,只有通过加偏数据库来进行,所以现实中无法对网络或高德直接的坐标进行算法转换,只有通过各自自身的脱偏接口方能够实现,而且网络或高德的转换api都被隐藏起
继续访问
网络地图和高德地图坐标系的互相转换
原文地址:http://blog.csdn.net/a13570320979/article/details/51366355 一。在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的的经纬度(国外)都是基于WGS-84坐标系的;但是在国内是不允许直接用WGS84坐标系标注的,必须经过加密后才能使用; 2.GCJ-02坐标系,又名“火星坐标系”,是我国国测局独创
继续访问
坐标体系
第一种分类: 1、 GPS,WGS-84,原始坐标体系。一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标。很可惜,在中国,任何一个地图产品都不允许使用GPS坐标,据说是为了保密。GPS坐标形式如图,度分秒形式的经纬度: 2、 GCJ-02,国测局02年发布的坐标体系。又称“火星坐标”。在中国,必须至少使用GCJ-02的坐标体系。比如谷歌,腾讯,高德都在用这个坐标
继续访问
常用椭球参数整理
常用椭球参数的整理
继续访问
高德地图AMap.convertFrom()转码问题
代码如上,因为取到的数据是gps的,需要转码为高德地图,通过高德提供的AMap.convertFrom()进行转码,测试1400条数据,运行5s等待时间过长,请问是否有其他的是实现方式?...
继续访问
广州坐标系转换大地2000_如何将网络坐标转换为国家2000坐标系?
登录软件官网:www.gissaas.com 下载并安装 GIS数据转换器。注册会员即可免费使用。 2. 添加待转换的文件点击”添加“按钮,选择一个或多个待转换的文件,软件支持批量转换。软件支持DWG、DXF、SHP、MDB、KML、KMZ、GPX、GeoJson、EXCEL、TXT、CSV、GeoTiff、Image(img)、Bitmap(bmp)、Png格式的数据文件。 3. 选择导出格...
继续访问
aMap略记
地图的使用
继续访问
网络地图/高德地图大批量坐标转换结果返回顺序问题
转载请注明出处:https://www.cnblogs.com/Joanna-Yan/p/9894712.html 项目需求:设备采集到的GPS坐标信息,需提供实时、历史轨迹的查看功能。这些点坐标除经纬度信息外还携带了其它的信息,比如:速度、方向、解状态等。原始的GPS坐标需要转换成网络地图/高德地图坐标后才能在相应的地图上显示,否则存在较大的位置偏差。 前端人员在高德地图上显示多个点坐...
继续访问
leaflet网络坐标转天地图坐标(bd09转大地2000)(leaflet篇.56)
听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <meta name="referrer" content="no-referrer"/> <title>Histo
继续访问
高德地图坐标系(GCJ-02)与网络坐标系(BD-09)互相转换
一:代码段(高德转网络) @Slf4j public class CoordinatesConvertUtil { private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0; /** * 高德地图坐标转化为网络坐标 * @param cordinatesVo */ ...
继续访问
热门推荐 高德,网络,Google地图定位偏移以及坐标系转换
一。在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的的经纬度(国外)都是基于WGS-84坐标系的;但是在国内是不允许直接用WGS84坐标系标注的,必须经过加密后才能使用; 2.GCJ-02坐标系,又名“火星坐标系”,是我国国测局独创的坐标体系,由WG
继续访问
关于高德网络地图坐标系问题
目前市面上比较常见的互联网地图的坐标系主要有这样几种:GCJ-02、BD-09、WGS84、CGCS2000。 WGS84,原始坐标体系。主要有Google Earth在用,。 GCJ-02是由国测局制定的互联网地图坐标系,又叫火星坐标,最常见的互联网地图坐标系,在中国能见到的互联网 地图基本都是这种坐标了,比如高德地图、腾讯地图、网络地图、Google地图(中国范围)。 BD-09是网络地...
继续访问
使用js实现网络地图与高德地图经纬度的转换
在uniapp开发app中,因为后台使用的是网络地图获取的经纬度,但是我是使用的uniapp自带的获取当前经纬度的api,获取的是高德的经纬度,这就导致,两个不同地图在获取经纬度,显示地图信息的时候会有偏差。不同地图之间经纬度的差异,请参考:https://blog.csdn.net/weixin_33503186/article/details/116098472。
继续访问
调用高德地图API,因为异步导致后续数据获取不到,只需一个Promise即可
最近在做项目里需要用到高德地图相关操作,调用高德地图转换坐标系 AMap.convertFrom(),因为异步导致后续数据获取不到。最后异步请求解决了该问题。 //Promise.then处理异步api new Promise((resolve, reject) => { let elsePoint1 = [37.1455,130.56556]; // 将其他坐标系值转换为高德坐标系值
继续访问
如何将影像地图转换为国家2000坐标系
一、影像获取 在图新地球中可以免费下载(不用邀请,永久免费,非试用)各类影像和地图,这里我们以谷歌地图为例进行下载。 下载结果如下: 二、坐标系转换 这里借助Global Mapper(下文简称gm)进行投影坐标系的转换,我们先将刚才下载的tif格式的影像拖入gm: 这里我们可以看到右下角显示的投影坐标为wgs84-web墨卡托投影: 在菜单栏中,我们打开工具菜单下的配置功能: 点开进入投影配置界面: 这里因为gm的参数库中缺少国家2000坐标系的信息,所以无法直接通
继续访问
(转)高德网络坐标系转换方法
(转)高德网络坐标系转换方法 原文: http://blog.sina.com.cn/s/blog_bd048c480101e27i.html 在开始这个题目之前,先给大家再次扫扫盲,扫的不是坐标系统的盲,而是我们国家所使用的坐标系统。大家都知道,美国GPS使用的是WGS84的坐标系统,以经纬度的形式来表示地球平面上的某一个位置,这应该是国际共识。但在我国,出于国家安全考虑,国...
继续访问
网络地图坐标系和高德坐标系的相互转换
GCJ-02是由中国国家测绘局制订的地理信息系统的坐标系统。它是一种对经纬度数据的加密算法,即加入随机的偏差。国内出版的各种地图系统(包括电子形式),出于国家安全考虑,必须至少采用GCJ-02对地理位置进行首次加密。国内腾讯地图和高德地图都采用了GCJ-02火星坐标系。 BD-09坐标系: 网络坐标系,也就是在GCJ-02的基础上,进行了BD-09二次加密措施生成的一种坐标系。 //BD-09(网络)坐标转换成