巨大森林を分割する
Revisão | 8c8412228ee842d8e00dc86f64f0f868a99a8121 (tree) |
---|---|
Hora | 2013-08-10 08:54:26 |
Autor | hayashi.yuu <hayashi.yuu@gmai...> |
Commiter | hayashi.yuu |
ノードを持たないWAYをみつけたらWORRNINGにする
@@ -234,55 +234,63 @@ public class RelationCutter { | ||
234 | 234 | if (DbBigrelation.getWay(con, way, member.ref)) { |
235 | 235 | DbBigrelation.getTags(con, way.tags, way.idref); |
236 | 236 | DbBigrelation.getOsmnodes(con, way.waynodes, way.idref); |
237 | - | |
238 | - // 最後のWAYNODEが分割点かどうかを調べて、分割点どうしを連結する。 | |
239 | - OsmNode lastnode = way.waynodes.get(way.waynodes.size() - 1); // 最終のノード | |
240 | - | |
241 | - if (isLatBoundary(lastnode.lat)) { | |
242 | - OsmNode maenode = way.waynodes.get(way.waynodes.size() - 2); // 一つ前のノード | |
243 | - double delta = lastnode.lat - maenode.lat; | |
244 | - if (delta == 0.0D) { | |
245 | - // 真東から? 単純結合 | |
246 | - // 真西から? 単純結合 | |
247 | - | |
248 | - /* [[PENDING]] */ | |
249 | - /* | |
250 | - * とりあえず、あとまわし | |
251 | - */ | |
252 | - } | |
253 | - else if (delta > 0.0D) { | |
254 | - if (arrow) { | |
255 | - // 南から 右回りなら、東へ | |
256 | - processEast(con, way); | |
237 | + if (way.waynodes.size() < 1) { | |
238 | + Logger.logger.warning("ノードを持たないWAYです。(way:id="+ way.idref +")"); | |
239 | + } | |
240 | + else { | |
241 | + // 最後のWAYNODEが分割点かどうかを調べて、分割点どうしを連結する。 | |
242 | + OsmNode lastnode = way.waynodes.get(way.waynodes.size() - 1); // 最終のノード | |
243 | + | |
244 | + if (isLatBoundary(lastnode.lat)) { | |
245 | + OsmNode maenode = way.waynodes.get(way.waynodes.size() - 2); // 一つ前のノード | |
246 | + double delta = lastnode.lat - maenode.lat; | |
247 | + if (delta == 0.0D) { | |
248 | + // 真東から? 単純結合 | |
249 | + // 真西から? 単純結合 | |
250 | + | |
251 | + /* [[PENDING]] */ | |
252 | + /* | |
253 | + * とりあえず、あとまわし | |
254 | + */ | |
255 | + } | |
256 | + else if (delta > 0.0D) { | |
257 | + if (arrow) { | |
258 | + // 南から 右回りなら、東へ | |
259 | + processEast(con, way); | |
260 | + } | |
261 | + else { | |
262 | + // 南から 左回りなら、西へ | |
263 | + processWest(con, way); | |
264 | + } | |
257 | 265 | } |
258 | 266 | else { |
259 | - // 南から 左回りなら、西へ | |
260 | - processWest(con, way); | |
267 | + // 北から | |
268 | + if (arrow) { | |
269 | + // 北から?右回りなら、西へ | |
270 | + processWest(con, way); | |
271 | + } | |
272 | + else { | |
273 | + // 北から?左まわりなら、東へ | |
274 | + processEast(con, way); | |
275 | + } | |
261 | 276 | } |
262 | 277 | } |
263 | 278 | else { |
264 | - // 北から | |
265 | - if (arrow) { | |
266 | - // 北から?右回りなら、西へ | |
267 | - processWest(con, way); | |
279 | + // 最終ノードが分割点でない場合には、次のWAYと接続する。 | |
280 | + int nextindex = ((imember + 1) >= relation.members.size() ? 0 : imember + 1); | |
281 | + Member nextmember = relation.members.get(nextindex); | |
282 | + Way addway = new Way(); | |
283 | + DbBigrelation.getWay(con, addway, nextmember.ref); | |
284 | + addway.loadTag(con); | |
285 | + if (addway.loadNodes(con) < 1) { | |
286 | + Logger.logger.warning("ノードを持たないWAYに接続しようとしました。(way:id="+ addway.idref +")"); | |
268 | 287 | } |
269 | 288 | else { |
270 | - // 北から?左まわりなら、東へ | |
271 | - processEast(con, way); | |
289 | + way.add(con, addway); | |
290 | + way.action = OsmNode.ACTION_MODIFY; | |
272 | 291 | } |
273 | 292 | } |
274 | 293 | } |
275 | - else { | |
276 | - // 最終ノードが分割点でない場合には、次のWAYと接続する。 | |
277 | - int nextindex = ((imember + 1) >= relation.members.size() ? 0 : imember + 1); | |
278 | - Member nextmember = relation.members.get(nextindex); | |
279 | - Way addway = new Way(); | |
280 | - DbBigrelation.getWay(con, addway, nextmember.ref); | |
281 | - addway.loadTag(con); | |
282 | - addway.loadNodes(con); | |
283 | - way.add(con, addway); | |
284 | - way.action = OsmNode.ACTION_MODIFY; | |
285 | - } | |
286 | 294 | } |
287 | 295 | } |
288 | 296 | } |