dotnet | azure-cognitive-search

Azure Cognitive Search - GeographyPoint to GeoJSON in .NET 5

Microsoft.Spatial GeographyPoint to GeoJSON in .NET5 using System.Text.Json.

Abhith Rajan
Abhith RajanMarch 13, 2021 · 2 min read · Last Updated:

Azure Cognitive Search Service supported data types includes Edm.GeographyPoint.

While creating index definition using attributes in C#, to specify the field type as Edm.GeographyPoint we can use the GeographyPoint as the type.

using Azure.Search.Documents.Indexes;
using Microsoft.Spatial;

public class RestaurantIndexModel
{
    ...

    [SimpleField(IsFilterable = true, IsSortable = true)]
    public GeographyPoint Location { get; set; }

    ...
}

We need to have the NuGet package Microsoft.Spatial to use the GeographyPoint type.

  <PackageReference Include="Microsoft.Spatial" Version="7.8.3" />

And with that, you can create the index definition,

Index definition
Index definition

But when you try to index a document with the same type,

restaurant.Location = GeographyPoint.Create(restaurantResult.Value.Latitude, restaurantResult.Value.Longitude);

You may encounter the following issue,

{
  "error": {
    "code": "",
    "message": "The request is invalid. Details: parameters : Invalid GeoJSON. The 'type' member is required, but was not found.\r\n"
  }
}

The way you can fix this is by,

  1. Add the following NuGet package,
  <PackageReference Include="Microsoft.Azure.Core.Spatial" Version="1.0.0" />

And then annotate your index model to use the MicrosoftSpatialGeoJsonConverter as the JsonConverter by,

using System.Text.Json.Serialization;
using Azure.Core.Serialization;
using Azure.Search.Documents.Indexes;
using Microsoft.Spatial;

public class RestaurantIndexModel
{
    ...

    [JsonConverter(typeof(MicrosoftSpatialGeoJsonConverter))]
    [SimpleField(IsFilterable = true, IsSortable = true)]
    public GeographyPoint Location { get; set; }

    ...
}

That will do.

Indexd document
Indexd document

Additional Resources

This page is open source. Noticed a typo? Or something unclear?
Improve this page on GitHub


Abhith Rajan

Written byAbhith Rajan
Abhith Rajan is a software engineer by day and a full-stack developer by night. He's coding for almost a decade now. He codes 🧑‍💻, write ✍️, learn 📖 and advocate 👍.
Connect

Is this page helpful?

Related ArticlesView All

Related VideosView All

NativeAOT for .NET APIs Is Here and It’s INSANE!

When to use - IEnumerable vs IList vs ICollection?

What are record types in C# and how they ACTUALLY work

Related Tools & ServicesView All

dotnet.microsoft.com

Try .NET | Runnable .NET code on your site

Try .NET is a service that allows you to embed runnable .NET code snippets into your website, blog, or documentation. Go beyond copy and paste samples to live snippets.