Commit a45ae7db9e2c4fbedf6dde8df00448a00a51fd7c

Authored by youxiw2000
1 parent 8955189b

修复测点 百度地图生成线路

src/main/java/com/bsth/controller/StationController.java
@@ -89,7 +89,7 @@ public class StationController extends BaseController<Station, Integer> { @@ -89,7 +89,7 @@ public class StationController extends BaseController<Station, Integer> {
89 89
90 @RequestMapping(value="cacheSave" , method = RequestMethod.POST) 90 @RequestMapping(value="cacheSave" , method = RequestMethod.POST)
91 public Map<String, Object> cacheSave(@RequestParam Map<String, Object> map) { 91 public Map<String, Object> cacheSave(@RequestParam Map<String, Object> map) {
92 - return service.cacheSave(map); 92 + return service.cacheSave(map);
93 } 93 }
94 94
95 /** 95 /**
src/main/java/com/bsth/service/impl/StationServiceImpl.java
@@ -1487,6 +1487,8 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem @@ -1487,6 +1487,8 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem
1487 if (!pointsStr.equals("")) { 1487 if (!pointsStr.equals("")) {
1488 JSONArray pointsArray = JSONArray.parseArray(pointsStr); 1488 JSONArray pointsArray = JSONArray.parseArray(pointsStr);
1489 for (int p = 0; p < pointsArray.size(); p++) { 1489 for (int p = 0; p < pointsArray.size(); p++) {
  1490 + if(pointsArray.getJSONObject(p).get("lng") == null)
  1491 + continue;
1490 String pointsLngStr = pointsArray.getJSONObject(p).get("lng").toString(); 1492 String pointsLngStr = pointsArray.getJSONObject(p).get("lng").toString();
1491 String pointsLatStr = pointsArray.getJSONObject(p).get("lat").toString(); 1493 String pointsLatStr = pointsArray.getJSONObject(p).get("lat").toString();
1492 Location resultPoint = FromBDPointToWGSPoint(pointsLngStr, pointsLatStr); 1494 Location resultPoint = FromBDPointToWGSPoint(pointsLngStr, pointsLatStr);
src/main/resources/static/pages/base/stationroute/addstationstemplate.html
@@ -85,6 +85,30 @@ @@ -85,6 +85,30 @@
85 </div> 85 </div>
86 <script type="text/javascript"> 86 <script type="text/javascript">
87 87
  88 + // xml方式上传是,处理转成txt格式的方法
  89 + var getXmlSection = function (xml) {
  90 + // var xml = $("#xmlText").val();
  91 + var stationPointList = getXmlNode(xml);
  92 + var sListSize = stationPointList.length;
  93 + var sectionPointListStr = stationPointList[stationPointList.length - 1];
  94 + var sectionPointList = sectionPointListStr.split(" ");
  95 +
  96 + // var sectionStr = "";
  97 + var sections = [];
  98 + var mapping = nearestSectionPoint(stationPointList, sectionPointList);
  99 + for (var i = 0; i < sectionPointList.length; i++) {
  100 + var pointStr = sectionPointList[i],
  101 + point = pointStr.split(",");
  102 +
  103 + if (mapping[pointStr]) {
  104 + sections.push(point[0] + " " + point[1] + " " + point[2] + " Stop");
  105 + } else {
  106 + sections.push(point[0] + " " + point[1] + " " + point[2]);
  107 + }
  108 + }
  109 + return sections;
  110 + };
  111 +
88 $('#add_station_template_mobal').on('AddStationTempMobal.show', function(e,map,ajaxd,dir,line,fun){ 112 $('#add_station_template_mobal').on('AddStationTempMobal.show', function(e,map,ajaxd,dir,line,fun){
89 113
90 114
@@ -154,33 +178,45 @@ $(&#39;#add_station_template_mobal&#39;).on(&#39;AddStationTempMobal.show&#39;, function(e,map,a @@ -154,33 +178,45 @@ $(&#39;#add_station_template_mobal&#39;).on(&#39;AddStationTempMobal.show&#39;, function(e,map,a
154 }, 178 },
155 179
156 submitHandler : function(f) { 180 submitHandler : function(f) {
157 - // 隐藏手动规划弹出层  
158 - $('#add_station_template_mobal').modal('hide');  
159 - var directionData = dir; 181 + // 隐藏弹出层
  182 + $('#edit_route_mobal').modal('hide');
  183 + // 原坐标类型
  184 + var baseRes = "WGS84";
160 // 定义线路名称 185 // 定义线路名称
161 var lineNameV = $('.portlet-title .caption').text(); 186 var lineNameV = $('.portlet-title .caption').text();
162 var dirStr = ''; 187 var dirStr = '';
163 - // 上行  
164 - if(directionData==0){  
165 - dirStr = '上行路段';  
166 - // 隐藏上行规划  
167 - $('#upToolsMobal').hide();  
168 - // 下行  
169 - }else if(directionData==1){  
170 - dirStr = '下行路段';  
171 - // 隐藏上行规划  
172 - $('#downToolsMobal').hide();  
173 - } 188 + // 路线方向
  189 + var directionData = dir;
  190 +
  191 + var type = $("input[name='typeCheck']:checked").val();
  192 +
174 // 弹出正在加载层 193 // 弹出正在加载层
175 - var i = layer.load(0,{offset:['200px', '280px']}); 194 + var i = layer.load(2);
176 // 表单序列化 195 // 表单序列化
177 var paramsForm = form.serializeJSON(); 196 var paramsForm = form.serializeJSON();
178 - var baseResValue = paramsForm.baseRes;  
179 - // 站点名称字符串切割  
180 - var array = paramsForm.stations.split('\r\n'); 197 + var array = [];
  198 + if(type == 1){
  199 + array = getXmlSection(paramsForm.points);
  200 + } else {
  201 + // 切割坐标点
  202 + array = paramsForm.points.split('\r\n');
  203 + }
  204 + // 把坐标点转换为站点或路段
181 var arrayFormat = inputStationValueFormat(array); 205 var arrayFormat = inputStationValueFormat(array);
  206 + var stationList = arrayFormat.stationList;
  207 + var sectionListTemp = arrayFormat.sectionList;
  208 + var sectionList = [];
  209 + // 隔30个取一个点(相当于30s)
  210 + var typeNum = type == 0 ? 30:1;
  211 + for(var i = 0; i*typeNum < sectionListTemp.length; i++) {
  212 + sectionList[i] = sectionListTemp[i*typeNum];
  213 + }
  214 + sectionList[sectionList.length] = sectionListTemp[sectionListTemp.length-1];
  215 +
  216 + var sectionListFinal = [];
  217 + sectionListFinal.push({sectionName : lineNameV, points : sectionList});
182 // 根据站点名称获取百度坐标 218 // 根据站点名称获取百度坐标
183 - map.stationsNameToPoints(arrayFormat,function(resultJson) { 219 + map.stationsPointsToLibraryPoint(stationList,function(resultJson) {
184 // 根据坐标点获取两点之间的时间与距离 220 // 根据坐标点获取两点之间的时间与距离
185 map.getDistanceAndDuration(resultJson,function(stationdataList) { 221 map.getDistanceAndDuration(resultJson,function(stationdataList) {
186 // 设置第一个站的距离 222 // 设置第一个站的距离
@@ -189,14 +225,15 @@ $(&#39;#add_station_template_mobal&#39;).on(&#39;AddStationTempMobal.show&#39;, function(e,map,a @@ -189,14 +225,15 @@ $(&#39;#add_station_template_mobal&#39;).on(&#39;AddStationTempMobal.show&#39;, function(e,map,a
189 stationdataList[0].duration = ''; 225 stationdataList[0].duration = '';
190 // 定义站点信息JSON字符串 226 // 定义站点信息JSON字符串
191 var stationJSON = JSON.stringify(stationdataList); 227 var stationJSON = JSON.stringify(stationdataList);
192 - var addLine = line.getLineObj();  
193 // 参数集合 228 // 参数集合
194 var params = {}; 229 var params = {};
195 - params.baseRes = baseResValue; 230 + params.baseRes = baseRes;
  231 + // 是否添加该站点
  232 +
196 // 站点信息JSON字符串 233 // 站点信息JSON字符串
197 params.stationJSON = stationJSON; 234 params.stationJSON = stationJSON;
198 // 线路ID 235 // 线路ID
199 - params.lineId = addLine.id; 236 + params.lineId = line.id;
200 // 方向 237 // 方向
201 params.directions = directionData; 238 params.directions = directionData;
202 // 原始坐标类型 239 // 原始坐标类型
@@ -211,64 +248,53 @@ $(&#39;#add_station_template_mobal&#39;).on(&#39;AddStationTempMobal.show&#39;, function(e,map,a @@ -211,64 +248,53 @@ $(&#39;#add_station_template_mobal&#39;).on(&#39;AddStationTempMobal.show&#39;, function(e,map,a
211 params.destroy = '0'; 248 params.destroy = '0';
212 // versions:版本号 249 // versions:版本号
213 params.versions = '1'; 250 params.versions = '1';
214 - map.lineInfoPanl(lineNameV,directionData,function(BusLine){  
215 - // 如果线路信息不为空  
216 - if(BusLine && Polygon){  
217 - // 获取公交线几何对象, 仅当结果自动添加到地图上时有效  
218 - var Polygon = BusLine.getPolyline();  
219 - // 返回多边型的点数组(自1.2新增)  
220 - var polyGonArray = Polygon.getPath();  
221 - var jsonArray = [{sectionName:lineNameV+dirStr,points:polyGonArray}];  
222 - // 定义路段信息字符串  
223 - var sectionJSON = JSON.stringify(jsonArray);  
224 - // 路段信息JSON字符串  
225 - // if(sectionJSON != null && sectionJSON != "") {  
226 - params.sectionJSON = sectionJSON;  
227 - addSave(params,addLine.id,directionData);  
228 - /* } else {  
229 - layer.msg('百度地图上没有此线路的相应路段,请更换方式规划!!!');  
230 - } */  
231 - }else {  
232 - // 根据坐标点获取两点之间的折线路段  
233 - map.getSectionListPlonly(stationdataList,function(sectiondata) {  
234 - // 定义路段信息字符串  
235 - var sectionJSON = JSON.stringify(sectiondata);  
236 - // 路段信息JSON字符串  
237 - //if(sectionJSON != null && sectionJSON != "") {  
238 - params.sectionJSON = sectionJSON;  
239 - addSave(params,addLine.id,directionData);  
240 - /* } else {  
241 - layer.msg('无法生成路段,请重试!');  
242 - return;  
243 - } */  
244 - });  
245 - }  
246 - });  
247 -  
248 - }); 251 + // 定义路段信息字符串
  252 + var sectionJSON = JSON.stringify(sectionListFinal);
  253 + // 路段信息JSON字符串
  254 + params.sectionJSON = sectionJSON;
  255 + addSave(params,line.id,directionData);
  256 + });
