gpt4 book ai didi

c# - 如何确定一个点是否在 shapefile 中的形状内?

转载 作者:太空狗 更新时间:2023-10-29 20:10:29 26 4
gpt4 key购买 nike

我有一个 shapefile 定义覆盖城市的形状。我还有一组由纬度和经度定义的坐标。

我需要能够确定这些点是否位于 shapefile 中的任何形状内。

目前我正在尝试使用 easygis.net 来解决这个问题,但它似乎不起作用。

我相信 shapefile 中的坐标采用 UTM,但北向偏移,我不知道如何更正它、将其转换为纬度/经度或转换我的纬度/经度对以匹配。

我一直在查看其他库,如 dotspatial 和 sharpmap,但我没有看到问题的直观答案。

同时,我确信这是一个已经解决的问题。有没有图书馆可以轻松做到这一点?或者我如何将 map 的偏移 UTM 转换为经/纬度,或者我的经/纬度点转换为此偏移 UTM?

最佳答案

下面是一些示例代码,说明您如何使用 DotSpatial 首先处理重投影,然后使用 Contains 方法测试点是否在多边形中。

    public bool PointInShape() {
// Load a shapefile. If the shapefile is already using your custom projection, we don't need to change it.
Shapefile wierdShapefile = Shapefile.OpenFile("C:\\MyShapefile.shp");

// Note, if your shapefile with custom projection has a .prj file, then we don't need to mess with defining the projection.
// If not, we can define the projection as follows:

// First get a ProjectionInfo class for the normal UTM projection
ProjectionInfo pInfo = DotSpatial.Projections.KnownCoordinateSystems.Projected.UtmNad1983.NAD1983UTMZone10N;

// Next modify the pINfo with your custom False Northing
pInfo.FalseNorthing = 400000;

wierdShapefile.Projection = pInfo;

// Reproject the strange shapefile so that it is in latitude/longitude coordinates
wierdShapefile.Reproject(DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984);

// Define the WGS84 Lat Lon point to test
Coordinate test = new Coordinate(-120, 40);

foreach (Feature f in wierdShapefile.Features) {
Polygon pg = f.BasicGeometry as Polygon;
if (pg != null)
{
if (pg.Contains(new Point(test)))
{
// If the point is inside one of the polygon features
return true;
}
}
else {
// If you have a multi-part polygon then this should also handle holes I think
MultiPolygon polygons = f.BasicGeometry as MultiPolygon;
if (polygons.Contains(new Point(test))) {
return true;
}
}
}

return false;
}

关于c# - 如何确定一个点是否在 shapefile 中的形状内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16862791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com