Changeset 17107 in josm for trunk/src/org/openstreetmap
- Timestamp:
- 2020-10-08T07:01:06+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/io/GeoJSONReader.java
r17054 r17107 41 41 import org.openstreetmap.josm.data.projection.Projection; 42 42 import org.openstreetmap.josm.data.projection.Projections; 43 import org.openstreetmap.josm.data.validation.TestError; 44 import org.openstreetmap.josm.data.validation.tests.DuplicateWay; 43 45 import org.openstreetmap.josm.gui.progress.NullProgressMonitor; 44 46 import org.openstreetmap.josm.gui.progress.ProgressMonitor; … … 402 404 } 403 405 } 406 mergeEqualMultipolygonWays(); 404 407 } catch (IOException | JsonParsingException e) { 405 408 throw new IllegalDataException(e); 406 409 } 407 410 return getDataSet(); 411 } 412 413 /** 414 * Import may create duplicate ways were one is member of a multipolygon and untagged and the other is tagged. 415 * Try to merge them here. 416 */ 417 private void mergeEqualMultipolygonWays() { 418 DuplicateWay test = new DuplicateWay(); 419 test.startTest(null); 420 for (Way w: getDataSet().getWays()) { 421 test.visit(w); 422 } 423 test.endTest(); 424 425 if (test.getErrors().isEmpty()) 426 return; 427 428 for (TestError e : test.getErrors()) { 429 if (e.getPrimitives().size() == 2 && !e.isFixable()) { 430 Way mpWay = null; 431 Way tagged = null; 432 for (OsmPrimitive p : e.getPrimitives()) { 433 if (p.isTagged() && p.referrers(Relation.class).count() == 0) 434 tagged = (Way) p; 435 else if (p.referrers(Relation.class).anyMatch(Relation::isMultipolygon)) 436 mpWay = (Way) p; 437 } 438 if (mpWay != null && tagged != null) { 439 for (Relation r : mpWay.referrers(Relation.class).filter(Relation::isMultipolygon) 440 .collect(Collectors.toList())) { 441 for (int i = 0; i < r.getMembersCount(); i++) { 442 if (r.getMember(i).getMember().equals(mpWay)) { 443 r.setMember(i, new RelationMember(r.getRole(i), tagged)); 444 } 445 } 446 } 447 mpWay.setDeleted(true); 448 } 449 } 450 } 451 ds.cleanupDeletedPrimitives(); 408 452 } 409 453
Note:
See TracChangeset
for help on using the changeset viewer.