elasticsearch 将GeoJSON字符串转换为Elasticsearch几何体,elasticsearch,geometry,geojson,elasticsearch,Geometry,Geojson" /> elasticsearch 将GeoJSON字符串转换为Elasticsearch几何体,elasticsearch,geometry,geojson,elasticsearch,Geometry,Geojson" />

elasticsearch 将GeoJSON字符串转换为Elasticsearch几何体

elasticsearch 将GeoJSON字符串转换为Elasticsearch几何体,elasticsearch,geometry,geojson,elasticsearch,Geometry,Geojson,我有一个像这样的GeoJSON字符串 { "type": "Polygon", "coordinates": [ [ [ 121.4, 33.99831528411953 ], [ 120.32770211588034,

我有一个像这样的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

但是我没有找到一个方便的方法

有没有人遇到过类似的问题

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


非常感谢

以下是您可以做到这一点的方法:

// 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);

以下是如何做到这一点:

// 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);

我找到了一个解决方案,比如

 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);

但是我不知道这是对还是错。

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

 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);

但我不知道这是否正确。

是否要将此GeoJSON解析为几何体/形状?是吗?是的,我正在使用Elasticsearch 7.5。是否要将此GeoJSON解析为几何体/形状?是吗?是的,我正在使用Elasticsearch 7.5。非常感谢您的回答。我认为这是正确的方法很酷,很高兴它有帮助!非常感谢你的回答。我认为这是正确的方法很酷,很高兴它有帮助!