Ciao ottengo questa eccezione quando salvi più poligoni. Come posso impostare SkipGeographyChecks su true?
Eccezione:
Quando si scrive un valore geografico di SQL Server, la shell di un poligono deve essere orientata in senso antiorario. Per scrivere poligoni senza shell, imposta SkipGeographyChecks
Esempio di codice:
var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326);
var poly = new Polygon[] {
new Polygon(new LinearRing(new Coordinate[]
{
new Coordinate(19.2385498607974, -51.50390625,0),
new Coordinate(24.1367281697474, -37.6171875,0),
new Coordinate(13.8487471475372, -18.10546875,0),
new Coordinate(19.2385498607974, -51.50390625,0),
})),
new Polygon(new LinearRing(new Coordinate[]
{
new Coordinate(-10.0445849842118, -53.0859375,0),
new Coordinate(4.13824308398371, -58.7109375,0),
new Coordinate(2.20770545570541, -68.73046875,0),
new Coordinate(-8.83079518432893, -79.1015625,0),
new Coordinate(-17.3820949478775, -81.2109375,0),
new Coordinate(-21.0332372344673, -51.328125,0),
new Coordinate(-10.0445849842118, -53.0859375,0),
}))
};
var currentLocation = geometryFactory.CreateMultiPolygon(poly) as MultiPolygon;
dbset.Polygons = currentLocation;
_context.Add(dbset);
await _context.SaveChangesAsync();
Per quanto ne so, SkipGeographyChecks è stato rimosso come proprietà prima che il riferimento fosse rimosso da questo errore - Problema di Github per la rimozione del riferimento a questa proprietà .
Ho anche scoperto che questo errore può verificarsi se i punti del poligono sono ordinati nella direzione sbagliata. La convenzione è che la direzione dei punti che rappresenta "l'interno" del poligono - vale a dire: se i punti per un poligono sono in senso antiorario, l'area di quel poligono è all'interno del confine, ma se i punti sono in senso orario, l'area è la intero mondo tranne che all'interno di quel confine (perché i punti sono essenzialmente in senso antiorario attorno a tutto al di fuori del confine). È possibile determinare se questo è il problema verificando la proprietà IPolygon.Shell.IsCCW
. Se questo è il tuo problema, puoi risolverlo usando il metodo IPolygon.Shell.Reverse()
. Vedi questa domanda StackExchange di GIS (dove ho trovato queste informazioni) per alcuni codici reali che puoi usare.