Определить многоугольник пересечения 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);
и вывод;