我想使用shapefile的内容在纬度/经度上绘制"XAML Map Control"上的折线.
我有2种shapefile:
使用各种库(Net Topology Suite,现在是DotSpatial)读取这两种类型的文件,我获得了一个坐标列表(DotSpatial.Topology.Coordinate),如:
X 456874.625438354
Y 5145767.7929015327
Run Code Online (Sandbox Code Playgroud)
所以我有一堆代表多多边形的 WKT。我专门使用 DotSpatial 来操作几何图形。具体来说,我试图从我的 WKT 中获取 DotSpatial.Topology.IGeometry。
不幸的是,DotSpatial 的家伙最近将很多东西移到了 NetTopologySuit 中,这就是他们的 WKTreader 所在的地方。
但是读取器传回一个 GeoAPI.Geometries.IGeometry,您不能将其强制转换为 DotSpatial.Topology.IGeometry,因为它们不是同一个类。不得不在三个不同的 API(DotSpatial、GeoAPI 和 NetTopologySuite)之间转换本质上相同的类,这让我感到有点恼火,这些 API 都具有类似的名称。
我想要做的就是从众所周知的文本中提取 DotSpatial.Topology.IGeometry。具体来说,它是我正在使用的 MultiPolygon,但无论如何。
我真的不想有一些很好的条件或选择语句来弄清楚如何处理 GeoAPI IGeometry 类以便我可以使用它。我已经有一个很大的转换器类,用于将各种几何类转换为 dotSpatial,我宁愿完全摆脱它。更少的代码是更好的代码。
任何人都可以协助将 GeoAPI.Geometries.IGeometry 转换为 DotSpatial.Geometries.IGeometry 吗?当我收到以下错误时,我不能直接投射它:无法将“NetTopologySuite.Geometries.MultiPolygon”类型的对象投射到“DotSpatial.Topology.IGeometry”类型。
有任何想法吗?
提前致谢,E
我有这个简单的代码行 DotSpatial
var raster = Raster.OpenFile("X://Data//4mr_project.tif");
Run Code Online (Sandbox Code Playgroud)
为什么栅格只是获得空值?
我也有.aux,.ovr,.tfw在同一个目录中的文件.
编辑:
我发现下面这行很好用:
var featureSet = FeatureSet.Open("X:\\Test Data\\shap\\edited.shp")
Run Code Online (Sandbox Code Playgroud)
因为Dotspatial有能力.shp默认加载文件.但是加载栅格数据.tif格式,Dotspatial需要GDAL扩展.现在问题是如何GDAL在Dotspatial使用中手动加载扩展C#.
我在我的数据库中有EPSG 3857格式的坐标列表.我需要在EPSG 4326中转换它们我试图使用DotSpatial,但我的代码总是重新调整一个无限的双数组.
public double[] ConvertCoodinates()
{
double[] xy = new double[2];
xy[0] = 5085240.8300000000;
xy[1] = 1530088.9600000000;
//An array for the z coordinate
double[] z = new double[1];
z[0] = 0;
ProjectionInfo pStart = KnownCoordinateSystems.Geographic.World.WGS1984;
pStart.AuthorityCode = 3857;
ProjectionInfo pEnd = KnownCoordinateSystems.Geographic.World.WGS1984;
pEnd.AuthorityCode = 4326;
Reproject.ReprojectPoints(xy, z, pStart, pEnd, 0, 1);
return xy;
}
Run Code Online (Sandbox Code Playgroud)
xy数组总是无穷大; 有人能帮我吗?
我正在尝试从特定形状文件中读取所有特征数据。在本例中,我使用 DotSpatial 打开文件,并迭代这些功能。这个特定的 shapefile 文件大小仅为 9mb,dbf 文件大小为 14mb。大约有 75k 个特征需要循环。
请注意,这一切都是通过控制台应用程序以编程方式进行的,因此不涉及渲染或任何操作。
加载形状文件时,我重新投影,然后进行迭代。加载和重新投影非常快。然而,一旦代码到达我的 foreach 块,就需要将近 2 分钟来加载数据,并且在 VisualStudio 中调试时使用大约 2GB 内存。对于相当小的数据文件来说,这似乎非常非常过分。
我已经在 Visual Studio 之外从命令行运行了相同的代码,但是时间仍然大约是 2 分钟,并且该进程需要大约 1.3GB 的内存。
有什么办法可以加快速度吗?
下面是我的代码:
// Load the shape file and project to GDA94
Shapefile indexMapFile = Shapefile.OpenFile(shapeFilePath);
indexMapFile.Reproject(KnownCoordinateSystems.Geographic.Australia.GeocentricDatumofAustralia1994);
// Get's slow here and takes forever to get to the first item
foreach(IFeature feature in indexMapFile.Features)
{
// Once inside the loop, it's blazingly quick.
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我使用VS立即窗口时,它超级超级快,完全没有延迟......