Commit 54a0b4cce0c7e24dfcb404957399fa27d21f8e07

Authored by 潘钊
1 parent 50daf0ec

gps test

src/main/java/com/bsth/controller/test/GpsTestController.java 0 → 100644
  1 +package com.bsth.controller.test;
  2 +
  3 +import java.util.HashMap;
  4 +import java.util.List;
  5 +import java.util.Map;
  6 +
  7 +import org.springframework.beans.factory.annotation.Autowired;
  8 +import org.springframework.web.bind.annotation.RequestMapping;
  9 +import org.springframework.web.bind.annotation.RequestParam;
  10 +import org.springframework.web.bind.annotation.RestController;
  11 +
  12 +import com.bsth.service.StationRouteService;
  13 +
  14 +@RestController
  15 +@RequestMapping("/test/gps")
  16 +public class GpsTestController {
  17 +
  18 + @Autowired
  19 + StationRouteService stationRouteService;
  20 +
  21 + @RequestMapping(value = "/route")
  22 + public List<Map<String, Object>> findRouteByLineId(@RequestParam int xl,@RequestParam int directions){
  23 + Map<String, Object> map = new HashMap<>();
  24 + map.put("line.id_eq", xl);
  25 + map.put("directions_eq", directions);
  26 +
  27 + List<Map<String, Object>> list = stationRouteService.findPoints(map);
  28 + return list;
  29 + }
  30 +}
src/main/java/com/bsth/util/TransGPS.java 0 → 100644
  1 +package com.bsth.util;
  2 +
  3 +import java.lang.Math;
  4 +
  5 +public class TransGPS {
  6 +
  7 + public static class Location {
  8 + private double lat;
  9 + private double lng;
  10 +
  11 + public double getLat() {
  12 + return lat;
  13 + }
  14 +
  15 + public void setLat(double lat) {
  16 + this.lat = lat;
  17 + }
  18 +
  19 + public double getLng() {
  20 + return lng;
  21 + }
  22 +
  23 + public void setLng(double lng) {
  24 + this.lng = lng;
  25 + }
  26 +
  27 + }
  28 +
  29 + public static Location LocationMake(double lng, double lat) {
  30 + Location loc = new Location();
  31 + loc.lng = lng;
  32 + loc.lat = lat;
  33 + return loc;
  34 + }
  35 +
  36 + static double pi = 3.14159265358979324;
  37 +
  38 + static double a = 6378245.0;
  39 + static double ee = 0.00669342162296594323;
  40 +
  41 + public static int outOfChina(double lat, double lon) {
  42 + if (lon < 72.004 || lon > 137.8347)
  43 + return 1;
  44 + if (lat < 0.8293 || lat > 55.8271)
  45 + return 1;
  46 + return 0;
  47 + }
  48 +
  49 + public static double transformLat(double x, double y) {
  50 + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(x > 0 ? x : -x);
  51 + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
  52 + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
  53 + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
  54 + return ret;
  55 + }
  56 +
  57 + public static double transformLon(double x, double y) {
  58 + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(x > 0 ? x : -x);
  59 + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
  60 + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
  61 + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;
  62 + return ret;
  63 + }
  64 +
  65 + public static Location transformFromWGSToGCJ(Location wgLoc) {
  66 + Location mgLoc = new Location();
  67 + if (1 == outOfChina(wgLoc.lat, wgLoc.lng)) {
  68 + mgLoc = wgLoc;
  69 + return mgLoc;
  70 + }
  71 + double dLat = transformLat(wgLoc.lng - 105.0, wgLoc.lat - 35.0);
  72 + double dLon = transformLon(wgLoc.lng - 105.0, wgLoc.lat - 35.0);
  73 + double radLat = wgLoc.lat / 180.0 * pi;
  74 + double magic = Math.sin(radLat);
  75 + magic = 1 - ee * magic * magic;
  76 + double sqrtMagic = Math.sqrt(magic);
  77 + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
  78 + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
  79 + mgLoc.lat = wgLoc.lat + dLat;
  80 + mgLoc.lng = wgLoc.lng + dLon;
  81 +
  82 + return mgLoc;
  83 + }
  84 +
  85 + Location transformFromGCJToWGS(Location gcLoc) {
  86 + Location wgLoc = new Location();
  87 + wgLoc.lat = gcLoc.lat;
  88 + wgLoc.lng = gcLoc.lng;
  89 +
  90 + Location currGcLoc = new Location();
  91 + Location dLoc = new Location();
  92 + ;
  93 + while (true) {
  94 + currGcLoc = transformFromWGSToGCJ(wgLoc);
  95 + dLoc.lat = gcLoc.lat - currGcLoc.lat;
  96 + dLoc.lng = gcLoc.lng - currGcLoc.lng;
  97 + if (Math.abs(dLoc.lat) < 1e-7 && Math.abs(dLoc.lng) < 1e-7) {
  98 + return wgLoc;
  99 + }
  100 + wgLoc.lat += dLoc.lat;
  101 + wgLoc.lng += dLoc.lng;
  102 + }
  103 +
  104 + }
  105 +
  106 + static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
  107 +
  108 + public static Location bd_encrypt(Location gcLoc) {
  109 + double x = gcLoc.lng, y = gcLoc.lat;
  110 + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
  111 + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
  112 + return LocationMake(z * Math.cos(theta) + 0.0065, z * Math.sin(theta) + 0.006);
  113 + }
  114 +
  115 + public static Location bd_decrypt(Location bdLoc) {
  116 + double x = bdLoc.lng - 0.0065, y = bdLoc.lat - 0.006;
  117 + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
  118 + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
  119 + return LocationMake(z * Math.cos(theta), z * Math.sin(theta));
  120 + }
  121 +}
