我在其中一个导入的多边形中出现错误。
{"started":"2017-09-23T10:29:30.626Z","uptime":48.709}
完整堆栈跟踪:https://gist.github.com/boundaries-io/927aa14e8d1e42d7cf516dc25b6ebb66#file-stacktrace
GeoJson MultiPolygon I am importing using Spring Data MongoDB
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'
如何在Java中避免此错误?
中加载geojson这是GEOJSON:https://gist.github.com/boundaries-io/4719bfc386c3728b36be10af29860f4c#file-rol-ca-part1-geojson
使用以下方法删除重复项:
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);
}
日志记录:
for (com.vividsolutions.jts.geom.Coordinate coordinate : geometry.getCoordinates()) {
Point lngLatAtl = new Point(coordinate.x, coordinate.y);
boolean isADup = points.contains(lngLatAtl);
if ( !notDup ){
points.add(lngLatAtl);
}else{
LOGGER.debug("Duplicate, [" + lngLatAtl.toString() +"] index[" + count +"]");
}
count++;
}
答案 0 :(得分:2)
在这种情况下,您在索引0处具有重复的顶点,而在第二个多边形处具有索引1341。
[ -62.95859676499998, 46.20653318300003 ]
当Mongo db尝试为文档构建2d球体索引时,插入失败。删除索引1341处的坐标,您应该能够成功保留。
您必须在发现错误时清理数据。 您可以编写一个小程序来读取mongo db中的错误,并将更新提供给客户端。客户可以对这些消息采取行动,然后再次尝试请求。
可以找到有关地理错误的更多信息here
。
您可以在此处查看GeoParser
的代码,以了解如何生成错误/生成错误。对于您遇到的具体错误,您可以查看GeoParser
。这个error
由Mongodb用于验证的S2库生成。