『壹』 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(網路)坐標轉換成