关于地图加密问题。吕雪松请进 ( 积分: 150 )

  • 主题发起人 lonelyghost317
  • 开始时间
L

lonelyghost317

Unregistered / Unconfirmed
GUEST, unregistred user!
我们用全国电子地图做了一个项目,但是发布时需要把地图数据加密起来。
我的思路是将所有地图文件(*.tab,*.dat,*.map等)全部加密压缩成一个文件。
然后程序运行时截获读取这些文件的API函数,然后再将函数定位到解密的文件。
各位做过这方面的DFW,你们认为我这个方案可行吗?
吕雪松,我知道你是这方面的高手,能否指点一下。
 
L

lonelyghost317

Unregistered / Unconfirmed
GUEST, unregistred user!
我们用全国电子地图做了一个项目,但是发布时需要把地图数据加密起来。
我的思路是将所有地图文件(*.tab,*.dat,*.map等)全部加密压缩成一个文件。
然后程序运行时截获读取这些文件的API函数,然后再将函数定位到解密的文件。
各位做过这方面的DFW,你们认为我这个方案可行吗?
吕雪松,我知道你是这方面的高手,能否指点一下。
 
S

sword_liu

Unregistered / Unconfirmed
GUEST, unregistred user!
是吕雪松
 
W

Writer

Unregistered / Unconfirmed
GUEST, unregistred user!
>>然后程序运行时截获读取这些文件的API函数,然后再将函数定位到解密的文件。

干嘛要截API这么麻烦。自己直接读取,解密不就行。还有将所有文件打包成一个文件是可以,不过会增加不少麻烦。

还有将地图加密后,程序一定要加壳。
 
H

hlsl

Unregistered / Unconfirmed
GUEST, unregistred user!
To: Writer
人家问的是吕雪松,你来凑什么热闹啊
 

吕雪松

Unregistered / Unconfirmed
GUEST, unregistred user!
你的方法太麻烦了,而且不一定可靠,一种简单的实现方法是:你把你的所有地图数据的坐标值经过某一种坐标变换(无损且可逆),比如都除以100,然后保存成普通的TAB也可,SHAPE也可。你再写一个通用转换函数,保证能把变换过后的数值能转换成正确的坐标值,供程序里所有坐标拾取的接口调用就可以了,如鼠标移动时状态栏上的坐标提示、新加地物等接口。也就是说,你在外部数据文件中和内存中保存的数值是经过变换的,而用户通过你的程序接口得到的坐标又是正确的。这个转换关系是你设计的,别人不知道,而且这个转换公式你设计得越变态,别人越破解不了。OK,这个方法比较简单,也比较实用。
 
L

lonelyghost317

Unregistered / Unconfirmed
GUEST, unregistred user!
to:吕雪松, 你说的转换坐标值的方法我也知道。但是我不知道那些文件有坐标值,具体怎么转换?
还有你说再写一个通用转换函数,供程序里所有坐标拾取的接口调用就可以。可是我怎么知道程序什么时候要取坐标值呢?
能不能给个简单的例子。先谢谢啦。
 

吕雪松

Unregistered / Unconfirmed
GUEST, unregistred user!
1,地图文件都是有坐标值的,不然就不是地图了;
2,程序里什么时候要取坐标值是由你控制的,是不是?不要告诉我程序不是你自己编的...
 
L

lonelyghost317

Unregistered / Unconfirmed
GUEST, unregistred user!
程序当然是我写的。但是我是用MapX控件做的。而绘制地图是由它来完成的。因此我不知道
它什么时候要用到坐标值。比如,当我选择放大工具在地图上点一下时,这时它会用到哪些
坐标值呢?
 
G

gps_gis

Unregistered / Unconfirmed
GUEST, unregistred user!
吕版主好:
我想了解一下你的把地图坐标值 转变是怎样实现的,我所知道的好象不能整体的象你所说的加上一个数或者是减去一个数再保存,我想问的是这个过程是怎么样实现的,因为我对mapinfo不熟悉,谢谢了
 
L

lonelyghost317

Unregistered / Unconfirmed
GUEST, unregistred user!
to:吕雪松,你有没有这种例子?能不能发给我,好吗?lonelyghost317@yahoo.com.cn
谢谢!
 