src/main/java/com/bsth/vehicle/gpsdata/service/GpsDataService.java 0 → 100644
  1 +package com.bsth.vehicle.gpsdata.service;
  2 +
  3 +import java.util.List;
  4 +import java.util.Map;
  5 +
  6 +public interface GpsDataService {
  7 +
  8 + List<Map<String, Object>> history(String device, Long startTime, Long endTime, int directions);
  9 +}
src/main/java/com/bsth/vehicle/gpsdata/service/GpsDataServiceImpl.java 0 → 100644
  1 +package com.bsth.vehicle.gpsdata.service;
  2 +
  3 +import java.sql.Connection;
  4 +import java.sql.PreparedStatement;
  5 +import java.sql.ResultSet;
  6 +import java.util.ArrayList;
  7 +import java.util.Calendar;
  8 +import java.util.Date;
  9 +import java.util.HashMap;
  10 +import java.util.List;
  11 +import java.util.Map;
  12 +
  13 +import org.springframework.stereotype.Service;
  14 +
  15 +import com.bsth.util.TransGPS;
  16 +import com.bsth.util.TransGPS.Location;
  17 +import com.bsth.util.db.DBUtils_MS;
  18 +
  19 +@Service
  20 +public class GpsDataServiceImpl implements GpsDataService{
  21 +
  22 + //历史gps查询
  23 + @Override
  24 + public List<Map<String, Object>> history(String device, Long startTime, Long endTime, int directions) {
  25 + Calendar sCal = Calendar.getInstance();
  26 + sCal.setTime(new Date(/*startTime*/));
  27 +
  28 + Calendar eCal = Calendar.getInstance();
  29 + eCal.setTime(new Date(endTime));
  30 +
  31 + int dayOfYear = sCal.get(Calendar.DAY_OF_YEAR);
  32 + /*if(dayOfYear != eCal.get(Calendar.DAY_OF_YEAR)){
  33 + System.out.println("暂时不支持跨天查询...");
  34 + return null;
  35 + }*/
  36 +
  37 + String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE from BSTH_C_GPS_INFO where days_year=? and device_id=? and ts > ? and ts < ?";
  38 + Connection conn = null;
  39 + PreparedStatement ps = null;
  40 + ResultSet rs = null;
  41 + List<Map<String, Object>> list = new ArrayList<>();
  42 + Map<String, Object> map = null;
  43 + try{
  44 + conn = DBUtils_MS.getConnection();
  45 + ps = conn.prepareStatement(sql);
  46 + ps.setInt(1, dayOfYear);
  47 + ps.setString(2, device);
  48 + ps.setLong(3, startTime);
  49 + ps.setLong(4, endTime);
  50 +
  51 + rs = ps.executeQuery();
  52 + Float lon, lat;
  53 + Location location;
  54 + int upDown;
  55 + while (rs.next()) {
  56 + upDown = getUpOrDown(rs.getLong("SERVICE_STATE"));
  57 + if(upDown != directions)
  58 + continue;
  59 +
  60 + //to 百度坐标
  61 + lon = rs.getFloat("LON");
  62 + lat = rs.getFloat("lat");
  63 + location = TransGPS.LocationMake(lon, lat);
  64 + location = TransGPS.bd_encrypt(TransGPS.transformFromWGSToGCJ(location));
  65 +
  66 + map = new HashMap<>();
  67 + map.put("device", rs.getString("DEVICE_ID"));
  68 + map.put("lon", location.getLng());
  69 + map.put("lat", location.getLat());
  70 + map.put("ts", rs.getLong("ts"));
  71 + map.put("inout_stop", rs.getInt("INOUT_STOP"));
  72 + //上下行
  73 + map.put("upDown", upDown);
  74 + list.add(map);
  75 + }
  76 + }catch(Exception e){
  77 + e.printStackTrace();
  78 + }finally {
  79 + DBUtils_MS.close(rs, ps, conn);
  80 + }
  81 + return list;
  82 + }
  83 +
  84 +
  85 +
  86 + /**王通 2016/6/29 9:23:24
  87 + * 获取车辆线路上下行
  88 + * @return -1无效 0上行 1下行
  89 + */
  90 + public static byte getUpOrDown(long serviceState) {
  91 + if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000
  92 + || (serviceState & 0x01000000) == 0x01000000
  93 + || (serviceState & 0x08000000) == 0x08000000) return -1;
  94 + return (byte)(((serviceState & 0x10000000) == 0x10000000) ? 1 : 0);
  95 + }
  96 +}
