欢迎使用CSDN-markdown编辑器

来源:互联网 发布:网络装修 知乎 编辑:程序博客网 时间:2024/04/27 06:58

对于坐标变换的实验结果
1. 进行坐标变换的界面

  1. 按钮ReadMap的作用:读取原始的地图

3.按钮FindLeft&Down的作用:
遍历所有的点,然后找出最左边的点以及最下的点,并显示在界面中。

4.按钮NewMap 的作用:显示进行坐标变换后的新地图,并保存。

5.进行地图拼接的界面

6.按钮ReadMap的作用:读取两幅已经进行过坐标变换的地图。并显示在坐标轴上。

7.按钮CreateMap的作用:将两幅地图进行拼接变为新的地图。并保存

数据量分析:
新的地图为mat格式。
  ShapeFile Mat
地图1 24.3 6.49
地图2 36.6 9.87
拼接地图   16.2


对于坐标变换的实验日志(ChangeMap)
2015/1/31
1. 读取地图:
a) 函数ReadMap
b) mapshow前试下axes(handles.axes1);
2. 得到最左边和最下的坐标值,其作为基点。
a) 一个问题:得到的坐标值存在小数,所以对于地图来说选取一个可以保留的位数很重要。需要进一步实验:比较数据量与错误率(即一个小格包含两个顶点)
b) 本处实验保留位数为整数。
3. 用正常的坐标减去新的坐标,得到NewShp。
a) 此处出现了问题:
Name Size Bytes Class Attributes
InitialShp 165x1 99016 struct int
NewShp 1x165 96376 struct double
数据量并没有出现大规模的降低。
(事后分析,这是因为去除了每条道路最后的NaN,从而使得数据量得到一定程度的降低)。
b) 分析一下,发现问题是由于NewShp中坐标类型仍然为Double型,必须改变数据类型。
i. 此处采用int16类型进行强制转换如: NewShp(i).BoundingBox(1:2,1)=int16(InitialShp(i).BoundingBox(1:2)-MinLeft);

ii. 对于数据量进行分析
Name Size Bytes Class Attributes
NewShp 165x1 80716 struct int16
NewShp 165x1 85936 struct int32
NewShp 1x165 96376 struct double
分析:
96376-85936=10440
85936-80716=5220 5220*2=10440
结果完全正确

iii. 对属性进行进一步的分析。在道路的参数中存在Geometry,对于所有的点其值为‘Line’。我们尝试去除这一属性。
1. 实验结果1:
去除Geometry这一属性 报错。
2. 实验结果2:
将Geometry的属性从’Line’改为’’也报错。
3. 实验结果3:
在第一条道路上保留属性’Line’,其余道路对属性不进行处理,则不报错。
4. 数据量分析
这是在int16位情况得到的结果

Name Size Bytes Class Attributes
NewShp 165x1 80716 struct 原始的
NewShp 165x1 62348 struct 保留第一条的属性
iv. 现在我们对ShapeFile地图进行更深次的分析
1. 对于任一一个坐标的数值
a) Double 8Bytes
b) Int32 4Bytes
c) Int16 2Bytes
2. 对于各种属性
a) Geometry 8Bytes (因为Line为4个字符,一个字符2位)
b) BoundingBox 8Bytes (4个int16 ,所以共8Bytes)
c) Shp(i) 704(结构体大小)+4(BoundingBox)*2+4(‘Line’)*2+XY点的个数*2
3. 这里需要说明的是:实际产生的ShapeFile地图会相应的压缩,实际大小会小很多。

  1. 基于此,我们拟采取一种新的方案:
    a) 我们将ShapeFile中第一条道路保存新地图与原始地图相关的信息:基点。将第一条道路的属性设置为
    Geometry: ‘Line’
    BoundingBox: [2x2 double]
    X: []
    Y: []
    b) 这样新的地图大小为
    Name Size Bytes Class Attributes
    NewShp 165x1 80716 struct 原始的
    NewShp 166x1 80996 struct 增加了一条道路的
  2. 保存地图
    a) 出现了问题:Coordinates in geographic data structure S must be doubles.!这是在报错:要转换为ShpaeFile数据类型必须是所有数据必须是Double。经过验证,如果改成Double型数据量不发生改变。
    b) 为了解决这个问题:拟采取这样的方法,将matlab的数据不转化为ShapeFile,而是变为mat型的数据。在mat上可以直接进行读取。
    save(‘ditu1.mat’,’NewShp’);
    用这条语句实现保存的功能。其大小为6.43KB。考虑到原来ShapeFile的大小为24.3KB。我们将Double型的数据(8Bytes)变为int32(2Bytes)。所以,现在的这个大小还是可以接受的。
  3. 实现地图的拼接:
    a) 具体思路:
    i. 将两幅地图都读入程序中。
    ii. 比较两幅地图基坐标的关系。
    iii. 分为四种情况:
  4. A图横纵坐标都小于B图。以A图的基坐标为新地图的基坐标,B图的坐标横纵坐标都加上B图的基坐标与新基坐标的差值。
  5. A图横坐标小于B图,纵坐标大于B图。以A图的横坐标B图的横坐标为基坐标。A图的纵坐标加上A图的基坐标与新基坐标的差值。B图的横坐标加上B图的基坐标与新基坐标的差值。
  6. A图横坐标大于B图,纵坐标小于B图。
  7. A图横纵坐标都小于B图。
    b) 结果分析:
    i. 新地图的基坐标依然为整幅地图的最左下的点。
    ii. 数据大小16.2kb(原图1为6.49kb,原图2为9.87kb)。很正常。
    c) 值得思考的几点:
    i. 地图1和地图2有重叠。
    ii. 地图1 和地图2的距离略远(>35536),因为int16最多能表示35536。

    实验的目的:
    目前需要完成两个任务
  8. 绝对坐标—相对坐标—近似绝对坐标
    a. 绝对坐标我们可以考虑为其将地图分为了一个个非常小的方格(比如说小数点后六位的小方格)。我们可以将这些小方格的大小变大,构建出相对坐标。
    b. 优点:
    a) 将地球坐标系变为我们需要的绝对坐标系(0,1)(1,1)。这样表示点坐标的位数减少了,实现压缩。
    c. 实现方法
    a) 选取一个局部地图
    b) 将基址点坐标保存在最左上角的地方(地点的选取进一步探讨,可以选取中间,然后有正有负)
    c) 在matlab中对点坐标进行重新划分。
    d) 数据的传输
    e) 数据根据基址点坐标进行恢复。
    d. 难度:
    a) Matlab中坐标进行优化,是否可行。
    e. 思考:是否建立一个二级索引。(达到一个什么样的程度(比分传输多少张地图),建立二级索引)。
    f. 其他问题:任务的传输是传输一个有三个属性的矩阵(x,y,任务)。

    实验总结:
    总体来说实验的目的已经实现。
    目前还可以研究的问题有:
  9. 是否建立一个二级索引。(达到一个什么样的程度(比分传输多少张地图),建立二级索引)。
  10. 地图1和地图2有重叠。
  11. 地图1 和地图2的距离略远(>35536),因为int16最多能表示35536。
0 0