249 257
250 - });  
251 -  
252 - } 258 + });
  259 + },
253 260
254 - }); 261 + });
255 262
256 function inputStationValueFormat(paramsStationsArray) { 263 function inputStationValueFormat(paramsStationsArray) {
257 var stationList = []; 264 var stationList = [];
  265 + var sectionList = [];
  266 + var routeList = {"stationList":stationList, "sectionList":sectionList};
258 var len = paramsStationsArray.length; 267 var len = paramsStationsArray.length;
  268 + // 处理相同站点判断值
  269 + var isPush = true;
259 for(var k =0;k<len;k++) { 270 for(var k =0;k<len;k++) {
260 if(paramsStationsArray[k]=="") 271 if(paramsStationsArray[k]=="")
261 continue; 272 continue;
262 var tempStr = paramsStationsArray[k].split('\t'); 273 var tempStr = paramsStationsArray[k].split('\t');
263 - if(tempStr.length<2){  
264 - stationList.push({name:paramsStationsArray[k]+"公交车站",wgs:{x:'',y:''}}); 274 + var tempPoint = transGpsLoc(tempStr[0],tempStr[1]);
  275 + var point = {lng:tempPoint.lng, lat:tempPoint.lat};
  276 + if(tempStr.length < 4){
  277 + sectionList[k] = point;
  278 + isPush = true;
265 }else { 279 }else {
266 - stationList.push({name:tempStr[0]+"公交车站",wgs:{x:tempStr[1], y:tempStr[2]}}); 280 + if(isPush) {
  281 + sectionList[k] = point;
  282 + stationList.push({name:tempStr[3], potion:{lng:tempPoint.lng, lat:tempPoint.lat} , wgs:{x:tempStr[0], y:tempStr[1]}});
  283 + }
  284 + isPush = false;
267 } 285 }
268 } 286 }
269 - return stationList; 287 + for(var i = 0 ;i<sectionList.length;i++) {
  288 + if(sectionList[i] == "" || isNaN(sectionList[i].lng) || typeof(sectionList[i]) == "undefined" || sectionList[i] == null) {
  289 + sectionList.splice(i,1);//删除数组中下表i-i+1之间的值
  290 + i= i-1;
  291 + }
  292 +
  293 + }
  294 + return routeList;
270 } 295 }
271 296
  297 +