src/main/resources/static/gpsTest/test.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html>
  3 +<head>
  4 +<meta charset="UTF-8">
  5 +<title>GPS点测试</title>
  6 +<meta name=”renderer” content=”webkit”>
  7 +<meta http-equiv=”X-UA-Compatible” content=”IE=Edge,chrome=1″ >
  8 +
  9 +<meta http-equiv="Pragma" content="no-cache">
  10 +<meta http-equiv="Cache-control" content="no-cache">
  11 +<meta http-equiv="Cache" content="no-cache">
  12 +<head>
  13 +<!-- select2 下拉框插件 -->
  14 +<link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css" rel="stylesheet" type="text/css" />
  15 +<style type="text/css">
  16 +html,body{
  17 + height: 100%;
  18 + overflow: hidden;
  19 +}
  20 +#mapContainer{
  21 + width: 100%;
  22 + height: calc(100% - 93px);
  23 +}
  24 +
  25 +form{
  26 + padding: 25px;
  27 +}
  28 +
  29 +form .item{
  30 + display: inline-block;
  31 +}
  32 +
  33 +form .item input{
  34 + height: 26px;
  35 + width: 110px;
  36 +}
  37 +
  38 +form .item select{
  39 + height: 32px;
  40 +}
  41 +
  42 +
  43 +</style>
  44 +</head>
  45 +<body>
  46 +<form action="">
  47 + <div class="item">
  48 + 线路:
  49 + <select name="xl" style="width: 150px;">
  50 + </select>
  51 + </div>
  52 + <div class="item">
  53 + 方向:
  54 + <select name="directions" style="width: 70px;">
  55 + <option value="0">上行</option>
  56 + <option value="1">下行</option>
  57 + </select>
  58 + </div>
  59 + <div class="item">
  60 + 设备号:
  61 + <input name="device" value="059L1931"/>
  62 + </div>
  63 + <div class="item">
  64 + 开始时间戳:
  65 + <input type="number" name="startTime" value="1461365400000"/>
  66 + </div>
  67 + <div class="item">
  68 + 结束时间戳:
  69 + <input type="number" name="endTime" value="1461370800000"/>
  70 + </div>
  71 + <div class="item">
  72 + <input type="button" value="查询GPS轨迹" onclick="searchGps()">
  73 + </div>
  74 + <div class="item">
  75 + <input type="button" value="开启测距" onclick="myDis.open();" style="width: 75px"/>
  76 + <input type="button" value="关闭测距" onclick="myDis.close()" style="width: 75px"/>
  77 +
  78 + </div>
  79 +
  80 + <div class="item">
  81 + <a target="_blank" href="http://tool.chinaz.com/Tools/unixtime.aspx" style="font-size: 12px;color: red;">毫秒时间戳转换</a>
  82 + </div>
  83 +</form>
  84 +
  85 +<div id="mapContainer"></div>
  86 +<script src="/assets/plugins/pinyin.js"></script>
  87 +<script src="/metronic_v4.5.4/plugins/jquery.min.js" ></script>
  88 +<script src="/assets/plugins/jquery.serializejson.js" ></script>
  89 +<script src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT" ></script>
  90 +<script type="text/javascript" src="http://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>
  91 +<!-- moment.js 日期处理类库 -->
  92 +<script src="/assets/plugins/moment-with-locales.js"></script>
  93 +<!-- select2 下拉框 -->
  94 +<script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js" ></script>
  95 +<script>
  96 +
  97 + var inMark = 'data:image/png;base64,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AAAldEVYdGRhdGU6bW9kaWZ5ADIwMTMtMTEtMjBUMjI6NDc6MTErMDg6MDAou1syAAAATnRFWHRzb2Z0d2FyZQBJbWFnZU1hZ2ljayA2LjguOC0xMCBRMTYgeDg2XzY0IDIwMTUtMDctMTkgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmcFDJw1AAAAGHRFWHRUaHVtYjo6RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAF3RFWHRUaHVtYjo6SW1hZ2U6OkhlaWdodAA1Mwmpb+QAAAAWdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgAMjgpleAmAAAAGXRFWHRUaHVtYjo6TWltZXR5cGUAaW1hZ2UvcG5nP7JWTgAAABd0RVh0VGh1bWI6Ok1UaW1lADEzODQ5NTg4MzEXUMEwAAAAE3RFWHRUaHVtYjo6U2l6ZQA0LjUzS0JC/AyPiAAAAFp0RVh0VGh1bWI6OlVSSQBmaWxlOi8vL2hvbWUvd3d3cm9vdC93d3cuZWFzeWljb24ubmV0L2Nkbi1pbWcuZWFzeWljb24uY24vc3JjLzExMjk3LzExMjk3NzIucG5nqXNeUQAAAABJRU5ErkJggg==';
  98 + var outMark = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAvCAMAAAC18jgTAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABO1BMVEUAAAAiu4ggv40gvowgvowgvosgvowfvo0jv44hv40gvosgvowcxo4fvowgvowdvYogv4whvo0gvowhvYwrqoAhv4wnxIkgv4wA//8gvIshvosgvowhvIshvowgvowrv5Ugv4ohvosgvowhv4wgv4whvYwXuYsgvowgvowiu4gfvo0zzJkhvowktpIgvowgv40hvo0gv4wgvowAqqogvosgvowjv4sgvowivIskv4khvowgvYsiu44hvosfvI0hv4sgvYofvowgvowgv40gv4wjuYsgvowhvowfvIsgvYsgvo0hvoxAv4Agv4wgvowgvoshvo0mv4whvowgvowfwo8gv4wgv40duokAAAAfvYsgvYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAYjGUYj2kAAAAAAAAAAAAgvoz///9v2GMAAAAAZ3RSTlMAD1eZyOr4miSc950Jivoj0i/pfAarDaoBWH3JLuv5DDDL0ZunbQvu/h6CBbQO5jhOkNwDtfAsz0Qc42EtdUGLYKKOwsYW7/s5f7nMBCj9N40U8/YZh48aAaOmAggNERMWF0lLGBkanzLKGQAAAAFiS0dEaMts9CIAAAGZSURBVDjLfZRnW8IwFIUvyN6FUlCx4AZxKw7cA/eeKKNUwfz/f2ChZNAmnC+U+54m9548KQCRwznicns8bpfX6QC7fP4AIgoEfRYcCkfQgCLhEMujMWRTLEq55EYcuSXyPpcbjv4aoRgSKGb2EUZChXvzRcSGSHfaIP0fT0iyLCXitOI38qP5JBWzKSVFE3OAk/I0HiudJMVR8JL1FRqMQgb3ggs/Jthox3B1HIg3wxoyuDoBKn6UWYOMqyp4uIYsNfC3yNEtJoc3OQXT3DFJmDNMUCkaFI1yFubmqcMedb4AsMAeVqaYzbGHtWj4l5bFx51f6a64mhca/OaeayK+3m9qY5PPS1tk7G0eV3doMLtlToN7bLT7JZvhYPByHqoWfmS93ceD/CRtNcApy89kG4fiOeXlCucLAoULzC+vgCvSxjUIdGPy2zuR4b53jx8eQagn5gi5en5B6PVtiAHeEfoYxqHiUT9FrNrT17f5a8O1eqOptXT951fXW1qzUa9ZXtfanU7nry/jsa1VuSsYtjZ3BdIDFin/A1AVNdoKDyAYAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA3LTI1VDIxOjUwOjQzKzA4OjAw6BLjdwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0xMS0yMFQyMjo0NzoxMyswODowML8kShsAAABOdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuOC44LTEwIFExNiB4ODZfNjQgMjAxNS0wNy0xOSBodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9yZwUMnDUAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAXdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADQ3F9+avAAAABZ0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAAzMtBbOHkAAAAZdEVYdFRodW1iOjpNaW1ldHlwZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6TVRpbWUAMTM4NDk1ODgzM/leoBwAAAATdEVYdFRodW1iOjpTaXplADQuMDFLQkKe5chzAAAAWnRFWHRUaHVtYjo6VVJJAGZpbGU6Ly8vaG9tZS93d3dyb290L3d3dy5lYXN5aWNvbi5uZXQvY2RuLWltZy5lYXN5aWNvbi5jbi9zcmMvMTEyOTcvMTEyOTc4Ni5wbmetpUpEAAAAAElFTkSuQmCC';
  99 +
  100 + var inOuts = [outMark, inMark];
  101 +
  102 + var map = new BMap.Map("mapContainer");
  103 + map.centerAndZoom(new BMap.Point(121.544336, 31.221315), 15);
  104 + map.enableScrollWheelZoom();
  105 + //中心点和缩放级别
  106 + map.setCurrentCity("上海");
  107 + var myDis = new BMapLib.DistanceTool(map);
  108 +
  109 +
  110 + $.get('/line/all', function(rs){
  111 + var data = [];
  112 + $.each(rs, function(){
  113 + data.push({id: this.id, text: this.name});
  114 + });
  115 +
  116 + initPinYinSelect2('select[name=xl]', data);
  117 + });
  118 +
  119 + function searchGps(){
  120 + var params = $('form').serializeJSON();
  121 + //查询线路路由站点
  122 + $.get('/test/gps/route', params, function(rs){
  123 + var array = rs[0].children[0].children
  124 + ,coords,circle, cdsArray, points, polygon;
  125 + //画出站点
  126 + $.each(array, function(){
  127 + if(this.stationShapesType === 'r'){
  128 + //画圆
  129 + coords = this.stationBJwpoints.split(' ');
  130 + circle = new BMap.Circle(new BMap.Point(coords[0], coords[1]),this.stationRadius);
  131 + circle.setStrokeColor('red');
  132 + circle.setStrokeWeight(2)
  133 + map.addOverlay(circle);
  134 + }
  135 + else if(this.stationShapesType === 'd'){
  136 + //画多边形
  137 + coords = this.stationBPolygonGrid.substring(9, this.stationBPolygonGrid.length - 2);
  138 + cdsArray = coords.split(',');
  139 + points = [];
  140 + $.each(cdsArray, function(){
  141 + coords = this.split(' ');
  142 + points.push(new BMap.Point(coords[0], coords[1]));
  143 + });
  144 +
  145 + polygon = new BMap.Polygon(points, {strokeColor:"red", strokeWeight:2, strokeOpacity:0.5});
  146 + map.addOverlay(polygon);
  147 + }
  148 + });
  149 + coords = array[array.length / 2].stationBJwpoints.split(' ');
  150 + map.setCenter(new BMap.Point(coords[0], coords[1]))
  151 + });
  152 +
  153 + //查询gps点
  154 + $.get('/gps/history/' + params.device, params, function(gpsArray){
  155 + console.log(gpsArray);
  156 + var marker, label, point, state, text;
  157 + $.each(gpsArray, function(){
  158 + point = new BMap.Point(this.lon, this.lat);
  159 + marker = new BMap.Marker(point);
  160 + state = this.inout_stop;
  161 + //inOuts
  162 + if(state == 0 || state == 1){
  163 + text = state == 0?'出':'进';
  164 + marker.setIcon(new BMap.Icon(inOuts[this.inout_stop], new BMap.Size(25,25)));
  165 + label = new BMap.Label(moment(this.ts).format('HH:mm') + ' -'+text, {position: point, offset: new BMap.Size(-5,-18)});
  166 + marker.setLabel(label);
  167 + }
  168 + map.addOverlay(marker);
  169 + });
  170 + });
  171 + }
  172 +
  173 +
  174 + /**
  175 + * 支持拼音搜索的select2
  176 + * @param selector
  177 + * @param data
  178 + */
  179 + function initPinYinSelect2(selector, data, cb){
  180 +
  181 + $.each(data, function(){
  182 + this.fullChars = pinyin.getFullChars(this.text).toUpperCase();
  183 + this.camelChars = pinyin.getCamelChars(this.text);
  184 + });
  185 +
  186 + $.fn.select2.amd.require(['select2/compat/matcher'], function (oldMatcher) {
  187 + $(selector).select2({
  188 + data: data,
  189 + matcher: oldMatcher(function(term, text, item){
  190 + var upTerm = term.toUpperCase();
  191 + if(item.fullChars.indexOf(upTerm) != -1
  192 + || item.camelChars.indexOf(upTerm) != -1)
  193 + return true;
  194 +
  195 + return text.indexOf(term) != -1;
  196 + })
  197 + });
  198 +
  199 + cb && cb();
  200 + });
  201 +
  202 + return $(selector);
  203 + }
  204 +</script>
  205 +</body>
  206 +</html>