24小时热门版块排行榜    

查看: 1935  |  回复: 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的回帖

xiangling1

金虫 (正式写手)



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

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

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

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

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

efeng522

木虫 (初入文坛)



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

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的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 265求调剂 +4 梁梁校校 2026-03-19 4/200 2026-03-20 00:03 by 23Postgrad
[考研] 271材料工程求调剂 +6 .6lL 2026-03-18 6/300 2026-03-19 15:41 by haoshis
[考研] 332求调剂 +3 ydfyh 2026-03-17 3/150 2026-03-19 10:14 by 功夫疯狂
[考研] 304求调剂 +6 司空. 2026-03-18 6/300 2026-03-18 23:03 by 星空星月
[考研] 一志愿武理材料305分求调剂 +5 想上岸的鲤鱼 2026-03-18 6/300 2026-03-18 17:53 by 无际的草原
[考研] 085601专硕,总分342求调剂,地区不限 +5 share_joy 2026-03-16 5/250 2026-03-18 14:48 by haxia
[考研] 311求调剂 +6 26研0 2026-03-15 6/300 2026-03-18 14:43 by haxia
[考研] 材料专硕306英一数二 +10 z1z2z3879 2026-03-16 13/650 2026-03-18 14:20 by 007_lilei
[考研] 环境工程调剂 +8 大可digkids 2026-03-16 8/400 2026-03-18 09:36 by zhukairuo
[考研] 301求调剂 +4 A_JiXing 2026-03-16 4/200 2026-03-17 17:32 by ruiyingmiao
[考研] 材料与化工专硕调剂 +5 heming3743 2026-03-16 5/250 2026-03-17 14:03 by 勇敢太监王公公
[考研] 材料工程专硕274一志愿211求调剂 +6 薛云鹏 2026-03-15 6/300 2026-03-17 11:05 by 学员h26Tkc
[考研] 药学383 求调剂 +3 药学chy 2026-03-15 4/200 2026-03-16 20:51 by 元子^0^
[考研] 318求调剂 +3 Yanyali 2026-03-15 3/150 2026-03-16 16:41 by houyaoxu
[考研] 321求调剂 +5 大米饭! 2026-03-15 5/250 2026-03-16 16:33 by houyaoxu
[考研] 070303 总分349求调剂 +3 LJY9966 2026-03-15 5/250 2026-03-16 14:24 by xwxstudy
[考研] 求老师收留调剂 +4 jiang姜66 2026-03-14 5/250 2026-03-15 20:11 by Winj1e
[考研] 22408总分284求调剂 +3 InAspic 2026-03-13 3/150 2026-03-15 11:10 by zhq0425
[考研] 本科南京大学一志愿川大药学327 +3 麦田耕者 2026-03-14 3/150 2026-03-14 20:04 by 外星文明
[考研] 290求调剂 +3 ADT 2026-03-13 3/150 2026-03-13 10:19 by peike
信息提示
请填处理意见