Commit ce14e4e11861000b2d7f330a6d833850a862858f

Authored by 潘钊
1 parent e3b04d2f

update...

src/main/java/com/bsth/controller/geo_data/GeoDataController.java
1 1 package com.bsth.controller.geo_data;
2 2  
  3 +import com.bsth.entity.geo_data.GeoRoad;
3 4 import com.bsth.entity.geo_data.GeoStation;
4 5 import com.bsth.service.geo_data.GeoDataService;
5 6 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -51,4 +52,9 @@ public class GeoDataController {
51 52 public Map<String, Object> destroyStation(GeoStation station){
52 53 return geoDataService.destroyStation(station);
53 54 }
  55 +
  56 + @RequestMapping(value = "updateRoadInfo",method = RequestMethod.POST)
  57 + public Map<String, Object> updateRoadInfo(GeoRoad road){
  58 + return geoDataService.updateRoadInfo(road);
  59 + }
54 60 }
55 61 \ No newline at end of file
... ...
src/main/java/com/bsth/service/geo_data/GeoDataService.java
1 1 package com.bsth.service.geo_data;
2 2  
  3 +import com.bsth.entity.geo_data.GeoRoad;
3 4 import com.bsth.entity.geo_data.GeoStation;
4 5  
5 6 import java.util.Map;
... ... @@ -22,4 +23,6 @@ public interface GeoDataService {
22 23 Map<String,Object> addNewStationRoute(String lineCode, int upDown,int versions, String stationName, Float lat, Float lng, int prevRouteId);
23 24  
24 25 Map<String,Object> destroyStation(GeoStation station);
  26 +
  27 + Map<String,Object> updateRoadInfo(GeoRoad road);
25 28 }
... ...
src/main/java/com/bsth/service/geo_data/impl/GeoDataServiceImpl.java
... ... @@ -334,6 +334,32 @@ public class GeoDataServiceImpl implements GeoDataService {
334 334 return rs;
335 335 }
336 336  
  337 + @Override
  338 + public Map<String, Object> updateRoadInfo(GeoRoad road) {
  339 + Map<String, Object> rs = new HashMap<>();
  340 +
  341 + try {
  342 + //坐标转换
  343 + String bdPolyline = "LINESTRING(" + road.getGsectionVector() + ")";
  344 + String wgsPolyline = "LINESTRING(" + bdPolygon2Wgs(road.getGsectionVector()) + ")";
  345 +
  346 + String sql = "update bsth_c_section set section_name=?, croses_road=?, bsection_vector=ST_GeomFromText('" + bdPolyline + "'),gsection_vector=ST_GeomFromText('" + wgsPolyline + "'),update_date=sysdate() where section_code=?";
  347 +
  348 + int rsCount = jdbcTemplate.update(sql, road.getSectionName(), road.getCrosesRoad(), road.getSectionCode());
  349 +
  350 + //从数据库里重新查询对象
  351 + if (rsCount > 0) {
  352 + rs.put("road", findOneRoad(road.getId()));
  353 + rs.put("status", ResponseCode.SUCCESS);
  354 + }
  355 + } catch (Exception e) {
  356 + logger.error("", e);
  357 + rs.put("status", ResponseCode.ERROR);
  358 + rs.put("msg", "服务器出现异常");
  359 + }
  360 + return rs;
  361 + }
  362 +
