NetTopologySuite / ProjNet4GeoAPI

.NET Spatial Reference and Projection Engine
GNU Lesser General Public License v2.1
273 stars 83 forks source link

Coordinate Conversion - WGS84 to SPCS (NAD83) #112

Closed Avetis-Av closed 1 year ago

Avetis-Av commented 1 year ago

I am trying to convert WGS84 (latitude and longitude) coordinates to SPCS (northing, easting, and zone) and vice a versa using ProjNet4, I have not been able to find any documentation on SPCS and how to get the specific coordinates for this conversion. Is this supported, if yes, where can I find its documentation?

FObermaier commented 1 year ago

From the OGC WKT definition of e.g. NAD1983 SPCS Alabama I don't see what should prevent you from using this library:

// example ogc wkt for NAD83 SPCS spatial reference system 
const string spcsWkt = "PROJCS[\"NAD_1983_StatePlane_Alabama_East_FIPS_0101_Feet\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\"," +
    "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]]," +
    "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],"+
    "AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",30.5]," +
    "PARAMETER[\"central_meridian\",-85.8333333333333],PARAMETER[\"scale_factor\",0.99996],PARAMETER[\"false_easting\",656166.666666667]," +
    "PARAMETER[\"false_northing\",0],UNIT[\"US survey foot\",0.304800609601219,AUTHORITY[\"EPSG\",\"9003\"]],AXIS[\"Easting\",EAST]," +
    "AXIS[\"Northing\",NORTH],AUTHORITY[\"ESRI\",\"102629\"]]";

var csSrc = ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84;
var csTgt = (ProjNet.CoordinateSystems.CoordinateSystem)ProjNet.IO.CoordinateSystems.CoordinateSystemWktReader.Parse(spcsWkt);

var ct = new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory().CreateFromCoordinateSystems(csSrc, csTgt);

(double x, double y) = ct.MathTransform.Transform(lat, lon);

I don't have any information regarding accuracy of the transformation, though.

Avetis-Av commented 1 year ago

The project I'm working can take latitude and longitude input anywhere in the US. Is it possible to determined which zone the given coordinates are in and give the specified easting and northing?

FObermaier commented 1 year ago

You would have to code that yourself. There is a function to compute the UTM Zone based on longitude in ProjectedCoordinateSystem that might serve as example.