Считывание координат шейп-файла в c#
Я хочу нарисовать полилинию на "XAML Map Control" с широтой/долготой, используя содержимое шейп-файла.
У меня есть 2 типа шейп:
- С одной .ДБФ .PRJ и qpj успешно, .shx и очевидно .файл shp.
- один только .shp файл
чтение с обоими типами файлов с различными библиотеками (Net Topology Suite, а теперь DotSpatial) я получаю список координат (DotSpatial.Топология.Координировать) например:
X 456874.625438354
Y 5145767.7929015327
- как я могу конвертировать в формат широты / долготы?
- каков текущий формат?
- являются файлы, которые сопровождают .шп файл?
1 ответов
вы можете использовать DotSpatial для перепроектирования в lat long. Если Вы читаете в шейп-файле, и то .prj файл есть, так что проекция известна, то все, что вам нужно сделать, это:
Shapefile sf = Shapefile.OpenFile("C:\myshapefile.shp");
sf.Reproject(DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984);
Если, однако .prj файл отсутствует, то вам нужно будет сначала определить проекцию, как:
Shapefile sf = Shapefile.OpenFile("C:\myshapefile.shp");
sf.Projection = DotSpatial.Projections.KnownCoordinateSystems.Projected.UtmWgs1984.WGS1984UTMZone32N;
sf.Reproject(DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984);
но если, например, у вас нет шейп-файла и вы просто хотите перепроектировать набор координат из одной проекции в другую, вы можете использовать утилиту reproject напрямую:
// interleaved x and y values, so like x1, y1, x2, y2 etc.
double[] xy = new double[]{456874.625438354,5145767.7929015327};
// z values if any. Typically this is just 0.
double[] z = new double[]{0};
// Source projection information.
ProjectionInfo source = DotSpatial.Projections.KnownCoordinateSystems.Projected.UtmWgs1984.WGS1984UTMZone32N;
// Destination projection information.
ProjectionInfo dest = DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984;
// Call the projection utility.
DotSpatial.Projections.Reproject.ReprojectPoints(xy, z, source, dest, 0, 1);
этот последний метод использует такой массив, чтобы проекционный модуль мог работать без прямой ссылки на модуль данных.