337 363  
338 364 /**
339 365 * 根据路由ID 获取站点
... ... @@ -352,6 +378,16 @@ public class GeoDataServiceImpl implements GeoDataService {
352 378 return s;
353 379 }
354 380  
  381 + private GeoRoad findOneRoad(int id){
  382 + String sql = "SELECT t1.*, t2.section_name,t2.croses_road,ST_AsText (t2.gsection_vector) AS gsection_vector FROM (SELECT id,sectionroute_code,directions,line_code,section_code,versions FROM bsth_c_ls_sectionroute WHERE id="+id+") t1 LEFT JOIN bsth_c_section t2 ON t1.section_code = t2.section_code";
  383 + List<GeoRoad> list = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(GeoRoad.class));
  384 +
  385 + for (GeoRoad road : list) {
  386 + road.setBdCoords(multiWgsToBd(road.getGsectionVector(), 11, 2));
  387 + }
  388 + return list.size() > 0 ?list.get(0):null;
  389 + }
  390 +
355 391 private String bdPolygon2Wgs(String bdPolygon) {
356 392 StringBuilder wgsPolygon = new StringBuilder();
357 393 List<String> list = Splitter.on(",").splitToList(bdPolygon);
... ...
src/main/resources/static/pages/base/geo_data_edit/css/mian.css
... ... @@ -479,4 +479,15 @@ ul.context-menu-list.station-route-ct-menu.context-menu-root {
479 479  
480 480 .add_station_search_point_wrap .buffer_edit_body .ct_row {
481 481 margin-top: 8px;
  482 +}
  483 +
  484 +.road_edit_panel{
  485 + position: absolute;
  486 + z-index: 999;
  487 + top: 10px;
  488 + left: calc(50% - 190px);
  489 + width: 380px;
  490 + background: #fff;
  491 + height: 120px;
  492 + box-shadow: 5px 5px 15px rgba(90, 90, 90, 0.48);
482 493 }
483 494 \ No newline at end of file
... ...
src/main/resources/static/pages/base/geo_data_edit/fragments/f_road_route.html
... ... @@ -35,4 +35,37 @@
35 35 </li>
36 36 </ul>
37 37 </script>
  38 +
  39 + <script id="geo_d_e_road_edit_panel-temp" type="text/html">
  40 + <div class="road_edit_panel uk-animation-slide-top-small">
  41 + <div class="buffer_edit_body" >
  42 + <h6 class="name">{{sectionName}} (路段编辑)</h6>
  43 + <form>
  44 + <input type="hidden" value="{{id}}" name="id">
  45 + <input type="hidden" value="{{sectionCode}}" name="sectionCode">
  46 +
  47 + <div class="ct_row">
  48 + <div class="uk-inline">
  49 + <span class="uk-form-icon uk-form-icon-flip" >路段名</span>
  50 + <input class="uk-input" name="sectionName" type="text" value="{{sectionName}}" >
  51 + </div>
  52 + <div class="uk-inline">
  53 + <span class="uk-form-icon uk-form-icon-flip" >交叉路</span>
  54 + <input class="uk-input" name="crosesRoad" type="text" value="{{crosesRoad}}" style="font-size: 13px;">
  55 + </div>
  56 + </div>
  57 +
  58 + <div class="ct_row">
  59 + <div class="uk-inline" >
  60 + <kbd>长度: <span></span> 米</kbd>
  61 + </div>
  62 + <div class="uk-inline btns">
  63 + <button class="uk-button uk-button-primary submit">确定</button>
  64 + <button class="uk-button uk-button-default cancel">取消</button>
  65 + </div>
  66 + </div>
  67 + </form>
  68 + </div>
  69 + </div>
  70 + </script>
38 71 </div>
39 72 \ No newline at end of file
... ...
src/main/resources/static/pages/base/geo_data_edit/js/map.js
... ... @@ -103,11 +103,12 @@ var gb_ct_map = function () {
103 103 map.addOverlay(polyline);
104 104  
105 105 polyline.addEventListener('mouseover', function () {
106   - this.setStrokeColor('#20bd26');
  106 + if (map_status != 1)
  107 + this.setStrokeColor('#20bd26');
107 108 });
108 109 polyline.addEventListener('mouseout', function () {
109   - if (this != road_win_show_p)
110   - this.setStrokeColor(color);
  110 + if (map_status != 1 && this != road_win_show_p)
  111 + this.setStrokeColor(updownColor(this.ct_data.directions));
111 112 });
112 113 polyline.addEventListener('click', function (e) {
113 114 if (map_status != 1)
... ... @@ -116,7 +117,7 @@ var gb_ct_map = function () {
116 117 _pLines.push(polyline);
117 118 });
118 119  
119   - roadPolylines.push(_pLines);
  120 + roadPolylines[routes[0].directions]= _pLines;
120 121 };
121 122  
122 123 var road_win_show_p;
... ... @@ -127,15 +128,19 @@ var gb_ct_map = function () {
127 128  
128 129 //close event
129 130 win.addEventListener('close', function (e) {
130   - p.setStrokeColor(p.ct_data.oldColor);
131   - gb_road_route.clearFocus();
132   - road_win_show_p = null;
  131 + if(map_status != 1) {
  132 + p.setStrokeColor(updownColor(p.ct_data.directions));
  133 + gb_road_route.clearFocus();
  134 + road_win_show_p = null;
  135 + }
133 136 });
134 137 //open event
135 138 win.addEventListener('open', function (e) {
136   - gb_road_route.focus(data);
137   - p.setStrokeColor('#20bd26');
138   - road_win_show_p = p;
  139 + if(map_status !=1){
  140 + gb_road_route.focus(data);
  141 + p.setStrokeColor('#20bd26');
  142 + road_win_show_p = p;
  143 + }
139 144 });
140 145  
141 146 map.openInfoWindow(win, point);
... ... @@ -287,18 +292,7 @@ var gb_ct_map = function () {
287 292 }
288 293 }
289 294  
290   - var cp = calcCenterPoint(p.ct_data.bdCoords);
291   - openRoadInfoWin(p, new BMap.Point(cp.longitude, cp.latitude));
292   - };
293   -
294   - var calcCenterPoint = function (coords) {
295   - var array = [], strs;
296   - for (var i = 0, item; item = coords[i++];) {
297   - strs = item.split(' ');
298   - array.push({latitude: strs[1], longitude: strs[0]});
299   - }
300   -
301   - return geolib.getCenter(array);
  295 + openRoadInfoWin(p, new BMap.Point(p.ct_data.cp.longitude, p.ct_data.cp.latitude));
302 296 };
303 297  
304 298 var exitEditBufferStatus = function (s) {
... ... @@ -651,6 +645,74 @@ var gb_ct_map = function () {
651 645 _renderStationMarket(gb_station_route.getData()[upDown]);
652 646 };
653 647  
  648 +
  649 + /**
  650 + * 进入路段编辑模式
  651 + * @param road
  652 + */
  653 + var editPolyline;
  654 + var start_edit_road= function (road) {
  655 + map.closeInfoWindow();//关闭infoWindow
  656 + map_status = 1;
  657 + gb_road_route.focus(road);
  658 +
  659 + //居中
  660 + console.log('road.cproad.cp', road.cp);
  661 + map.centerAndZoom(new BMap.Point(road.cp.longitude, road.cp.latitude), 20);
  662 +
  663 + //路段变色
  664 + var polyline = getRoadPolyline(road.sectionCode, road.directions);
  665 + polyline.setStrokeColor('#E91E63');
  666 +
  667 + editPolyline = polyline;
  668 + //路段可编辑
  669 + polyline.enableEditing();
  670 +
  671 + //lineupdate,计算长度 mouseup
  672 + gb_road_route.showPathLength(geolib.getPathLength(polyline.getPath()));
  673 + polyline.addEventListener('lineupdate', reCalcPathLength);
  674 + }
  675 +
  676 + /**
  677 + * 计算并显示路段长度
  678 + * @param p
  679 + */
  680 + var reCalcPathLength = function () {
  681 + var len = geolib.getPathLength(this.getPath());
  682 + gb_road_route.showPathLength(len);
  683 + };
  684 +
  685 + var getRoadPolyline = function (code, updown) {
  686 + var array = roadPolylines[updown],
  687 + polyline;
  688 + for (var i = 0, p; p = array[i++];) {
  689 + if (p.ct_data.sectionCode == code) {
  690 + polyline = p;
  691 + break;
  692 + }
  693 + }
  694 + return polyline;
  695 + };
  696 +
  697 + /**
  698 + * 退出路段编辑模式
  699 + */
  700 + var exitEditRoadStatus = function (road) {
  701 + map_status = 0;
  702 + $('.main_left_panel_m_layer').hide();
  703 + $('.road_edit_panel').remove();
  704 +
  705 + editPolyline.removeEventListener('lineupdate', reCalcPathLength);
  706 +
  707 + //polyline
  708 + var polyline = getRoadPolyline(road.sectionCode, road.directions);
  709 + polyline.disableEditing();
  710 + polyline.ct_data = road;
  711 + polyline.setStrokeColor(updownColor(road.directions));
  712 +
  713 + openRoadInfoWin(polyline, new BMap.Point(road.cp.longitude, road.cp.latitude));
  714 + };
  715 +
