24小时热门版块排行榜    

查看: 1936  |  回复: 10
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

zzahkj

木虫 (著名写手)


[交流] Vb.net+ArcEngine生成点状图层的速度太慢了该怎么办?

Vb.net+ArcEngine生成点状图层的速度太慢了该怎么办?由于我做的是预警预报系统,速度尽可能短,现在生成全部点要好几天,这也太慢了,根本就不适用,请问有什么好的办法解决吗?我的代码如下:
CODE:
Public Sub dianshengcheng()
        Dim filePath As String = My.Computer.FileSystem.CurrentDirectory & "\ResultsFileName"
        If System.IO.File.Exists(filePath & "\点.shp") Then
            MessageBox.Show("点文件已存在")
            Main.AxMapControl1.AddShapeFile(filePath, "点")
        Else
            Dim pShpWksFact As IWorkspaceFactory = New ShapefileWorkspaceFactory()
            Dim pFeatWks As IFeatureWorkspace
            pFeatWks = CType(pShpWksFact.OpenFromFile(filePath, 0), IFeatureWorkspace)
            Const strShapeFieldName As String = "shape"
            Dim pFields1 As IFields
            Dim pFieldsEdit1 As IFieldsEdit
            pFields1 = New FieldsClass()
            pFieldsEdit1 = CType(pFields1, IFieldsEdit)
            Dim pField1 As IField = New FieldClass()
            Dim pFieldEdit1 As IFieldEdit = New FieldClass()
            pFieldEdit1.Name_2 = strShapeFieldName
            pFieldEdit1.Type_2 = esriFieldType.esriFieldTypeGeometry
            pField1 = CType(pFieldEdit1, IField)
            Dim pGeomDef1 As IGeometryDef = New GeometryDefClass()
            Dim pGeomDefEdit1 As IGeometryDefEdit = New GeometryDefClass()
            pGeomDefEdit1 = CType(pGeomDef1, IGeometryDefEdit)
            pGeomDefEdit1.GeometryType_2 = esriGeometryType.esriGeometryPoint
            pGeomDefEdit1.SpatialReference_2 = Main.AxMapControl1.Map.SpatialReference
            'pGeomDefEdit1.HasZ_2 = True
            pFieldEdit1.GeometryDef_2 = pGeomDef1

            pFieldsEdit1.AddField(pField1)
            pFields1 = CType(pFieldsEdit1, IFields)

            pField1 = New Field
            pFieldEdit1 = pField1
            With pFieldEdit1
                pFieldEdit1.Length_2 = 10
                pFieldEdit1.Name_2 = "温度"
                pFieldEdit1.Type_2 = esriFieldType.esriFieldTypeDouble
            End With
            pFieldsEdit1.AddField(pField1)
            pField1 = New Field
            pFieldEdit1 = pField1
            With pFieldEdit1
                pFieldEdit1.Length_2 = 10
                pFieldEdit1.Name_2 = "盐度"
                pFieldEdit1.Type_2 = esriFieldType.esriFieldTypeDouble
            End With
            pFieldsEdit1.AddField(pField1)
            pField1 = New Field
            pFieldEdit1 = pField1
            With pFieldEdit1
                pFieldEdit1.Length_2 = 10
                pFieldEdit1.Name_2 = "水质指标"
                pFieldEdit1.Type_2 = esriFieldType.esriFieldTypeDouble
            End With
            pFieldsEdit1.AddField(pField1)
            Dim pFeatureClass1 As IFeatureClass
            pFeatureClass1 = pFeatWks.CreateFeatureClass("点", pFields1, Nothing, Nothing, esriFeatureType.esriFTSimple, strShapeFieldName, "")
            Dim pPointCol As IPointCollection = New MultipointClass()
            Dim sr As StreamReader = New StreamReader(My.Computer.FileSystem.CurrentDirectory & "\shu\dianceng.txt")
            Dim str As String = sr.ReadLine()
            While str IsNot Nothing
                Dim strs() As String = Regex.Split(str, "        ")
                Dim x As Double = Convert.ToDouble(strs(0))
                Dim y As Double = Convert.ToDouble(strs(1))
                Dim t As Double = Convert.ToDouble(strs(2))
                Dim s As Double = Convert.ToDouble(strs(3))
                Dim c As Double = Convert.ToDouble(strs(4))
                Dim pPoint As IPoint = New PointClass()
                pPoint.X = x
                pPoint.Y = y
                Dim missing As Object = Type.Missing
                pPointCol.AddPoint(pPoint, missing, missing)
                str = sr.ReadLine()
                Dim i As Integer
                For i = 0 To pPointCol.PointCount - 1 Step 1
                    Dim newFeature As IFeature = pFeatureClass1.CreateFeature
                    newFeature.Shape = pPointCol.Point(i)
                    newFeature.Value(newFeature.Fields.FindField("温度")) = t
                    newFeature.Value(newFeature.Fields.FindField("盐度")) = s
                    newFeature.Value(newFeature.Fields.FindField("水质指标")) = c
                    newFeature.Store()
                Next
            End While
            Main.AxMapControl1.Refresh()
            Main.AxMapControl1.AddShapeFile(filePath, "点")
            MessageBox.Show("文件创建成功")
        End If
    End Sub

