我想把距离的笛卡尔坐标“转换”成米。
我添加了
我尝试使用以下代码:
return new PagedList<Dto.DrugConsortium.CollectionSiteWithCoordinatesDto>(query.Select(p =>
new Dto.DrugConsortium.CollectionSiteWithCoordinatesDto { CollectionSite = p, Distance = p.Location.ProjectTo(2855).Distance(myLocation) }).ToList(), pageIndex, pageSize);
我的扩展名在哪里:
public static class GeometryExtensions
{
static readonly IGeometryServices _geometryServices = NtsGeometryServices.Instance;
static readonly ICoordinateSystemServices _coordinateSystemServices
= new CoordinateSystemServices(
new CoordinateSystemFactory(),
new CoordinateTransformationFactory(),
new Dictionary<int, string>
{
// Coordinate systems:
// (3857 and 4326 included automatically)
// This coordinate system covers the area of our data.
// Different data requires a different coordinate system.
[2855] =
@"
PROJCS[""NAD83(HARN) / Washington North"",
GEOGCS[""NAD83(HARN)"",
DATUM[""NAD83_High_Accuracy_Regional_Network"",
SPHEROID[""GRS 1980"",6378137,298.257222101,
AUTHORITY[""EPSG"",""7019""]],
AUTHORITY[""EPSG"",""6152""]],
PRIMEM[""Greenwich"",0,
AUTHORITY[""EPSG"",""8901""]],
UNIT[""degree"",0.01745329251994328,
AUTHORITY[""EPSG"",""9122""]],
AUTHORITY[""EPSG"",""4152""]],
PROJECTION[""Lambert_Conformal_Conic_2SP""],
PARAMETER[""standard_parallel_1"",48.73333333333333],
PARAMETER[""standard_parallel_2"",47.5],
PARAMETER[""latitude_of_origin"",47],
PARAMETER[""central_meridian"",-120.8333333333333],
PARAMETER[""false_easting"",500000],
PARAMETER[""false_northing"",0],
UNIT[""metre"",1,
AUTHORITY[""EPSG"",""9001""]],
AUTHORITY[""EPSG"",""2855""]]
"
});
public static IGeometry ProjectTo(this IGeometry geometry, int srid)
{
var geometryFactory = _geometryServices.CreateGeometryFactory(srid);
var transformation = _coordinateSystemServices.CreateTransformation(geometry.SRID, srid);
return GeometryTransform.TransformGeometry(
geometryFactory,
geometry,
transformation.MathTransform);
}
}
添加了ProjNet4GeoAPI
nuget包(版本1.4.1)
但我无法解析GeometryTransform
类,找不到它。
如何解决?
发布于 2020-09-21 22:46:21
NetTopologySuite.CoordinateSystems.Transformations命名空间下的First GeometryTransform.TransformGeometry()方法。你有没有
“使用NetTopologySuite.CoordinateSystems.Transformations;”
在你的扩展方法的顶部?
第二个,我要补充的是,2855是NorthWest华盛顿州的坐标系。我会检查一下您使用的坐标是否在该区域内。
此外,每个坐标系都有自己的测量单位。例如,SRID:4326表示几何图形的度数(笛卡尔坐标),表示地理类型的米数。
SRID:2855以英尺为单位
您可以查看此站点以获取可用坐标系的列表。https://epsg.io/
我对地理类型和转换是新的,但在我的搜索中,这是我发现的。
https://stackoverflow.com/questions/59458728
复制相似问题