Определить многоугольник пересечения 180 меридианов в DotSpatial

Я новичок в DotSpatial и я пытаюсь определить многоугольник пересечения 180 меридианов следующим образом:

FeatureSet fs = new FeatureSet(FeatureType.Polygon);
Coordinate[] coord = new Coordinate[5];
coord[0] = new Coordinate(30, 48);
coord[1] = new Coordinate(120, 45);
coord[2] = new Coordinate(-170, 64);
coord[3] = new Coordinate(30, 70);
coord[4] = new Coordinate(30, 48);
Polygon pg = new Polygon(coord);
 pg.Normalize();
fs.Features.Add(pg);
fs.Projection = DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984;
fs.SaveAs(HttpContext.Current.Server.MapPath("~/shp/test2.shp"), true);

Однако, когда я проверяю выходной файл формы, ребра многоугольника пересекаются друг с другом

Если я рисую тот же многоугольник в SQL Server с

DECLARE @Poly geography =   
  geography::STPolyFromText('POLYGON((30 48, 120 45, -170 64, 30 70, 30 48))', 4326)  
SELECT @Poly 

Я вижу правильное отображение полигонов в разделе "Пространственные результаты" в инструментах управления SQL Server.

Может кто-нибудь помочь мне, как решить эту проблему в DotSpatial,

Большое спасибо!

1 ответ

На самом деле это не проблема, она просто следует координатам, заданным в порядке. Если вы измените заказ, то все будет хорошо.

FeatureSet fs = new FeatureSet(FeatureType.Polygon);

Coordinate[] coord = new Coordinate[]
{
    new Coordinate(30, 48),               
    new Coordinate(-170, 64),
    new Coordinate(30, 70),
    new Coordinate(120, 45),
    new Coordinate(30, 48)
};

fs.AddFeature(new Polygon(new LinearRing(coord)));
fs.SaveAs(@"C:\Users\xxxx\Desktop\polygontest.shp", false);

и вывод;

Другие вопросы по тегам