2017-09-23 13 views
8

Tôi nhận được lỗi trong một trong các đa giác mà tôi đang nhập.Sử dụng Dữ liệu Mùa xuân, Mongodb, làm cách nào tôi có thể tránh lỗi Đỉnh trùng lặp

Write failed with error code 16755 and error message 'Can't extract geo keys: { _id: "b9c5ac0c-e469-4b97-b059-436cd02ffe49", _class: .... ] Duplicate vertices: 0 and 15' 

Full Stack Trace: https://gist.github.com/boundaries-io/927aa14e8d1e42d7cf516dc25b6ebb66#file-stacktrace

GeoJson MultiPolygon I am importing using Spring Data MongoDB

public class MyPolgyon { 

    @Id 
    String id; 

    @GeoSpatialIndexed(type=GeoSpatialIndexType.GEO_2DSPHERE) 
    GeoJsonPoint position; 

    @GeoSpatialIndexed(type=GeoSpatialIndexType.GEO_2DSPHERE) 
    GeoJsonPoint location; 

    @GeoSpatialIndexed(type=GeoSpatialIndexType.GEO_2DSPHERE) 
    GeoJsonPolygon polygon; 





public static GeoJsonPolygon generateGeoJsonPolygon(List<LngLatAlt> coordinates) { 
     List<Point> points = new ArrayList<Point>(); 
     for (LngLatAlt point: coordinates) {       
       org.springframework.data.geo.Point dataPoint = new org.springframework.data.geo.Point(point.getLongitude() ,point.getLatitude());    
       points.add(dataPoint);   
      } 
     return new GeoJsonPolygon(points); 
    } 

Làm thế nào tôi có thể tránh được lỗi này trong Java?

tôi có thể nạp tiền phạt GeoJSON trong http://geojson.io

đây là GeoJSON: https://gist.github.com/boundaries-io/4719bfc386c3728b36be10af29860f4c#file-rol-ca-part1-geojson

loại bỏ trùng lặp bằng:

for (com.vividsolutions.jts.geom.Coordinate coordinate : geometry.getCoordinates()) { 
    Point lngLatAtl = new Point(coordinate.x, coordinate.y); 
    boolean notDup = points.contains(lngLatAtl); 
    if (!notDup){ 
     points.add(lngLatAtl); 
    }else{ 
     LOGGER.debug("Duplicate, [" + lngLatAtl.toString() +"] index[" + count +"]"); 
    } 
    count++; 
} 

Logging:

2017-10-27 22:38:18 DEBUG TestBugs:58 - Duplicate, [Point [x=-97.009868, y=52.358242]] index[15] 
2017-10-27 22:38:18 DEBUG TestBugs:58 - Duplicate, [Point [x=-97.009868, y=52.358242]] index[3348] 

Trả lời

2

Trong trường hợp này bạn có đỉnh lặp tại chỉ mục 0 và chỉ mục 1 341 cho đa giác thứ 2.

[ -62.95859676499998, 46.20653318300003 ] 

Chèn không thành công khi Mongo db cố xây dựng chỉ mục hình cầu 2d cho tài liệu. Hủy bỏ tọa độ tại chỉ số 1341 và bạn sẽ có thể tiếp tục tồn tại thành công.

Bạn chỉ cần xóa dữ liệu khi bạn tìm thấy lỗi. Bạn có thể viết một chương trình nhỏ để đọc lỗi từ mongo db và cung cấp bản cập nhật cho khách hàng. Khách hàng có thể hành động trên các tin nhắn đó và thử lại yêu cầu.

Thông tin thêm về lỗi địa lý có thể được tìm thấy here. Bạn có thể xem mã tại đây để biết GeoParser để tìm hiểu cách thức/lỗi nào được tạo. Đối với lỗi cụ thể bạn có, bạn có thể xem tại đây GeoParser. error được tạo bởi thư viện S2 mà Mongodb sử dụng để xác thực.

+0

lỗi gốc thực sự là: Các đỉnh trùng lặp: 0 và 15 –

+0

trường hợp kiểm tra được cập nhật theo đề xuất của bạn vẫn cho phép lưu lỗi vào MongoDb. –

+1

Thực ra, điều này đã hiệu quả. cảm ơn. –

Các vấn đề liên quan