L

lonelyghost317

Unregistered / Unconfirmed
GUEST, unregistred user!
to:吕雪松版主,怎么不理我拉?我的问题太菜吗?还是不愿意说?
另外还有人知道吗?在线等待中……
 
S

shappy

Unregistered / Unconfirmed
GUEST, unregistred user!
^_^,人家还以为你自己编了一个地图控件呢,用别人的控件别人的地图还想加密,基本上的画蛇添足,就是为了保护地图,某些地图是支持口令加密的,mapinfo应该也支持吧.
另To吕雪松:这样加密会在读取时增大很多的运算量,而且你又不敢用很复杂的加密算法,那样更花时间,
 

靴子

Unregistered / Unconfirmed
GUEST, unregistred user!
吕斑竹的这种加密办法作起来比较简单,但是如果所有的图层都加密了,一个地图里那么多数据,在解密的时候不要累死计算机了~`
 
L

lonelyghost317

Unregistered / Unconfirmed
GUEST, unregistred user!
to:吕雪松,你好!
我现在想问你一个其他的问题!
你对Mapinfo地图的文件格式有没有研究过?
我最近研究了一下,有点小问题不是太了解。
问题如下:
1:对于一些点图层,对于每个点,地图文件中有定义它
使用的Symbol的号码(或则叫索引),我自己编写程序时
怎样才能得到它的symbol呢?
2:对于已知两点的经、纬度,怎么求得两点间的距离?
等待你的回答。
如果其他那位DFW知道,希望可以讨论一下。
 

靴子

Unregistered / Unconfirmed
GUEST, unregistred user!
第一个:Feature.FeatureKey属性(Feature对象)
目标
返回图元的ID。图层中的每个图元在图层中包含唯一ID。为只读的字符串值。用来替换Feature.FeatureID(该属性仍然和以前一样有效,但建议使用FeatureKey属性)。

第二个:Map.Distance方法(Map对象)
目标
计算地图上两个指定点间的距离。返回用双精度值表示的距离,其单位由MapUnit属性指定。
语法
[distance=]OBJECT.Distance(x1,yl,x2,y2)

部件 描述
OBJECT 代表Map对象
x1 第一个点的x坐标(经度)。双精度值。
y1 第一个点的y坐标(纬度)。coordinate of the first point(latitude)。双精度值。
x2 第二个点的x坐标(经度)。双精度值。
y2 第二个点的y坐标(纬度)。双精度值。
 
L

lonelyghost317

Unregistered / Unconfirmed
GUEST, unregistred user!
老大,我是自己写代码做,不是用控件。如果是用控件我也会。
不过还是谢谢你的参与!

对于第一个问题,我已经知道怎么解决了。
对于第二个问题,还请高手过来指点一下。
如何在已知两点坐标 经、纬度的情况下求两点距离?
注意:不用控件!
 
S

shappy

Unregistered / Unconfirmed
GUEST, unregistred user!
我也在做这方面的工作,有空切磋一下,其实经纬度和米的换算公式论坛上就有的,我也没去仔细看,但是一般的做法是直接计算一个比例常数,一般在一个接近平面的低纬度球面上这样的算法误差不会太大,而且简单.我用的是94260.2954824065,自己计算出来的.
经纬度换算:http://www.delphibbs.com/delphibbs/dispq.asp?lid=2181036
 
S

shappy

Unregistered / Unconfirmed
GUEST, unregistred user!
我也在做这方面的工作,有空切磋一下,其实经纬度和米的换算公式论坛上就有的,我也没去仔细看,但是一般的做法是直接计算一个比例常数,一般在一个接近平面的低纬度球面上这样的算法误差不会太大,而且简单.我用的是94260.2954824065,自己计算出来的.
经纬度换算:http://www.delphibbs.com/delphibbs/dispq.asp?lid=2181036
 
L

lonelyghost317

Unregistered / Unconfirmed
GUEST, unregistred user!
首先谢谢shappy你的回答,但是你所说的不是我问的!
我是想知道如何在已知两点的经、纬度求这两点的距离,
而不是如何将坐标转换为屏幕坐标!!!

没有人知道?
 
顶部