272 function addSave(params,lineid,directionData) { 298 function addSave(params,lineid,directionData) {
273 299
274 300
src/main/resources/static/pages/base/stationroute/editRoute.html
@@ -138,30 +138,48 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -138,30 +138,48 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
138 138
139 } 139 }
140 140
141 - // xml方式上传是,处理转成txt格式的方法 141 + // xml方式上传是,处理转成txt格式的方法
142 var getXmlSection = function (xml) { 142 var getXmlSection = function (xml) {
143 // var xml = $("#xmlText").val(); 143 // var xml = $("#xmlText").val();
144 var stationPointList = getXmlNode(xml); 144 var stationPointList = getXmlNode(xml);
145 var sListSize = stationPointList.length; 145 var sListSize = stationPointList.length;
146 var sectionPointListStr = stationPointList[stationPointList.length - 1]; 146 var sectionPointListStr = stationPointList[stationPointList.length - 1];
147 var sectionPointList = sectionPointListStr.split(" "); 147 var sectionPointList = sectionPointListStr.split(" ");
148 - var index = 0;  
149 148
150 // var sectionStr = ""; 149 // var sectionStr = "";
151 var sections = []; 150 var sections = [];
  151 + var mapping = nearestSectionPoint(stationPointList, sectionPointList);
152 for (var i = 0; i < sectionPointList.length; i++) { 152 for (var i = 0; i < sectionPointList.length; i++) {
153 var pointStr = sectionPointList[i], 153 var pointStr = sectionPointList[i],
154 point = pointStr.split(","); 154 point = pointStr.split(",");
155 155
156 - if (index < sListSize - 1 && point == stationPointList[index]) { 156 + if (mapping[pointStr]) {
157 sections.push(point[0] + " " + point[1] + " " + point[2] + " Stop"); 157 sections.push(point[0] + " " + point[1] + " " + point[2] + " Stop");
158 - index++;  
159 } else { 158 } else {
160 sections.push(point[0] + " " + point[1] + " " + point[2]); 159 sections.push(point[0] + " " + point[1] + " " + point[2]);
161 } 160 }
162 } 161 }
163 return sections; 162 return sections;
164 }; 163 };
  164 +
  165 + var nearestSectionPoint = function (stationPointList, sectionPointList) {
  166 + var mapping = {};
  167 + for (var i = 0;i < stationPointList.length - 1;i++) {
  168 + var minDistance = 999999999, stationPoint = stationPointList[i].split(","), pointStr;
  169 + for (var j = 0;j < sectionPointList.length;j++) {
  170 + var sectionPointStr = sectionPointList[j], sectionPoint = sectionPointStr.split(",");
  171 + var distance = Math.sqrt(Math.pow(parseFloat(stationPoint[0]) - parseFloat(sectionPoint[0]), 2) + Math.pow(parseFloat(stationPoint[1]) - parseFloat(sectionPoint[1]), 2));
  172 + if (distance < minDistance) {
  173 + minDistance = distance;
  174 + pointStr = sectionPointStr;
  175 + }
  176 + }
  177 + mapping[pointStr] = stationPointList[i];
  178 + }
  179 +
  180 + return mapping;
  181 + }
  182 +
