Search code examples
c#asp.netgeojsonsystem.text.jsonnettopologysuite

Is it possible to serialize Nettopologysuite geometry to GeoJSON through GeoJSON4STJ?


Hi I have been trying to serialize a polygon to a variable using GeoJSON4STJ for Nettopologysuite. So far deserialization works fine, but I am unable to serialize it. Is there any way to do this?

I have added the following code to the startup file as required

public void ConfigureServices(IServiceCollection services) {
  services.AddControllers()
  .AddJsonOptions(options => {
    options.JsonSerializerOptions.Converters.Add(new NetTopologySuite.IO.Converters.GeoJsonConverterFactory());
  });
}

And I am trying to use the following lin

geoStr = JsonSerializer.Serialize(geometry);

Solution

  • It's been a while but since people are still interested, using GeoJSON4STJ requires setting JsonSerializerOptions for System.Text.Json. This is needed for both serialization and deserialization.

    Example:

    using Microsoft.AspNetCore.Mvc;
    
    _jsonOptions = new JsonOptions();
    _jsonOptions.JsonSerializerOptions.Converters.Add(new NetTopologySuite.IO.Converters.GeoJsonConverterFactory());
    
    var gf = NetTopologySuite.NtsGeometryServices.Instance.CreateGeometryFactory(4326);
    
    // Create a polygon from Aurich over Emden, Leer to Aurich
    Geometry geometry = gf.CreatePolygon(new[] {
        new NetTopologySuite.Geometries.Coordinate(7.5404, 53.4837),
        new NetTopologySuite.Geometries.Coordinate(7.1559, 53.3646),
        new NetTopologySuite.Geometries.Coordinate(7.4550, 53.2476),
        new NetTopologySuite.Geometries.Coordinate(7.5404, 53.4837),
    });
    
    var str = JsonSerializer.Serialize(geometry, _jsonOptions.JsonSerializerOptions);
    Console.WriteLine(str);     
    

    If you don't specifically need NetTopologySuite.IO.GeoJSON4STJ or System.Text.Json and are fine with NetTopologySuite.IO.GeoJSON, the answer of @shage_in_excelsior will serve you just fine.