需要在VB.NET的一个小项目的开发者$
通过私人消息向我发送估价和小时费率基本导入Autocad MAP 3D
1。使用dotspatial导入折线/直线2。用于选择我要导入的图层的选项
3。导入信号时的进度条
**** Hidden Message ***** 你没有回复我,但我最后还是用C#写了你想要的东西。
导入shapefile是最容易的部分。更有趣的部分是绘制坐标系和实体的代码。
问题是,dotspatial没有像CA83-VIF那样通过“简称”指定坐标系统的简单方法。
您必须使用autodesk(免费)的Mapguide API,获取数字代码,然后输入到dotspatial。
下面是我如何访问shapefile及其功能,并获得点和pline属性的简化列表。
您可以适应获取文本和其他特征道具。我检查了一下,这个特性中有“gis数据”,只是我还没有用它做任何事情。
//returns lists of (("point", color, width, coord)("polyline", color, width, coords)..)
public List GetFromShpFile(string shpfname, string sourceSystem, string targetSystem, bool StartingProgress) {
if (StartingProgress) StartProgress("Reading Shapefile...", 2, true);
//make list of return objects
List> retItems = new List>();
try {
//get epsg codes
MgCoordinateSystemFactory coordSysFactory = new MgCoordinateSystemFactory();
string baseSysWkt = coordSysFactory.ConvertCoordinateSystemCodeToWkt(sourceSystem);
string targetSysWkt = coordSysFactory.ConvertCoordinateSystemCodeToWkt(targetSystem);
MgCoordinateSystem srcCs = coordSysFactory.Create(baseSysWkt);
MgCoordinateSystem dstCs = coordSysFactory.Create(targetSysWkt);
int srccode = srcCs.EpsgCode;
int tgtcode = dstCs.EpsgCode;
//now read into dotspacial
Shapefile sf = Shapefile.OpenFile(shpfname);
//look at sf.ProjectionString
if (!File.Exists(Path.GetDirectoryName(shpfname) + "\\" + Path.GetFileNameWithoutExtension(shpfname) + ".prj"))
sf.Projection = ProjectionInfo.FromEpsgCode(srccode);
sf.Reproject(ProjectionInfo.FromEpsgCode(tgtcode));
//loop through items
//will be DotSpatial.Topology.FeatureType. Line, Point, MultiPoint, Polygon, Unspecified
bool DoClose = false;
DoClose = DoProgress("Reading linework...", sf.Features.Count);
int index = 0;
int done = 0;
foreach (Feature ft in sf.Features) {
if (!DoClose) {
//message every 10 items
if (done == 9) {
DoClose = DoProgressBy("Reading linework...", index);
done = 0;
}
DotSpatial.Topology.FeatureType typ = ft.FeatureType;
string color = "";
string width = "";
if (typ == FeatureType.Line || typ == FeatureType.Polygon) {
//coords
StringBuilder coords = new StringBuilder("");
foreach (Coordinate crd in ft.Coordinates) {
coords.Append(new CE.Point(crd.X, crd.Y, (double.IsNaN(crd.Z) ? 0.0 : crd.Z)).ToXYZString());
coords.Append(" ");
}
if (coords.Length > 0)
retItems.Add(new List() { "polyline", color, width, coords.ToString() });
}
else if (typ == FeatureType.Point) {
//coords
StringBuilder coords = new StringBuilder("");
foreach (Coordinate crd in ft.Coordinates) {
coords.Append(new CE.Point(crd.X, crd.Y, (double.IsNaN(crd.Z) ? 0.0 : crd.Z)).ToXYZString());
coords.Append(" ");
}
if (coords.Length > 0)
retItems.Add(new List() { "point", color, width, coords.ToString() });
}
else if (typ == FeatureType.MultiPoint) {
//coords
StringBuilder coords = new StringBuilder("");
foreach (Coordinate crd in ft.Coordinates) {
retItems.Add(new List() { "point", color, width, new CE.Point(crd.X, crd.Y, (double.IsNaN(crd.Z) ? 0.0 : crd.Z)).ToXYZString() });
}
}
else if (typ == FeatureType.Unspecified) {
}
}
index++;
done++;
}
EndProgress(StartingProgress);
}
catch { }
finally {
CloseProgress(StartingProgress);
}
return new List() { retItems };
}
您可以忽略与进度相关的项目,但Norman Yuan在
http://drive-CAD-with-code . blogspot . ca/2015/04/showing-progress-for-long-code . html
我提到的mapguide引擎就是autodesk在Map3D中使用的。这很疯狂,但他们实际上是免费赠送的,你可以在任何地方使用。你想要的. net程序。
我们在Bricscad和basic acad中使用它进行许多事情,例如制作和导入kmz。
我无法发布我的整个程序。我们公司还没有销售任何软件。
顺便说一句,Dotsoft有便宜的完整工具来导入和导出形状文件,比我给你的信息量便宜<相信我,他的代码也不是vb.net。有经验的人使用C#,因为它感觉更像是C++而好的助手大多是C++人。
嗨
,你必须原谅我没有联系你,我已经有一个程序员
从那时起,我一直没有使用计算机,直到现在
感谢jmaeding的C#代码
,我上传了我从程序员那里得到的代码
,如果有人感兴趣并且可以使用代码
---
这就是兴趣导入dotspatial的原因
,如果你去这个网站,那么在一起开发更多软件中
,你可以看到CAD软件和他们中的许多人没有选项导入SHP文件
https://www.intellicad.org/
我已经完成了购买ZWCAD,但我更喜欢progeCAD
问候
Sigster
没问题,我为我的工具做了工作,这些工具在acad、bricscad中运行,可以为任何有. net api的东西运行。
您的代码跳过了处理坐标系——这是任务中比较棘手的部分之一。
如我所说,问题是让用户容易地选择系统,因为他们通常知道短名称,但是dotspacial不处理短名称。
此外,它不会对附着的数据进行任何操作,例如设置高程或图层。
在我看来,点空间部分很容易理解,它是坐标系统,使用附加数据,并在acad中绘制项目,这很有趣。
我已经从我的kmz导入工具中获得了这些部分,所以只需切换出生成细分信息的部分。比如玩乐高。
页:
[1]