165 183
166 184
167 // 表单验证 185 // 表单验证
@@ -209,9 +227,9 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -209,9 +227,9 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
209 227
210 }, 228 },
211 submitHandler : function(f) { 229 submitHandler : function(f) {
212 - // 隐藏弹出层 230 + debugger;
  231 + // 隐藏弹出层
213 $('#edit_route_mobal').modal('hide'); 232 $('#edit_route_mobal').modal('hide');
214 -  
215 // 原坐标类型 233 // 原坐标类型
216 var baseRes = "WGS84"; 234 var baseRes = "WGS84";
217 // 定义线路名称 235 // 定义线路名称
@@ -225,9 +243,6 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -225,9 +243,6 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
225 * xml路段取所有点 243 * xml路段取所有点
226 */ 244 */
227 var type = $("input[name='typeCheck']:checked").val(); 245 var type = $("input[name='typeCheck']:checked").val();
228 - //editRoute.setLineDir(directionData);  
229 - // 设置线路对象生成方式  
230 - //editRoute.setLineGenerationType('uploadGPS');  
231 // 弹出正在加载层 246 // 弹出正在加载层
232 var i = layer.load(2); 247 var i = layer.load(2);
233 // 表单序列化 248 // 表单序列化
@@ -241,9 +256,6 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -241,9 +256,6 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
241 // 切割坐标点 256 // 切割坐标点
242 array = paramsForm.points.split('\r\n'); 257 array = paramsForm.points.split('\r\n');
243 } 258 }
244 -  
245 -  
246 -  
247 // 把坐标点转换为站点或路段 259 // 把坐标点转换为站点或路段
248 var arrayFormat = inputStationValueFormat(array); 260 var arrayFormat = inputStationValueFormat(array);
249 var stationList = arrayFormat.stationList; 261 var stationList = arrayFormat.stationList;
@@ -313,8 +325,16 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -313,8 +325,16 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
313 for(var k =0;k<len;k++) { 325 for(var k =0;k<len;k++) {
314 if(paramsStationsArray[k]=="") 326 if(paramsStationsArray[k]=="")
315 continue; 327 continue;
  328 +
316 var tempStr = paramsStationsArray[k].split('\t'); 329 var tempStr = paramsStationsArray[k].split('\t');
  330 +
  331 + if(tempStr[0] == "undefined" || tempStr[0] == ""){
  332 + continue;
  333 + }
  334 +
317 var tempPoint = transGpsLoc(tempStr[0],tempStr[1]); 335 var tempPoint = transGpsLoc(tempStr[0],tempStr[1]);
  336 +
  337 +
318 var point = {lng:tempPoint.lng, lat:tempPoint.lat}; 338 var point = {lng:tempPoint.lng, lat:tempPoint.lat};
319 if(tempStr.length < 4){ 339 if(tempStr.length < 4){
320 sectionList[k] = point; 340 sectionList[k] = point;
@@ -337,6 +357,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -337,6 +357,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
337 return routeList; 357 return routeList;
338 } 358 }
339 359
  360 +
340 function transGpsLoc(lng,lat) { 361 function transGpsLoc(lng,lat) {
341 var bdLoc = TransGPS.locationMake(lng, lat); 362 var bdLoc = TransGPS.locationMake(lng, lat);
342 var gcjLoc = TransGPS.transformFromWGSToGCJ(bdLoc); 363 var gcjLoc = TransGPS.transformFromWGSToGCJ(bdLoc);
src/main/resources/static/pages/base/stationroute/js/stationroute-list-function.js
@@ -305,16 +305,17 @@ var PublicFunctions = function () { @@ -305,16 +305,17 @@ var PublicFunctions = function () {
305 305
306 /** 直接保存 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行)> */ 306 /** 直接保存 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行)> */
307 systemLineStation : function(lineNameV,directionData) { 307 systemLineStation : function(lineNameV,directionData) {
  308 + debugger;
308 /** 从百度地图获取线路信息 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行);callback>*/ 309 /** 从百度地图获取线路信息 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行);callback>*/
309 WorldsBMap.lineInfoPanl(lineNameV,directionData,function(BusLine){ 310 WorldsBMap.lineInfoPanl(lineNameV,directionData,function(BusLine){
310 // 如果线路信息不为空 311 // 如果线路信息不为空
311 - if(BusLine && Polygon) { 312 + if(BusLine) {
312 // 获取公交线几何对象, 仅当结果自动添加到地图上时有效 313 // 获取公交线几何对象, 仅当结果自动添加到地图上时有效
313 - var Polygon = BusLine.getPolyline(); 314 + var Polygon = BusLine.Zi;
314 // 返回多边型的点数组(自1.2新增) 315 // 返回多边型的点数组(自1.2新增)
315 - var polyGonArray = Polygon.getPath(); 316 + var polyGonArray = Polygon.Bo;
316 // 获取公交站点个数(自 1.2 新增) 317 // 获取公交站点个数(自 1.2 新增)
317 - var stationNumber = BusLine.getNumBusStations(); 318 + var stationNumber = BusLine.UB.length;
318 // 定义线路信息集合 319 // 定义线路信息集合
319 var stationInfo = []; 320 var stationInfo = [];
320 // 遍历 321 // 遍历
@@ -322,9 +323,9 @@ var PublicFunctions = function () { @@ -322,9 +323,9 @@ var PublicFunctions = function () {
322 // 定义线路信息集合 323 // 定义线路信息集合
323 var tempM = {}; 324 var tempM = {};
324 // 添加站点名称 325 // 添加站点名称
325 - tempM.name = BusLine.getBusStation(k).name; 326 + tempM.name = BusLine.UB[k].name;
326 // 添加站点坐标 327 // 添加站点坐标
327 - tempM.potion = BusLine.getBusStation(k).position; 328 + tempM.potion = BusLine.UB[k].position;
328 tempM.wgs = {x:'',y:''}; 329 tempM.wgs = {x:'',y:''};
329 // 添加 330 // 添加
330 stationInfo.push(tempM); 331 stationInfo.push(tempM);