基于arcgis和NET架构地图匹配软件二次开发笔记.docx
《基于arcgis和NET架构地图匹配软件二次开发笔记.docx》由会员分享,可在线阅读,更多相关《基于arcgis和NET架构地图匹配软件二次开发笔记.docx(12页珍藏版)》请在冰豆网上搜索。
![基于arcgis和NET架构地图匹配软件二次开发笔记.docx](https://file1.bdocx.com/fileroot1/2023-2/26/91f4fe92-54d9-449c-bba9-baa9822cf3f5/91f4fe92-54d9-449c-bba9-baa9822cf3f51.gif)
基于arcgis和NET架构地图匹配软件二次开发笔记
基于arcgis和.NET架构
地图匹配软件二次开发笔记
--仅供个人学习使用,不可用于商业用途
2020-04-12
1搭建框架
1.1建立项目。
1.2添加工具箱D:
\rjaz\arcgis\DeveloperKit10.0\DotNet\ToolBox,引用自动跟随控件自动添加,故无需额外添加引用。
1.3拖动控件到窗体。
1.4加入代码到main:
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
1.5ArcEngine开发常见报错原因分析及解决方法:
2GPS数据导入Oracle
2.1imp导入,已经导入A1,表空间达到32G,不可再次导入,
后面已经解决,参见10
3未能加载文件或程序“ESRI.ArcGIS.Carto,Version=10.0.
0.0,Culture=neutral,PublicKeyToken=8fc3cc631
1、解决方案资源管理器窗口中,右键项目==》属性
2、在弹出的属性页面中,选择“生成”选项卡
3、修改“生成”选项卡里面的“目标平台”为:
"X86"
4、重新编译程序OK
4vs2015不支持ArcGISEngine以及丢失控件和模板解决办法
问题二:
vs中没有arcgis模板—vs新建项目时,项目类型中没有ArcGis一项
图片用的网上找的,不是自己截图,看个意思就好。
这里ArcGis模板下面有三项,DeskTopAdd-Ins,ExtendingArcObjects和SeverObjectExtensions。
这取决于你装了什么。
模板不出现的解决办法:
第一步:
将模板文件拷贝到vs模板库中,我的VS和ArcGis都安装在D盘,安装时ArcGis模板文件放在C:
\ProgramFiles(x86)\MicrosoftVisualStudio9.0\Common7\IDE\ItemTemplates\CSharp和C:
\ProgramFiles(x86)\MicrosoftVisualStudio9.0\Common7\IDE\ItemTemplates\CSharp中,将模板(两个文件夹下的ArcGIS文件夹)拷贝至vs2015模板文件位置:
D:
\rjaz\vs2013\Common7\IDE\ItemTemplates\CSharp和D:
\rjaz\vs2013\Common7\IDE\ProjectTemplates\CSharp中。
第二步:
用右键,管理员权限运行devenv.exe,就是启动vs2015
第三步:
重新安装一次模板(引用的)我的是vs2015
按照以下顺序,打开VS2015的命令行工具:
开始-->所有应用-->MicrosoftVisualStudio2015-->vs2015开发人员命令提示(可能会叫VisualStudio2015CommandPrompt)(VS2015开发人员命令提示)
然后执行如下命令:
devenv.exe/InstallVSTemplates
需要注意的事情是,这个命令执行后,不会马上出现项目或项模板,需要重新打开vs2015,新建时会重新初始化模板。
如果第三步有问题,换成用管理员权限运行。
第四步:
对于已有项目,需要重新生成解决方案。
(新建项目请忽略此步骤)
Java
5eclipse配置JDK
6Thecontainer'MavenDependencies'referencesnonexistinglibrary
7maven使用过程中遇到的问题(依赖jar文件下载失败等)
8解决PLSQL报错"动态执行表不可访问,本会话的自动统计被禁止"本文章已收录于:
使用PLSQL,第一次执行表的select操作的时候,提示"动态执行表不可访问,本会话的自动统计被禁止"
这种问题,一看就是当前连接用户没有对sys用户下的表v$session,v$sesstat,v$statname的select权限
解决此问题的方式就是授权:
以sysdba身份登录
grantselectonv_$statnametousername;
grantselectonv_$sesstattousername;
grantselectonv_$sessiontousername;
grantselectonv_$mystattousername;
9---查询表空间使用率
SELECTtotal.tablespace_name,
Round(total.MB,2)ASTotal_MB,
Round(total.MB-free.MB,2)ASUsed_MB,
Round((1-free.MB/total.MB)*100,2)
||'%'ASUsed_Pct
FROM(SELECTtablespace_name,
Sum(bytes)/1024/1024ASMB
FROMdba_free_space
GROUPBYtablespace_name)free,
(SELECTtablespace_name,
Sum(bytes)/1024/1024ASMB
FROMdba_data_files
GROUPBYtablespace_name)total
WHEREfree.tablespace_name=total.tablespace_name;
10调整和增加表空间
sys用户下执行:
selecttablespace_name,sum(bytes)/1024/1024fromdba_free_spacegroupbytablespace_name
select*fromdba_data_filestwheret.tablespace_name='SDE'
alterdatabasedatafile'C:
\APP\ZHAO\PRODUCT\11.2.0\DBHOME_1\SDE.DBF'resize30720M(注意空格)
altertablespaceSDEadddatafile'D:
\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\SDE01.DBF'size30720M
读取空间数据步骤
获取文件信息-获取文件目录名称-获取文件名
创建工作空间工厂-----创建工作空间-----创建要素工作空间-----要素类-----要素游标----要素-开始loop
SDE数据一定要使用工作空间工厂去初始化工作空间,在工作空间打开FeatureClass,这是最常规的操作
stringstrFielPath="C:
\\aa.shp";
FileInfofileInfo=newFileInfo(strFielPath);
stringfileDirectoryName=fileInfo.Directory
Name;
stringfileName=fileInfo.Name;
IWorkspaceFactoryworkspaceFactory=newShapefileWorkspaceFactoryClass();
IWorkspaceworkspace=workspaceFactory.OpenFromFile(fileDirectoryName,0);
IFeatureWorkspacefeatureWorkspace=workspaceasIFeatureWorkspace;
IFeatureClassfeatureClass=featureWorkspace.OpenFeatureClass(fileName);
IFeatureCursorfeatureCursor=featureClass.Search(null,false);
IFeaturefeature=featureCursor.NextFeature();
while(feature!
=null)
{
IGeometrygeoMetry=feature.Shape;//得到的每个数据
feature=featureCursor.NextFeature();
}
11GPS数据怎么从SDE中获取,怎么加载到图层上
方案1
第一步,获取GPS的X,Y坐标
第二步,创建GPS图层
方案2
第一步,把GPS数据转化成shp文件(暂时用arcgis实现)
读取GPS坐标
第二步,加载GPS的shp文件
12如何的自由的存取GPS点,或者自由的存取shp文件的属性值
13怎么计算点到直线的最短距离,
怎么找到垂足,
怎么取得垂足,
怎么把垂足加载到地图上并且显示,
怎么把垂足的信息存储到SDE中
14数据集和要素类都有空间参考系
15求点到线的最短距离
IProximityOperator
IProximityOperator接口的主要方法有:
ReturnDistance方法用于返回两个几何对象间的最短距离,
QueryNearesPoint方法用于查询获取几何对象上离给定输入点的最近距离的点的引用,ReturnNearestPoint方法用于创建并返回几何对象上离给定输入点的最近距离的点。
16匹配过程(GPS点修正过程):
实现GPS点到投影到最近距离的线上,取得该垂足,更新GPS的X,Y坐标
解决这5个步骤,那么GPS地图匹配任务最核心的任务完成!
18修正GPS步骤
1取得一个点
2创建buffer
3找到buffer区的线元素集合
4分别求点到线的所有垂直距离
5取得垂直距离最小的点的X,Y坐标
6替换原来点的GPS坐标
取得最小距离对应的点
1先读取所有的图层
2查询所有图层的buffer区域的要素,放入一个临时图层中
3读取临时图层中的所有要素
19修正GPS点过程中关闭arcmap和数据库,防止要素图层被占用和锁定导致无法修改数据库中的属性。
20修正步骤
1按照车牌号分类GPS点,放入新表中
2按照时间排序,从早到晚升序排列
3从表中取得点,进行修正
4存入新的表中
5生成shp文件
21为什么修改数据库中的gps,X,Y坐标后,shp文件中点的位置不改变?
22SDE中多出的几何图形属性怎么得来的,怎么进行修改?
23道路匹配之交叉路口
在道路匹配中,交叉路口的匹配是最复杂的。
常见的问题有三种,一是在错误的道路行驶一小段距离后,才跳到正确的路上;二是位置更新太慢,然后突然跳动;三是角度反映太慢。
匹配错误的原因有三种,一、优先匹配原来道路时,向前行驶了一段距离。
二、以交叉路口为中心划定一个范围,在此范围内不做更新。
三、现实中交叉路口和数据中的道路模型有差异(比如,交叉路口会有一些虚拟的道路)。
四、GPS的误差。
位置更新慢的原因有两个:
一是在交叉路口的行走轨迹和数据中的道路模型不完全相同,在数据中,两条路是必交叉于一点,而实际上在交叉点之前就已经开始拐弯,拐弯不一定经过交叉点。
在没有完全到达新路之前,均有可能在交叉点前的路段上。
二是为了回避匹配错误,而采取的延迟策略。
角度是利用前后点经纬度计算出来的,角度更新慢的原因,一是位置更新慢。
导致变化慢,二是角度采取了折中策略,导致变化小。
在我们的开发过程中,尝试过多种数学方法来回避这些问题,如调整匹配的误差范围;增加对道路数据中通行属性的利用;对应交叉路口进行范围限制等等,最终效果都不甚理想。
曾经有部分厂商,在汽车的轴承上安装转弯、倾斜传感器,并配合道路网数据和倾斜数据,以提高匹配的准度。
用于手机、PND的导航系统中,有什么低成本的方式,大大提高拐弯时的准度吗?
答案是,利用好GPS穿过来的角度和速度。
在速度不是过低时,从GPS传过来的值是比较稳定的,可信度是很高的。
如果能够确定前方路口,并且在进入前方路口之前,将可能通行的道路都找出来,在距离前方交叉路口一定距离的地方,放弃以垂直牵引距离优先算法的匹配,改为利用GPS角度和速度变化趋势来进行道路匹配。
有一组实验数据,如果以25公里/时的速度,拐一个90度的弯,会接到四次明显的角度变化。
如果速度提高到45公里/时,接到的角度更新次数是3次。
那么,如果我们在第一次角度发生明显改变时,利用角度所在的象限,排除一些不符合条件的候选道路,同时返回GPS角度,将经纬度更新到交叉点上。
然后利用下一次,或下下次的GPS角度,进一步明确目标道路。
如果交叉路口很复杂的时候,可以等到角度不再发生明显变化时,再确定最终的道路。
如上图中,汽车从D—>O—>B行驶,带方向的红色点是GPS模块得到轨迹点,在距离O点还有15m的时候,就采用交叉点特殊匹配算法。
将前方可通行的道路作为候选道路,角度没有发生明显变化的时候,就优先匹配到原路段上,当第一次角度发生明显变化时,将点匹配到O点上,同时使用GPS得到的角度,根据此角度可将OC、OO'路段排除了。
当第二次角度发生明显变化时,就可以确定OB为下一个将要行走的路段。
考虑到拐弯处,速度会一般会有明显变化,因此可以作为拐弯判断一个权值较低的判定因素。
24删除表中重复记录
1、删除表中多余重复记录,根据单字段(peopleId)来判断,只留有rowid最小的记录
deletefrompeople
wherepeopleIdin(selectpeopleIdfrompeoplegroupbypeopleIdhavingcount(peopleId)>1)
androwidnotin(selectmin(rowid)frompeoplegroupbypeopleIdhavingcount(peopleId)>1)
2、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
deletefromTBIZ_GMS_GPS_HIS_C1a
where(a.FPASSNO,a.FSTATUSDATE,a.FDATE)in(selectFPASSNO,FSTATUSDATE,FDATEfromTBIZ_GMS_GPS_HIS_C1groupbyFPASSNO,FSTATUSDATE,FDATEhavingcount(*)>1)
androwidnotin(selectmin(rowid)fromTBIZ_GMS_GPS_HIS_C1groupbyFPASSNO,FSTATUSDATE,FDATEhavingcount(*)>1)
25HRESULT:
0x80040215
在使用ITopologicalOperator求交集等操作的时候,有时会出现“
HRESULT:
0x80040215”这个异常,原来是空间参考不一样所致。
将 SpatialReference
属性设为同一空间参考就不会出现HRESULT:
0x80040215异常啦。
26怎么取得两个连续的点
平行道路上,怎么匹配到一条道路上
以一天为单位进行匹配和画出轨迹,合理
27怎么判断拐弯,拐弯表示可能会有交叉口
GPS点的角度持续变化
Buffer区域是否有交叉点,没有就是简单的交叉口,有就作复杂交叉口处理,
28空间查询终极版,可以实现sortby
29怎么让轨迹显示成和路段一样的曲线,怎么提取点所在的路段,并加入到新的图层中
选取指定位置,指定长度的路线,生成轨迹图层,显示所有的信息
30判断几何空间关系
IRelationalOperator接口
31读取数据内存溢出,过慢的问题,怎么解决
使用游标
32关于sde ora-01000:
超出打开游标的最大数问题
33ArcEngine错误提示
34arcgisengine常用方法
35怎么获取第一条直线相交的线,相交的线尽可能的少,且最有可能是候选的线
怎么获取第二条直线相交的线,尽可能的少
36ArrayList删除集合中某一属性相同的元素
37怎么提高ArcSDEforOracle写入地理数据库的效率
38深入理解游标Cursors,实现数据的快速查找,插入,删除,更新