本发明涉及信息技术领域,提供了一种基于地质沉降数据的容差式线查询数据方法。
背景技术:
geoserver是opengisweb服务器规范的j2ee实现,利用geoserver可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过geoserver可以比较容易的在用户之间迅速共享空间地理信息。
在geoserver发布包含通过insar采集的地质沉降数据的图层上,画多条首尾相连的线段,并获得线段上的点,进而进行下一步可视化分析。对于获取线段上的点,geoserver提供了getfeature操作。通过确定起始点与终止点的经纬度坐标,并编写filter过滤器进行查询数据。进行多次实验后对比发现,由于数据问题,geoserver官方提供的查询线上点数据一直为空。但geoserver提供的多边形查询,即通过在数据图层绘制封闭的多边形与图层相交,确定围成的封闭图形的各个点的经纬度坐标(起始点与终止点经纬度坐标相同),编写相应的filter过滤器从而能够捡取多边形内的点的数据。于是提出一种通过采用容差方式将线段转换成多边形,从而进行多边形查询的方法。
技术实现要素:
geoserver官方提供了可以查询获取线段穿过的点的数据,然后geoserver官方提供的查询线上点数据一直为空,无法获取数据,本发明通过将数据图层绘制出的线段转换成多边形,通过geoserver多边形查询的接口,解决了该问题。
为解决上述技术问题,本发明采用以下技术方案:
一种基于地质沉降数据的容差式线查询数据方法,其特征在于,包括以下步骤:
步骤1:根据误差范围设置容差值;
步骤2:获取线段,并对线段的包含经纬度信息的起始点和终止点进行容差处理,得到由2个起始点容差点和2个终止点容差点构成的矩形;
步骤3:通过filter过滤器捡取矩形内的点的数据;
步骤4:将线段按照预设值长度进行分割,并将被分割的每一段的数据形成json数组。
上述技术方案中,步骤2具体包含以下步骤:
对线段的包含经纬度信息的起始点和终止点进行容差处理包括以下步骤:
步骤1:判断线段的两端点的经纬度是否相同,
如相纬度相同,经度相同则进行步骤2,如相纬度相同,经度不同则进行步骤3;如纬度不相同,则进行步骤4;
步骤2:起始点与终止点为同一个点,不能构成一条直线,返回错误信息;
步骤3:对比经度,选取经度小的点作为起始点,经度大的点作为终止点,对起始点的经度减去容差,纬度依次加减容差获取到起始点的2个起始点容差点,对于终止点的经度加上容差,纬度依次加减容差获取到终止点的2个终止点容差点,将2个起始点容差点于2个终止点容差点拼接为矩形;
步骤4:对比两点纬度,选取纬度小的点作为起始点,纬度大的点作为终止点,对于起始点将其纬度减去容差,起始点的经度加减容差获取到起始点的2个起始点容差点,再对终止点的纬度加上容差,终止点的经度加减容差获取得到终止点的2个终止点荣差点,将2个起始点容差点于2个终止点容差点拼接为矩形。
上述技术方案中,步骤3包括,计算出所有首尾相连的线段总长度,按照预设值进行分割,用预设值除以线段总长得到系数a,然后然后计算出线段上点的数据的总数,用数据的总数乘以这个系数a得到分割索引,然后将线段上的数据点按照这个分割索引取出。
因为本发明采用上述技术方案,因此具备以下有益效果:
1、geoserver官方提供了可以查询获取线段穿过的点的数据,然而并不针对所有数据图层都好使,该技术通过将数据图层绘制出的线段转换成多边形,通过geoserver多边形查询的接口,解决了该问题。
2、按照实际公路上的线段大小,设置分割点对线段上的数据进行切分,方便可视化展示与分析。
附图说明
图1为geoserver发布的数据图层;
图2为定义常量allowance作为容差;
图3为截取起始点与终止点坐标;
图4为纬度相同时容差结果;
图5为设置两个容差点形成的多边形区域;
图6为设置四个容差点形成的多边形区域;
图7为根据容差点形成多边形的代码;
图8为根据容差点形成多边形的代码;
图9为效果展示图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,即所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本发明提供了一种基于地质沉降数据的容差式线查询数据方法:
设置容差大小可接受的误差范围;
将线段转换成多边形;
将数据按照地图图层上的实际公里数进行切分如按每1公里进行数据分割,并提取该处数据,形成json数组
项目发布数据如图1所示。
在多次对比每个点的经纬度坐标后,发现大致相近的点从小数点后第五位开始不一样,这样就意味着在同一区域内的点的位置差别取决于其小数点后第五位小数,因此,决定对小数点后第五位小数进行容差,即将容差定为0.00001,在此容差下既可以查询出需要数据,又可以很大一定程度减小误差,不会出现将不需要的点统计在结果内。
定义常量allowance作为容差,如图2。
将传入的起始点与终止点的坐标进行截取,截取到小数点后第五位小数,这里以leaftpoint与rightpoint来代替起始点与终止点,如图3。
设置容差变量开始分两种情况对起始点与终止点进行容差。
一.两点纬度相同时
首先判断两点经度是否相同,如果相同则起始点与终止点为同一个点,不能构成一条直线,返回错误信息:两点坐标完全一致,不能构成直线。
如果两点经度不同,则对比纬度,选取经度小的点作为起始点,经度大的点作为终止点,对起始点的经度减去容差,纬度依次加减容差获取到起始点的两个容差点,对于终止点的经度加上容差,纬度依次加减容差获取到终止点的两个容差点。最后将结果拼接,如图4所示。
二.两点纬度不同时
两点纬度不同时,对比两点纬度,选取纬度小的点作为起始点,纬度大的点作为终止点,对于起始点将其纬度减去容差,起始点的经度加减容差获取到起始点的两个容差点,再对终止点的纬度加上容差,终止点的经度加减容差得出查询数据后进行拼接。
注:由于double型数据做加减运算会出现误差,因此将其先转换为bigdecimal再进行加减运算即可。
容差设置
考虑到线查询一定具备不为同一个点的初始点和终止点,决定对这两点进行容差得出另外两个点可以使得这四个点可以构成一个如图5的矩形,如果容差设置在误差可接受范围内,就可以认为这个矩形内所查询到的所有点就是起始点与结束点穿过的点。
然而在多次测试实验之后得出结论,geoserver提供的filter多边形查询并不会即将边界的点纳入查询结果,也就意味着起始点与终止点的连线上的点不会被纳入查询结果,于是按照这个结果进行进一步调整。
对起始点与结束点进行容差得出四个点,使得起始点与终止点被包含在这四个点围成的如图6矩形中,在设置的误差可接受的容差内可以认为矩形图形内查询到的点即为被起始点与终止点穿过的点。
计算出所有首尾相连的线段总长度,按照一定数值进行分割,如线段总长度为10000米,按照每500米的长度进行分割线段。用500除以10000得出0.05这个系数,然后计算出线段上点的数据的总数,用这个数值乘以这个系数得到分割索引,然后将线段上的数据点按照这个分割索引取出。