654 716 res_load_ep.emitLater('load_map');
655 717 return {
656 718 _render: _render,
... ... @@ -666,6 +728,9 @@ var gb_ct_map = function () {
666 728 getDrawPolygon: function () {
667 729 return editPolygon;
668 730 },
  731 + getDrawPolyline: function () {
  732 + return editPolyline;
  733 + },
669 734 updateDragRadius: updateDragRadius,
670 735 closeInfoWin: closeInfoWin,
671 736 showAddPointPanel: showAddPointPanel,
... ... @@ -675,6 +740,8 @@ var gb_ct_map = function () {
675 740 map.removeEventListener('dblclick', pickupPoint);
676 741 map.enableDoubleClickZoom();
677 742 },
678   - reDrawStation: reDrawStation
  743 + reDrawStation: reDrawStation,
  744 + edit_road: start_edit_road,
  745 + exitEditRoadStatus: exitEditRoadStatus
679 746 };
680 747 }();
681 748 \ No newline at end of file
... ...
src/main/resources/static/pages/base/geo_data_edit/js/road_route.js
... ... @@ -10,7 +10,6 @@ var gb_road_route = function () {
10 10 var ep = EventProxy.create("data", "temp", function (data, temp) {
11 11 road_maps = data;
12 12 temps = temp;
13   - console.log('roads', road_maps);
14 13  
15 14 //按顺序,名称分组
16 15 var ups = _group(road_maps[0]);
... ... @@ -29,6 +28,11 @@ var gb_road_route = function () {
29 28 rs.list.sort(function (a, b) {
30 29 return parseInt(a.sectionrouteCode) - parseInt(b.sectionrouteCode);
31 30 });
  31 + //计算路段中心点
  32 + //var cp = calcCenterPoint(p.ct_data.bdCoords);
  33 + $.each(rs.list, function () {
  34 + this.cp = calcCenterPoint(this.bdCoords);
  35 + });
32 36 ep.emit('data', gb_common.groupBy(rs.list, 'directions'));
33 37 });
34 38  
... ... @@ -69,6 +73,7 @@ var gb_road_route = function () {
69 73 };
70 74  
71 75 var focus = function (data) {
  76 + clearFocus();
72 77 //sectionCode
73 78 var elem = $('.up_down_route_list>li>.road_route .r_r_item a[data-code='+data.sectionCode+']');
74 79 elem = elem.parent();
... ... @@ -89,20 +94,42 @@ var gb_road_route = function () {
89 94 return elem.offset().top < wrap.height() + 122 && elem.offset().top > 122;
90 95 };
91 96  
  97 + /**
  98 + * 路段编辑
  99 + * @param road
  100 + */
  101 + var edit_road = function (road) {
  102 + $('.main_left_panel_m_layer').show();
  103 + //弹出编辑面板
  104 + var $editPanel = temps['geo_d_e_road_edit_panel-temp'](road);
  105 + $('body').append($editPanel);
  106 +
  107 + gb_ct_map.edit_road(road);
  108 + };
  109 +
  110 + var showPathLength = function (len) {
  111 + $('.road_edit_panel kbd>span').text(len);
  112 + };
  113 +
  114 + var realEditRoad;
  115 + var callbackHandler = {
  116 + edit: edit_road
  117 + };
92 118 //$('.up_down_route_list>li>.road_route .r_r_item a[data-code='+data.sectionCode+']')
93 119 $.contextMenu({
94 120 selector: '.up_down_route_list>li>.road_route .r_r_item a[data-code]',
95 121 className: 'station-route-ct-menu',
96 122 callback: function (key, options) {
97   - /*var aLink = options.$trigger;
  123 + var aLink = options.$trigger;
98 124 var code = aLink.data('code'),
99 125 updown = aLink.data('updown');
100   - var station = getStation(code, updown);
101   - realEditStation = station;
102   - callbackHandler[key] && callbackHandler[key](station);*/
  126 +
  127 + var road = getRoad(code, updown);
  128 + realEditRoad = road;
  129 + callbackHandler[key] && callbackHandler[key](road);
103 130 },
104 131 items: {
105   - 'edit_buffer': {
  132 + 'edit': {
106 133 name: '编辑'
107 134 },
108 135 'sep1': '---------',
... ... @@ -118,6 +145,39 @@ var gb_road_route = function () {
118 145 }
119 146 });
120 147  
  148 + var getRoad = function (code, updown) {
  149 + var array = road_maps[updown];
  150 + for(var i=0,r;r=array[i++];){
  151 + if(r.sectionCode==code)
  152 + return r;
  153 + }
  154 + return null;
  155 + };
  156 +
  157 + var calcCenterPoint = function (coords) {
  158 + var array = [], strs;
  159 + for (var i = 0, item; item = coords[i++];) {
  160 + strs = item.split(' ');
  161 + array.push({latitude: strs[1], longitude: strs[0]});
  162 + }
  163 +
  164 + return geolib.getCenter(array);
  165 + };
  166 +
  167 + var update = function (road) {
  168 + road.cp = calcCenterPoint(road.bdCoords);
  169 + var array = road_maps[road.directions];
  170 + for(var i=0,item; item=array[i++];){
  171 + if(item.sectionCode==road.sectionCode){
  172 + array.splice(i - 1, 1, road);
  173 + break;
  174 + }
  175 + }
  176 +
  177 + //重新渲染
  178 + var htmlStr = temps['geo_d_e_road_route-temp']({list: _group(array)});
  179 + $('.up_down_route_list>li:'+(road.directions==0?'first':'last')+'>.road_route').html(htmlStr);
  180 + };
121 181  
122 182 res_load_ep.emitLater('load_road_route');
123 183 return {
... ... @@ -128,6 +188,8 @@ var gb_road_route = function () {
128 188 return temps;
129 189 },
130 190 clearFocus: clearFocus,
131   - focus: focus
  191 + focus: focus,
  192 + showPathLength: showPathLength,
  193 + update: update
132 194 };
133 195 }();
134 196 \ No newline at end of file
... ...
src/main/resources/static/pages/base/geo_data_edit/js/station_route.js
... ... @@ -154,7 +154,7 @@ var gb_station_route = function () {
154 154 var is_duplication = function (name) {
155 155 var array = station_maps[getUpDown()];
156 156 for(var i=0, s; s=array[i++];){
157   - if(s.stationName==name)
  157 + if(s.stationName==$.trim(name))
158 158 return true;
159 159 }
160 160 return false;
... ...
src/main/resources/static/pages/base/geo_data_edit/js/submit.js
... ... @@ -66,6 +66,7 @@ var gb_data_submit = function () {
66 66 $(document).on('click', '.add_station_search_point_wrap .buffer_edit_body button.submit', function (e) {
67 67 var f = $(this).parents('form');
68 68 var data = f.serializeJSON();
  69 + data.stationName = $.trim(data.stationName);
69 70  
70 71 UIkit.modal.confirm('确定新增站点【'+data.stationName+'】?').then(function() {
71 72 data.lineCode = storage.getItem('geo_data_edit_line_code');
... ... @@ -88,6 +89,35 @@ var gb_data_submit = function () {
88 89 return false;
89 90 });
90 91  
  92 + /**
  93 + * 路段编辑提交
  94 + */
  95 + $(document).on('click', '.road_edit_panel .buffer_edit_body button.submit', function (e) {
  96 + var f = $(this).parents('form');
  97 + var data = f.serializeJSON();
  98 +
  99 + var polyline = gb_ct_map.getDrawPolyline();
  100 + var pos = polyline.getPath();
  101 + var gsectionVector = '';
  102 + for(var i=0,p;p=pos[i++];){
  103 + gsectionVector += (p.lng + " " + p.lat + ",");
  104 + }
  105 + data.gsectionVector = gsectionVector.substr(0, gsectionVector.length - 1);
  106 +
  107 + console.log('data', data);
  108 + UIkit.modal.confirm('确定保存编辑的【'+data.sectionName+'】?').then(function() {
  109 + show_run_text('正在保存...');
  110 +
  111 + gb_common.$post('/_geo_data/updateRoadInfo', data, function (rs) {
  112 + hide_run_text();
  113 + UIkit.notification("修改成功!", {status: 'success'});
  114 + gb_road_route.update(rs.road);
  115 +
  116 + gb_ct_map.exitEditRoadStatus(rs.road);
  117 + });
  118 + });
  119 + });
  120 +
91 121 var show_run_text = function (t) {
92 122 $('.text', $loadPanel).text(t);
93 123 $loadPanel.show();
... ...