sigster 发表于 2018-2-1 09:19:01

需要在VB.NET的一个小项目的开发者$

通过私人消息向我发送估价和小时费率
基本导入Autocad MAP 3D
1。使用dotspatial导入折线/直线2。用于选择我要导入的图层的选项
3。导入信号时的进度条
**** Hidden Message *****

jmaeding 发表于 2018-2-15 10:59:28

你没有回复我,但我最后还是用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。
我无法发布我的整个程序。我们公司还没有销售任何软件。

jmaeding 发表于 2018-2-15 11:26:51

顺便说一句,Dotsoft有便宜的完整工具来导入和导出形状文件,比我给你的信息量便宜<相信我,他的代码也不是vb.net。有经验的人使用C#,因为它感觉更像是C++而好的助手大多是C++人。

sigster 发表于 2018-2-22 07:16:49



,你必须原谅我没有联系你,我已经有一个程序员
从那时起,我一直没有使用计算机,直到现在
感谢jmaeding的C#代码
,我上传了我从程序员那里得到的代码
,如果有人感兴趣并且可以使用代码
---
这就是兴趣导入dotspatial的原因
,如果你去这个网站,那么在一起开发更多软件中
,你可以看到CAD软件和他们中的许多人没有选项导入SHP文件
https://www.intellicad.org/
我已经完成了购买ZWCAD,但我更喜欢progeCAD
问候
Sigster

jmaeding 发表于 2018-2-22 11:19:25

没问题,我为我的工具做了工作,这些工具在acad、bricscad中运行,可以为任何有. net api的东西运行。
您的代码跳过了处理坐标系——这是任务中比较棘手的部分之一。
如我所说,问题是让用户容易地选择系统,因为他们通常知道短名称,但是dotspacial不处理短名称。
此外,它不会对附着的数据进行任何操作,例如设置高程或图层。
在我看来,点空间部分很容易理解,它是坐标系统,使用附加数据,并在acad中绘制项目,这很有趣。
我已经从我的kmz导入工具中获得了这些部分,所以只需切换出生成细分信息的部分。比如玩乐高。
页: [1]
查看完整版本: 需要在VB.NET的一个小项目的开发者$