2015-03-22 16 views
13

Tôi có một bộ sưu tập trong MongoDB với chỉ mục 2dsphere. Đối tượng tôi muốn lưu trông giống như sau:Không thể trích xuất các khóa địa lý 'mặc dù GeoJSON là hợp lệ

{ 
     "type" : "Polygon", 
     "coordinates" : [ 
      [ 
       [ 
        5.052617929724351, 
        52.64653192570052 
       ], 
       [ 
        5.051738165167465, 
        52.64765805672784 
       ], 
       [ 
        5.054162882116928, 
        52.64831549553909 
       ], 
       [ 
        5.054592035559312, 
        52.64780777138566 
       ], 
       [ 
        5.055364511755601, 
        52.64790541110375 
       ], 
       [ 
        5.056094072607651, 
        52.64688343792051 
       ], 
       [ 
        5.054237983969346, 
        52.64661654927096 
       ], 
       [ 
        5.052617929724351, 
        52.64653192570052 
       ] 
      ] 
     ] 
    } 

Theo http://geojsonlint.com/ đây là GeoJSON hoàn toàn hợp lệ. Tuy nhiên MongoDB nói rằng nó không thể giải nén các khóa địa lý vì GeoJSON có thể không đúng định dạng.

Có ai có thể giúp tôi và phát hiện lỗi không?

Đây là lỗi MongoDB tôi nhận được:

insertDocument :: caused by :: 16755 Can't extract geo keys from object, malformed geometry? 
+1

Bạn có 2 mảng khung xung quanh mảng điểm của mình. Thử xóa một bộ ngoặc vuông. Nên [[lat, long], [lat, long], ...] –

+1

Xin chào Brian, tôi không nghĩ điều này là chính xác. Đa giác trong GeoJSON là một mảng các vành tọa độ. GeoJSON lint cũng báo cáo rằng đây là GeoJSON không hợp lệ. Tôi sẽ thử nó trong MongoDB. – Mathyn

+0

Xin lỗi. Tôi nghĩ chỉ MultiPolygon cần thêm các dấu ngoặc mảng. Thật buồn cười ... Tôi đã tìm thấy một bài đăng có câu trả lời bắt đầu theo cùng cách chính xác https://groups.google.com/forum/m/#!topic/mongodb-user/OPouYFHS_zU –

Trả lời

2

Vấn đề là bạn không cung cấp tên của đối tượng cấp cao nhất rằng GeoJSON sẽ được gán cho.

Bạn phải tạo chỉ mục "2dsphere" trên trường "tọa độ". Thay vào đó bạn muốn tạo nó trên trường mà toàn bộ giá trị GeoJSON này sẽ được gán cho.

db.geo.createIndex({"location":"2dsphere"}) 
db.geo.insert({"location" : { 
    "type" : "Polygon", 
    "coordinates" : [ 
     [ <list of your-coord-pairs> ] 
    ] 
}}) 
WriteResult({ "nInserted" : 1 }) 
+0

Chắc chắn đây có thể là vấn đề. Đáng buồn là tôi không thể xác thực nữa vì tôi không còn mã cụ thể nữa gây ra sự cố. – Mathyn

+2

Rõ ràng ai đó có cùng một vấn đề chính xác kể từ khi họ đặt một tiền thưởng vào câu trả lời. –

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