I want to draw a polyline on "XAML Map Control" with latitude/longitude, using the content of a shapefile.
I have 2 types of shapefile:
Reading with both type of files with various libraries (Net Topology Suite, and now DotSpatial) i obtain a list of coordinates (DotSpatial.Topology.Coordinate) like:
X 456874.625438354
Y 5145767.7929015327
You can use DotSpatial to reproject to lat long. If you are reading in the shapefile, and the .prj file is there so that the projection is known, then all you need to do is:
Shapefile sf = Shapefile.OpenFile("C:\myshapefile.shp");
sf.Reproject(DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984);
If, however the .prj file is missing, then you will need to first define the projection like:
Shapefile sf = Shapefile.OpenFile("C:\myshapefile.shp");
sf.Projection = DotSpatial.Projections.KnownCoordinateSystems.Projected.UtmWgs1984.WGS1984UTMZone32N;
sf.Reproject(DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984);
But if, for instance you don't have a shapefile and you just want to reproject a set of coordinates from one projection to another, you can use the reproject utility directly:
// 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);
This last method uses an array like that so that the projection module can work without having a direct reference to the data module.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With