将GeoJSON字符串转换为Elasticsearch几何对象

3

我有一个如下的GeoJSON字符串

{
            "type": "Polygon",
            "coordinates": [
              [
                [
                  121.4,
                  33.99831528411953
                ],
                [
                  120.32770211588034,
                  33.09540949748297
                ],
                [
                  121.4,
                  32.20168471588049
                ],
                [
                  122.47229788411967,
                  33.09540949748297
                ],
                [
                  121.4,
                  33.99831528411953
                ]
              ]
            ]
          }

我希望将其转换为Elasticsearch的几何图形或ShapeBuilder。

但我没有找到方便的方法。

有人遇到类似的问题吗?

或者有工具类可以做到这一点。

非常感谢。


你想将这个GeoJSON解析成几何图形/形状吗?是吗? - Val
是的,我正在使用 Elasticsearch 7.5。 - hxr
2个回答

1

我找到了一个类似的解决方案

 String valueAsString = mapper.writeValueAsString(value);

        GeometryParser parser = new GeometryParser(true, true, true);
        XContentParser contentParser = JsonXContent.jsonXContent.createParser(NamedXContentRegistry.EMPTY, DeprecationHandler.THROW_UNSUPPORTED_OPERATION, valueAsString);
        contentParser.nextToken();
        Geometry geometry = parser.parse(contentParser);

但我不知道这是否正确。

0

以下是您可以完成此操作的方法:

// read your GeoJSON string from a file
String geojson = ...;

// parse the GeoJSON
JsonXContent geoJsonParser = JsonXContent.jsonXContent.createParser(NamedXContentRegistry.EMPTY, LoggingDeprecationHandler.INSTANCE, geojson);

// create a shape builder (of type PolygonBuilder since the GeoJSON represents a polygon)
PolygonBuilder shapeBuilder = (PolygonBuilder) ShapeBuilder.parse(geoJsonParser);

非常感谢您的回答。我认为这是正确的方法。 - hxr
不是 ShapeBuilder.parse() 而是 ShapeParser.parse(),所以应该是 PolygonBuilder shapeBuilder = (PolygonBuilder) ShapeParser.parse(geoJsonParser); - nonNumericalFloat
也许你需要使用 parser.nextToken(); 来避免 ShapeParser 抛出异常,但我不知道为什么。 - nonNumericalFloat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接