[ Last edited by zzahkj on 2011-5-6 at 15:36 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzahkj

木虫 (著名写手)


引用回帖:
Originally posted by efeng522 at 2011-05-06 16:07:05:
这个要看你数据量的大小,如果数据量不大,那么这个效率肯定是不正常的;如果数据量确实有这么大,你就要考虑是否有必要一次性生成这么多数据,或者在这么大的空间范围内生成数据。
VB不熟,所以代码没细看,只是 ...

数据量还是非常大的,必须得一次性生成这么多数据!我也觉得这个效率不正常,可没有很好的办法解决?
3楼2011-05-06 16:25:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 11 个回答

efeng522

木虫 (初入文坛)



小木虫(金币+0.5):给个红包,谢谢回帖
这个要看你数据量的大小,如果数据量不大,那么这个效率肯定是不正常的;如果数据量确实有这么大,你就要考虑是否有必要一次性生成这么多数据,或者在这么大的空间范围内生成数据。
VB不熟,所以代码没细看,只是泛泛而谈,抛砖引玉
2楼2011-05-06 16:07:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiangling1

金虫 (正式写手)



小木虫(金币+0.5):给个红包,谢谢回帖
zzahkj(金币+10): 2011-05-07 15:43:13
后面的循环可以优化,你把For循环提出来

你把三个属性封装一下,循环一次,把三个属性赋进去值

你这样做出来的点的属性值是不对的

你多写几个函数,把这段代码分解开一定不要循环里面再有循环

速度会增加的
4楼2011-05-06 21:31:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzahkj

木虫 (著名写手)


引用回帖:
Originally posted by xiangling1 at 2011-05-06 21:31:46:
后面的循环可以优化,你把For循环提出来

你把三个属性封装一下,循环一次,把三个属性赋进去值

你这样做出来的点的属性值是不对的

你多写几个函数,把这段代码分解开一定不要循环里面再有循环

速度会 ...

谢谢你啊!我去掉了里面一个循环,6000多个点生成要二十几分钟,这个速度是不是还慢呢?我听说一秒钟就可以生成上万个点才是正常的?
5楼2011-05-07 10:15:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[论文投稿] 申请回稿延期一个月,编辑同意了。但系统上的时间没变,给编辑又写邮件了,没回复 10+3 wangf9518 2026-03-17 4/200 2026-03-19 23:55 by babero
[考研] 材料学硕318求调剂 +5 February_Feb 2026-03-19 5/250 2026-03-19 23:51 by 23Postgrad
[考研] 0817 化学工程 299分求调剂 有科研经历 有二区文章 +18 rare12345 2026-03-18 18/900 2026-03-19 22:36 by 学员8dgXkO
[考研] 复试调剂 +4 z1z2z3879 2026-03-14 6/300 2026-03-19 17:18 by fei626-918
[考研] 一志愿天津大学化学工艺专业(081702)315分求调剂 +11 yangfz 2026-03-17 11/550 2026-03-19 15:06 by houyaoxu
[考研] 一志愿西安交通大学材料工程专业 282分求调剂 +5 枫桥ZL 2026-03-18 7/350 2026-03-19 14:52 by 功夫疯狂
[考研] 085600材料与化工求调剂 +6 绪幸与子 2026-03-17 6/300 2026-03-19 13:27 by houyaoxu
[考研] 328求调剂,英语六级551,有科研经历 +4 生物工程调剂 2026-03-16 12/600 2026-03-19 11:10 by 生物工程调剂
[考研] 328求调剂,英语六级551,有科研经历 +3 生物工程调剂 2026-03-17 7/350 2026-03-18 20:41 by Wangjingyue
[考研] 344求调剂 +6 knight344 2026-03-16 7/350 2026-03-18 20:13 by walc
[考研] 【同济软件】软件(085405)考研求调剂 +3 2026eternal 2026-03-18 3/150 2026-03-18 19:09 by 搏击518
[考研] 311求调剂 +11 冬十三 2026-03-15 12/600 2026-03-18 14:36 by 星空星月
[考研] 298-一志愿中国农业大学-求调剂 +7 手机用户 2026-03-17 7/350 2026-03-18 14:34 by vgtyfty
[考研] 304求调剂 +12 小熊joy 2026-03-14 13/650 2026-03-18 12:34 by Linda Hu
[考博] 26博士申请 +3 1042136743 2026-03-17 3/150 2026-03-17 23:30 by 轻松不少随
[考研] 277调剂 +5 自由煎饼果子 2026-03-16 6/300 2026-03-17 19:26 by 李leezz
[考研] 304求调剂 +5 素年祭语 2026-03-15 5/250 2026-03-16 17:00 by 我的船我的海
[考研] 304求调剂 +3 曼殊2266 2026-03-14 3/150 2026-03-16 16:39 by houyaoxu
[考研] 中科大材料与化工319求调剂 +3 孟鑫材料 2026-03-14 3/150 2026-03-14 20:10 by ms629
[考研] 311求调剂 +3 冬十三 2026-03-13 3/150 2026-03-13 20:41 by JourneyLucky
信息提示
请填处理意见