2009年12月3日星期四

Google maps CellTower 基站定位 接口

今日把玩 UberTwitter 时,试用了myloc.me定位服务,发现UT用的是Google maps API来展现地图的,而且UT客户端中是支持手机基站定位的,即CellTower Postion。好奇UT是如何做到的,相信一定不是UT建设了自己的数据库,猜测应该使用了Google的定位API,Google虽然开放了众多地图API,但是按道理来讲不应该把这个API也开放出来,毕竟这个牵扯到敏感的个人隐私问题。连自家的latitude,都是特别要进行权限设置的。中国移动这种服务是要被定位方明确确认的,而且现在的定位服务
是1毛钱一次。

下面是本人在微博的只言片语,记录如下:

1。 好奇 UberTwitter 那个基站定位服务myloc.me如何做的,难道Google连这个API都开放了?
2。 google 的确是太可怕了,不仅仅通过你的 gmail 帐户掌握了用户所有的邮件、日程、搜索记录、聊天记录,圈子,甚至随时可获取你的地理位置。拜托这个基站定位的API可不能乱来呀。
3。 要命,貌似Google的那个CellTower基站定位的接口不需要验证,只要摸索出接口的参数,就可以利用Google来定位手机的
位置了。汗,这个...... 移动的定位是1毛钱一次的,而且必须经过对方允许才可以滴。 
4。 RT @yonglin: RT @say3say4: 好奇 UberTwitter 那个基站定位服务myloc.me如何做的,难道Google连这个API都开放
了?¥应该不是GOOGLE独有的吧。//运营商也有,但...不可能提供给UT吧。 

万事不决问google后,发现了 'secret' google API 和  'hidden' Google-API  等字样,看来应该是Google尚未公开这个API接口,但是也未设防,摸索出其参数后,就可以调用了。

这个秘密的、未公开的API就是:http://www.google.com/glm/mmap
通过POST传递参数过去,最主要的就是 CellID和LAC(区域码)两个参数,返回值中包括了 经纬度信息。


具体网址参见:

有了这个接口,我们就可以在众多手机中,免费利用google的基站定位服务获得比较准确坐标信息了。





2009年11月1日星期日

手机彩信方式更新BLOGGER/发邮件

彩信是可以直接发给一个互联网邮箱的,例如gmail邮箱接到彩信后,是可以直接提取图片,文字等内容的。因此凡是支持email更新的服务都应该可以直接通过彩信方式更新,例如blogspot的blogger

彩信可以直接给flickr发照片,并同步更新到twitter.

注册了爱拍网 ipai.cn ,是个通过手机彩信上传照片的分享站点,支持同步flickr/picasa/kaixin001/msn space/renren/douban/twitter等多种常用的SNS站点
很不错。

只用在手机上发送彩信给 m@ipai.cn 这个地址,照片就可以同时在 ipai/flickr/picasa等多家同时出现,同步速度也很不错,目前的bug就是 kaixin001没有显示出来照片,msn space也没有反应

手机上传照片/更新BLOGGER新途径

2009年9月21日星期一

UE(UltraEdit)的一些高级技巧(正则表达式)

一.               正则表达式主要符号

1.      % 匹配行首 - 表示搜索字符串必须在行首,但不包括任何选定的结果字符中的行终止字符。

 

2.      $ 匹配行尾 - 表示搜索字符串必须在行尾,但不包括任何选定的结果字符中的行终止字符。

 

3.      ? 匹配任何除换行符的字符。

 

4.      * 匹配任何除换行符外所出现的任意数量的字符。

 

5.      + 匹配一个或多个前面的字符/表达式。必须找到至少一个出现的字符。不匹配重复的换行符。

 

6.      ++  零次或多次匹配前面的字符/表达式。不匹配重复的换行符。

 

7.      ^b 匹配一个分页符。

 

8.      ^p 匹配一个换行符 (CR/LF) (段落) (DOS 文件)

 

9.      ^s 替换为被选择 ( 加亮 ) 活跃的文件窗口的文章。

 

10.  ^c 替换为剪贴板的内容

 

11.  ^r 匹配一个换行符 ( CR) (段落) (MAC 文件)

 

12.  ^n 匹配一个换行符 ( LF) (段落) (UNIX 文件)

 

13.  ^t 匹配一个制表符

 

14.  [ ] 匹配任何括号中的单个字符或范围

 

15.  ^{A^}^{B^} 匹配表达式 A B

 

16.  ^ 忽略其后的正则表达式字符

     注: ^ 是实际字符 ^不是Ctl + 键值。

17.  ^(*^)   在表达式加上括号或标签在替换命令中使用。

 

18.  [xyz] 一个字符集。匹配在方括号之间的任何字符。

19.  [^xyz] 一个否定的字符集。不匹配在方括号之间的任何字符。

20.  d 匹配一个数字字符。等价于[0-9]

21.  D 匹配一个非数字字符。等价于[^0-9]

22.  f 匹配一个换页字符。

23.  n 匹配一个换行字符。

24.  r 匹配一个回车符字符。

25.  s 匹配任何空白的空格, 标签, 换页, 包括空格等等,但不匹配换行符。

26.  S 匹配任何非空白的字符,但不匹配换行符。

27.  t 匹配一个标签TAB字符。

28.  v 匹配一个垂直的标签字符。

29.  w 匹配任何词语字符包括下划线。

30.  W 匹配任何非词语字符字符。

二.              相关功能使用搭配

1.  删除空行: 替换 %[ ^t]++^p 空串

2.  删除行尾空格: 替换 [ ^t]+$ 空串

3.  删除行首空格: 替换 %[ ^t]+ 空串

4.  %[ ^t]++^([~ ^t^p]^)  表示开头,如果想在行首添加字符值,则如:

Ø  替换 %[ ^t]++^([~ ^t^p]^) 北京市^1

Ø  每行设置为固定的4个空格开头: 替换 %[ ^t]++^([~ ^t^p]^) "     ^1" (操作时去掉^1两边的双引号)

5.  删除文本中指定的前2列字符: 替换 %?? 空串  (一个汉字为两个字符,需要两个??,如果需要删除多个汉字,则输入相应数量的?即可)

6.  如果首行以空格开头,想将每段设置改为固定的4个空格开头: 替换 %[ ^t]+ "    "   %[ ^t]+ 代表每行行首(操作时去掉空格两边的双引号; 如果一行是以空格开始的,则视之为一段的开始行)

7.  在第4列后插入2列空白字符: 替换 %^(????^)^(?^) "^1  ^2" (操作时去掉空格两边的双引号)

8.  查找所有的数字: [0-9]+[.]++[0-9]+

9.  查找所有的单词: [a-z]+

10.              查找所有的网址: http://[a-z0-9^~`_./^-^?=&]+

11.              查找行首为数字的行:%[(0-9)^t]+

12.              去掉所编辑文本中包含特定字符串的行
CTRL+R
调出来替换(Replace)窗口,选中"使用正则表达式";然后用查找 %*你的字符串*^p 替换成空内容即可.如,我当前有个文本文件,需要去掉所有包含 http://www.dbanotes.net/ 这个字符串的行,查找 %*http://www.dbanotes.net/*^p 替换成空即可.注意,^p DOS 文件类型的换行符.如果是 Unix 类型文件,则用 ^n.

13.              %1              搜索以1开头的行
     1$               
搜索以1为结尾的行

 

 

 

2009年8月23日星期日

有了GFW,很久没来了

最近入手CURVE 8900,测试以下,看看跳墙发文的效果

2009年5月14日星期四

在PLSQL中打开事件记录器

set timing on;

存一些oracle的简单资料

查看ORACLE数据库信息的一些SQL
  
  查看ORACLE数据库信息的一些SQL 1、查看表空间的名称及大小
  set linesize 140;set pages 200;column tablespace_name format a30;select tablespace_name,min_extents,max_extents,pct_increase,status from dba_tablespaces;select tablespace_name,initial_extent,next_extent,contents,logging,extent_management,allocation_type from dba_tablespacesorder by tablespace_name;
  2、查看表空间物理文件的名称及大小
  column db_block_size new_value blksz noprintselect value db_block_size from v$parameter where name='db_block_size';column tablespace_name format a16;column file_name format a60;set linesize 160;select file_name,round(bytes/(1024*1024),0) total_space,autoextensible,increment_by*&blksz/(1024*1024) as incement,maxbytes/(1024*1024) as maxsize from dba_data_files order by tablespace_name;
  3、查看回滚段名称及大小
  COLUMN roll_name FORMAT a13 HEADING 'Rollback Name'COLUMN tablespace FORMAT a11 HEADING 'Tablspace'COLUMN in_extents FORMAT a20 HEADING 'Init/Next Extents'COLUMN m_extents FORMAT a10 HEADING 'Min/Max Extents'COLUMN status FORMAT a8 HEADING 'Status'COLUMN wraps FORMAT 999 HEADING 'Wraps' COLUMN shrinks FORMAT 999 HEADING 'Shrinks'COLUMN opt FORMAT 999,999,999 HEADING 'Opt. Size'COLUMN bytes FORMAT 999,999,999 HEADING 'Bytes'COLUMN extents FORMAT 999 HEADING 'Extents'SELECT a.owner || '.' || a.segment_name roll_name , a.tablespace_name tablespace , TO_CHAR(a.initial_extent) || ' / ' || TO_CHAR(a.next_extent) in_extents , TO_CHAR(a.min_extents) || ' / ' || TO_CHAR(a.max_extents) m_extents , a.status status , b.bytes bytes , b.extents extents , d.shrinks shrinks , d.wraps wraps , d.optsize optFROM dba_rollback_segs a , dba_segments b , v$rollname c , v$rollstat dWHERE a.segment_name = b.segment_name AND a.segment_name = c.name (+) AND c.usn = d.usn (+)ORDER BY a.segment_name;
  4、查看控制文件
   select name from v$controlfile;
  5、查看日志文件
   select member from v$logfile;
  6、查看表空间的使用情况
  select * from( select sum(bytes)/(1024*1024) as 'free_space(M)',tablespace_name from dba_free_spacegroup by tablespace_name) order by 'free_space(M)';
  7、查看数据库库对象
   select owner, object_type, status, count(*) count# from all_objects
   group by owner,object_type,status;
  8、查看数据库的版本
   select * from v$version;
  9、查看数据库的创建日期和归档方式
   select created,log_mode,log_mode from v$database;
  10、查看临时数据库文件
   select STATUS, ENABLED, NAME from v$tempfile;

2009年5月13日星期三

在oracle中直接计算经纬度距离的方法

oracle spatial组件中预定义了很多通用的坐标系统,可以直接利用spatial提供的函数计算2点间距离。

select sdo_geom.sdo_distance(mdsys.sdo_geometry(2001,8307,mdsys.sdo_point_type(111.12,33.34,0),null,null),mdsys.sdo_geometry(2001,8307,mdsys.sdo_point_type(111.12,33.33,0),null,null),0.005) from dual;

其中2001代表简单点类型,8307代表为WGS84坐标系, 0.005为oracle计算时候的误差精度,本案中为5毫米

2009年5月12日星期二

oracle spatial 的一个bug

具体是这个版本 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

表结构:
SQL> desc us_dma;
Name Type Nullable Default Comments
-------- ------------------ -------- ------- --------
NAME VARCHAR2(36) Y
DMA VARCHAR2(3) Y
MI_STYLE VARCHAR2(254) Y
MI_PRINX NUMBER(10)
GEOLOC MDSYS.SDO_GEOMETRY Y

geoloc是空间字段类型。

如下sql语句,报告oracle ORA-00904 无效标识符 错误
select geoloc.sdo_point.x from us_dma


给该表起别名后,解决此问题。
select t.geoloc.sdo_point.x from us_dma t

结合网上资料分析,可以认为此种情况是oracle的特定版本bug所导致。

2009年5月8日星期五

引自:"http://blog.sina.com.cn/s/blog_439d2cef01009c4a.html"

一、Oracle Spatial简介


    Oracle
支持自定义的数据类型,可以用数组,结构体或者带有构造函数,功能函数的类来定义自己的对象类型。这样的对象类型可以用于属性列的数据类型,也可以用来创建对象表。而Oracle
Spatial也正是基于此种特性所开发的一套空间数据处理系统。


    Spatial
的自定义数据类型有很多,全部在MDSYS方案下,经常使用到的是SDO_GEOMETRY类型。SDO_GEOMETRY表示一个几何对象,可以是点、线、面、多点、多线、多面或混合对象。


    Spatial
在此数据类型的基础上,实现了R树空间索引和四叉树空间索引,还以SQL函数的形式实现了多种空间分析功能。


 




二、测试表的建立与应用(点类型)


 









--
创建测试用表

CREATE TABLE "SPATIALTEST" (

 "ID" VARCHAR2(20) NOT NULL,

 "NAME" VARCHAR2(100),

 "ADDRESS" VARCHAR2(200),

 "TELEPHONE" VARCHAR2(50),

 "LOCATION" "MDSYS"."SDO_GEOMETRY"

)LOGGING;


 









-- 创建主键约束

ALTER TABLE "SPATIALTEST"

 ADD CONSTRAINT "PK_SPATIAL" PRIMARY
KEY("ID");


 









-- 根据用户表填写空间元数据

INSERT INTO USER_SDO_GEOM_METADATA

  VALUES(

  'SPATIALTEST',

  'location',

  MDSYS.SDO_DIM_ARRAY(

   MDSYS.SDO_DIM_ELEMENT('Longitude',-180,180,10),


   MDSYS.SDO_DIM_ELEMENT('Latitude',-90,90,10)


  ),

  8307

 );


 









-- 建立空间索引

CREATE INDEX SPATIAL_IDX

 ON SPATIALTEST(location)

 INDEXTYPE IS MDSYS.SPATIAL_INDEX;


 










-- 导入测试数据

INSERT INTO "SPATIALTEST"

 VALUES(

  'dbeb7ea11eaf2b53a9b7',

  '小肥羊(天河店)',

  '广州市天河区天寿路25号',


  '020-38217746',

  MDSYS.SDO_GEOMETRY(

   2001,

   8307,

   MDSYS.SDO_POINT_TYPE(113.3293658,
23.14338586, 0),

   NULL,

   NULL

  )

 );




INSERT INTO "SPATIALTEST"

 VALUES(

  'ef8393ef6273a72b2f70',

  '山东老家',

  '广州市越秀区合群一马路43号',


  '020-87778983',

  MDSYS.SDO_GEOMETRY(

   2001,

   8307,

   MDSYS.SDO_POINT_TYPE(113.2932474,
23.11883515, 0),

   NULL,

   NULL

  )

 );


 


--其他


INSERT INTO cola_markets VALUES(

 2,

 'cola_b',

 MDSYS.SDO_GEOMETRY(

  2003,  --
2-dimensional polygon

  NULL,

  NULL,

  MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),
-- one polygon (exterior polygon ring)

  MDSYS.SDO_ORDINATE_ARRAY(5,1,
8,1, 8,6, 5,7, 5,1)

 )

);




 









-- 属性信息查询

SQL> select location from spatialtest;

LOCATION(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO,
SDO_ORDINATES)

--------------------------------------------------------------------------------


SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(113.329366, 23.1433859, 0),
NULL, NULL)


SQL> select s.location.SDO_POINT.x langtitude
from spatialtest s;


LANGTITUDE

----------

113.329366




 









--
空间分析查询(113.2359818,23.16937253)周边十公里信息5条


SELECT

  B.id id, B.name name, B.dist
dist

FROM (

  SELECT

    A.id id,
A.name name,
SDO_GEOM.SDO_DISTANCE(A.location,MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(113.2359818,23.16937253,0),NULL,NULL),1)
dist

  FROM

    spatialtest
A

  WHERE

   
SDO_WITHIN_DISTANCE(A.LOCATION,MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(113.2359818,23.16937253,0),NULL,NULL),'distance=10000')
= 'TRUE'

  ORDER BY A.name

  ) B

WHERE

  ROWNUM <= 5

;


 









--
空间分析查询(113.2359818,23.16937253)附近的5条信息


SELECT

  A.id id, A.name name,A.location.SDO_POINT.x
langtitude, A.location.SDO_POINT.y
latitude,MDSYS.SDO_NN_DISTANCE(1) distance

FROM

  spatialtest A

WHERE

 
SDO_NN(A.LOCATION,MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(113.2359818,23.16937253,0),null,null),'SDO_NUM_RES=5',1)
= 'TRUE'

;


 









-- Return the topological difference of two geometries.

SELECT SDO_GEOM.SDO_DIFFERENCE(c_a.shape, m.diminfo, c_c.shape,
m.diminfo)

  FROM cola_markets c_a, cola_markets c_c,
user_sdo_geom_metadata m

  WHERE m.table_name = 'COLA_MARKETS' AND
m.column_name = 'SHAPE'

  AND c_a.name = 'cola_a' AND c_c.name =
'cola_c';


 




三、MDYSYS.SDO_GEOMETRY结构


 










CREATE TYPE SDO_GEOMETRY AS OBJECT(

  SDO_GTYPE
NUMBER,       //表示几何实体的类型


  SDO_SRID
NUMBER,       //用来表示坐标系(空间参考坐标系),与几何实体关联


  SDO_POINT
MDSYS.SDO_POINT_TYPE, 
//使用X,Y,Z属性值来定义对象类型



                   //它们都是NUMBER类型,


                   //如果SDO_GEOMETRY的SDO_ELEM_INFO及SDO_ORDINATES数组为


                  
//空则SDO_POINT为非空,X和Y值就是点几何实体的坐标值


  SDO_ELEM_INFO
MDSYS.SDO_ELEM_INFO_ARRAY, //使用变长NUMBER型数组来表示。


                   //该属性将告知如何解释SDO_ORDINATES里边的坐标值;


  SDO_ORDINATES
MDSYS.SDO_ORDINATE_ARRAY  
//存储坐标值



                  
//形成空间对象的边界

);




 


MDSYS.SDO_GEOMETRY <--> OCCI
对照模型:






四、Oracle Spatial 几个自定义函数(转帖)



--------------------------------------




























 --得到线对象的终止点X坐标

create or replace function GetEndNodeX(coords in
SDO_ORDINATE_ARRAY) return varchar2 is

  Result varchar2(100);

begin

  if coords.count > 0 then

    Result :=
to_char(coords(coords.count-1));

  end if;

  return(Result);

end GetEndNodeX;


 



 --得到线对象的终止点的Y坐标

create or replace function GetEndNodeY(coords in SDO_ORDINATE_ARRAY
) return varchar2 is

  Result varchar2(100);

begin

    if
coords.count > 0 then

    Result :=
to_char(coords(coords.count));

  end if;

  return(Result);

end GetEndNodeY;


 



 --得到线对象的终止点坐标 X,Y
形式

create or replace function GetEndNodeXY(coords in
SDO_ORDINATE_ARRAY) return varchar2 is

  Result varchar2(200);

begin

  if coords.count > 0 then

    Result :=
to_char(coords(coords.count-1)) || ',' ||
to_char(coords(coords.count));

  end if;

  return(Result);

end GetEndNodeXY;


 



 --得到线对象的起始点X坐标

create or replace function GetStartNodeX(coords in
SDO_ORDINATE_ARRAY) return varchar2 is

  Result varchar2(100);

begin

  if coords.count > 0 then

   Result :=
to_char(coords(1));

  end if;

  return(Result);

end GetStartNodeX;


 



 --得到线对象的起始点的Y坐标

create or replace function GetStartNodeY(coords in
SDO_ORDINATE_ARRAY) return varchar2 is

  Result varchar2(100);

begin

  if coords.count > 0 then

   Result :=
to_char(coords(2));

  end if;

  return(Result);

end GetStartNodeY;


 



 --得到线对象的起始点XY坐标

create or replace function GetStartNodeXY(coords in
SDO_ORDINATE_ARRAY) return varchar2 is

  Result varchar2(200);

begin

  if coords.count > 0 then

    
Result := to_char(coords(1))||','||to_char(coords(2));

  end if;

  return(Result);

end GetStartNodeXY;


 



 --把X,Y坐标转换成MDSYS.SDO_GEOMETRY的点对象


create or replace function To_Geomerty_Point(x in number,y in
number ) return MDSYS.SDO_GEOMETRY is

  Result MDSYS.SDO_GEOMETRY;

begin

Result := MDSYS.SDO_GEOMETRY(2001,

                     
8307,

                     
null,

                     
MDSYS.SDO_ELEM_INFO_ARRAY(1, 1, 1),

                     
MDSYS.SDO_ORDINATE_ARRAY(x, y));


return(Result);

end To_Geomerty_Point;


 





--------------------------------------------------------------------------


-------------------查询
及测试语句---------------------------------------





















--求线路的长度

  select c.routename,
sdo_geom.sdo_length(c.geoloc,m.DIMINFO,'unit=KM')

  from tgs_route c,user_sdo_geom_metadata m

select * from tg_routev2


select a.geoloc.SDO_ORDINATES from tgs_route a

  where routename = '宣武-6-1'


select GetStartNodeXY(a.geoloc.SDO_ORDINATES) from tgs_route
a

 where routename = '宣武-6-1'


select GetEndNodeXY(a.geoloc.SDO_ORDINATES) from tgs_route
a

 where routename = '宣武-6-1'


 



--计算线路的起始点和终止点坐标

 create table routeNodeXY as

 select a.routename,

       
GetStartNodeX(a.geoloc.SDO_ORDINATES) X1,

       
GetStartNodeY(a.geoloc.SDO_ORDINATES) Y1,

       
GetEndNodeX(a.geoloc.SDO_ORDINATES) X2,

       
GetEndNodeY(a.geoloc.SDO_ORDINATES) Y2

   from tgs_route a


 


--更新tg_routev2 中的线起始点 终止点坐标

 alter table routeNodeXY add primary
key(routename)

update (select a.*,b.* from tg_routev2 a,routeNodeXY b

 where a.routename = b.routename)

 set node1x = x1,node1y = Y1,node2x = X2,node2y =
Y2

 where node1x is null


 



select sdo_geom.sdo_distance( from dual

 --物流中心坐标

 --116.635056

 --39.869170


 


--node1距离物流中心的 
“南北直角折线”  距离

 select a.routename,

       
(sdo_geom.sdo_distance(To_Geomerty_Point(a.node1x, a.node1y),

                              
To_Geomerty_Point(116.635056, a.node1y),

                              
0.005,

                              
'unit=KM') +

       
sdo_geom.sdo_distance(To_Geomerty_Point(a.node1x, a.node1y),

                              
To_Geomerty_Point(a.node1x, 39.869170),

                              
0.005,

                              
'unit=KM')) dis1

   from tg_routev2 a

  order by dis1

 


--node2距离物流中心的 
“南北直角折线”  距离

 select a.routename,

       
(sdo_geom.sdo_distance(To_Geomerty_Point(a.node2x, a.node2y),

                              
To_Geomerty_Point(116.635056, a.node1y),

                              
0.005,

                              
'unit=KM') +

       
sdo_geom.sdo_distance(To_Geomerty_Point(a.node2x, a.node2y),

                              
To_Geomerty_Point(a.node1x, 39.869170),

                              
0.005,

                              
'unit=KM')) dis2

   from tg_routev2 a

  order by dis2


 












--更新node1Distance 和 node2Distance 
即线路起始点、终止点距离物流中心的 
“南北直角折线”  距离

update


   
tg_routev2

set


   
node1Distance = (sdo_geom.sdo_distance(To_Geomerty_Point(node1x,
node1y), To_Geomerty_Point(116.635056, node1y),
0.005, 'unit=KM')


  +
sdo_geom.sdo_distance(To_Geomerty_Point(node1x, node1y),
To_Geomerty_Point(node1x, 39.869170), 0.005, 'unit=KM')),

   
node2Distance = (sdo_geom.sdo_distance(To_Geomerty_Point(node2x,
node2y), To_Geomerty_Point(116.635056, node2y),
0.005, 'unit=KM')


  +
sdo_geom.sdo_distance(To_Geomerty_Point(node2x, node2y),
To_Geomerty_Point(node2x, 39.869170),
0.005, 'unit=KM'))

where


   
node1Distance is null;




 


-The End-

oracle spatial 进行基于位置的分析 来自oracle的官方教程

http://www.oracle.com/technology/global/cn/obe/10gr2_db_single/datamgmt/spatial/spatial_otn.htm?
执行基于位置的分析 

目的 

本教程介绍了如何对当前和建议的数据进行基于位置的分析。 

所需时间 

大约 45 分钟。 

主题 

本教程包括下列主题: 

概述 
情景 
前提条件 
加载新客户及其位置 

在几何列上创建空间索引 

执行基于位置的查询 
创建并使用基于函数的索引 

使用 Workspace Manager 分析当前和建议的位置数据 

总结 
查看屏幕截图 

将鼠标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。) 

注意:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。 

概述 

Oracle Locator 和 Oracle Workspace Manager 是 Oracle 数据库 10g 标准版和企业版的功能。Oracle Locator 提供了一组集成的功能和过程,可以使用标准 SQL 在 Oracle 数据库中高效地存储、管理、查询和分析空间数据。Oracle Workspace Manager 允许您在同一数据库中对当前数据、建议的数据以及历史数据进行管理。 

Oracle Spatial 是 Oracle 数据库 10g 企业版的一个选件,它是 Oracle Locator 的补充,可以提供更多高端空间功能,包括:缓冲区生成、空间聚合、面积计算等功能;线性参照;坐标系转换;拓扑数据模型;以及对地理参照栅格数据的支持。 

返回主题列表 

案例 

MyCompany 拥有几个主要仓库。它需要找到靠近给定仓库的客户,告知他们新的促销息。为了确定客户的位置并执行基于位置的分析,MyCompany 必须存储仓库和客户的位置数据。 

本教程将使用 OE 模式中的 CUSTOMERS 和 WAREHOUSES 表。 

CUSTOMERS 表具有以下字段: 

列 数据类型 
CUSTOMER_ID NUMBER(6) 
CUST_FIRST_NAME VARCHAR2(20) 
CUST_LAST_NAME VARCHAR2(20) 
CUST_ADDRESS CUST_ADDRESS_TYP 
PHONE_NUMBERS PHONE_LIST_TYP 
NLS_LANGAUGE VARCHAR2(3) 
NLS_TERRITORY VARCHAR2(30) 
CREDIT_LIMIT NUMBER(9.2) 
CUST_EMAIL VARCHAR2(20) 
ACCOUNT_MGR_ID NUMBER(6) 
CUST_GEO_LOCATION MDSYS.SDO_GEOMETRY 
WAREHOUSES 表具有以下字段: 

列 数据类型 
WAREHOUSE_ID NUMBER(3) 
WAREHOUSE_SPEC SYS.XMLTYPE 
WAREHOUSE_NAME VARCHAR2(35) 
LOCATION_ID NUMBER(4) 
WH_GEO_LOCATION MDSYS.SDO_GEOMETRY 
Oracle 数据类型 

Oracle 数据类型包括: 

数字 (NUMBER) 
字符 (VARCHAR2) 
日期 (DATE) 
空间数据 (MDSYS.SDO_GEOMETRY)。可以将位置存储为表的 SDO_GEOMETRY 列中的一个点。客户的位置与地球表面的经度值和纬度值相关联,例如,-63.13631,52.485426。 
返回主题列表 

前提条件 

开始本教程之前,您应该: 

1.
完成了教程在 Windows 上安装 Oracle 数据库 10g。 

2.
下载 spatial.zip 文件并将其解压缩到您的工作目录 (c:\wkdir) 中。 

返回主题列表 

加载新客户及其位置 

在本教程中,假设您已经加载了 Order Entry (OE) 模式 — 该模式包含 CUSTOMERS 和 WAREHOUSES 表。执行下列任务: 

加载位置数据 
将新客户及其位置添加到 CUSTOMERS 表 
将元数据添加到 USER_SDO_GEOM_METADATA 视图 
返回主题列表 

加载位置数据 

Order Entry 模式中的几个客户和仓库的位置值均为 NULL。要为这些客户和仓库提供位置,执行以下命令: 

cd \wkdir 
sqlplus oe/oe 
@loc_updates 


返回主题 

将新客户及其位置添加到 CUSTOMERS 表 

使用事务插入将新客户及其位置添加到 CUSTOMERS 表。可以将客户的位置存储为表的 SDO_GEOMETRY 列中的一个点。客户的位置与地球表面的经度值和纬度值相关联(例如,-63.136,52.4854)。Oracle Locator 和 Oracle Spatial 要求您将经度值置于纬度值之前。在下面的 INSERT 语句中,将使用 SDO_GEOMETRY 构造函数插入点位置。 

要将新客户及其位置添加到 CUSTOMERS 表,执行以下步骤: 

1. 

在登录 OE 模式的 SQL*Plus 会话中,运行以下脚本: 

@insert_customers 
该脚本包含以下语句: 

REM script name: insert_customers.sql 
REM Inserts values for CUSTOMERS table in the OE schema 

REM 
REM CUSTOMERS 
REM 


DELETE FROM customers WHERE 
           customer_id = 1001; 


INSERT INTO customers VALUES 
   (1001,'Dennis','Green', 
   cust_address_typ('1 Oracle Drive','03062','Nashua','NH','US'), 
   PHONE_LIST_TYP('+1 603 897 4104'), 
   'us','AMERICA','100','Dennis.Green@Oracle.com', 
   149, 
   MDSYS.SDO_GEOMETRY(2001, 8307, 
   MDSYS.SDO_POINT_TYPE (-63.13631, 52.485424,NULL),NULL,NULL), 
   '01-JAN-60','married', 'M', '110,000 - 129,999'); 
        
DELETE FROM customers WHERE 
           customer_id = 1002; 
           
INSERT INTO customers VALUES 
   (1002,'John','Smith', 
   cust_address_typ('1910 Oracle Way','20190','Reston','VA','US'), 
   PHONE_LIST_TYP('+1 703 364 4111'), 
   'us','AMERICA','100','John.Smith@Oracle.com', 
   149, 
   MDSYS.SDO_GEOMETRY(2001, 8307, 
   MDSYS.SDO_POINT_TYPE(-70.120133, 44.795766,NULL),NULL,NULL), 
   '02-MAY-70', 'single', 'M', '70,000 - 89,999'); 


commit; 




SDO_GEOMETRY 构造函数说明 

以下是本练习中要填充的 SDO_GEOMETRY 构造函数的简要说明: 

MDSYS.SDO_GEOMETRY (2001,8307, 
MDSYS.SDO_POINT_TYPE(-63.13631,52.485424,NULL),NULL,NULL) 

该语法中各元素的含义分别如下: 

2001 这是 SDO_GTYPE 属性,在存储二维单点(如客户位置)时将其设为 2001。 
8307 这是空间参照系 ID (SRID):Oracle 词典表 (MDSYS.CS_SRS) 的外键,它包含了所有受支持的坐标系。将客户的位置与坐标系相关联至关重要。本例中,8307 对应于“经度/纬度 (WGS 84)”。 
MDSYS.SDO_POINT_TYPE 这是在 SDO_GEOMETRY 构造函数内存储经度值和纬度值的地方。请注意,您还可以存储第三个值,但是对于这些教程而言,所有客户数据都是二维的。 
NULL, NULL 最后两个空值超出了本教程的讨论范围。无需了解 SDO_GEOMETRY 构造函数的最后两个字段,您就可以构造基于位置的强大查询了。有关 SDO_GEOMETRY 对象中所有字段的详细信息,请参考 Oracle Spatial 用户指南和参考。现在,应将最后这两个字段都设为 NULL。 
返回主题 

将元数据添加到 USER_SDO_GEOM_METADATA 视图 

在创建空间索引前,必须将 CUSTOMERS 和 WARESHOUSES 表的元数据添加到 USER_SDO_GEOM_METADATA 视图。 

注意: 

为每个 SDO_GEOMETRY 列添加一行 
CUSTOMERS 的 SDO_GEOMETRY 列是 cust_geo_location。 
WAREHOUSES 的 SDO_GEOMETRY 列是 wh_geo_location。 
要为客户和仓库添加元数据,执行以下步骤: 

1. 

在登录 OE 模式的 SQL*Plus 会话中,运行以下脚本: 

@add_metadata 

该脚本包含以下语句: 

REM 
REM USER_SDO_GEOM_METADATA, CUSTOMERS and WAREHOUSES 
REM 
-- inserting data into the user_sdo_geom_metadata view 
DELETE FROM USER_SDO_GEOM_METADATA 
   WHERE TABLE_NAME = 'WAREHOUSES' AND COLUMN_NAME = 'WH_GEO_LOCATION' ; 
INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) 
   VALUES ('WAREHOUSES', 'WH_GEO_LOCATION', 
   MDSYS.SDO_DIM_ARRAY 
   (MDSYS.SDO_DIM_ELEMENT('LONG', -180.0, 180.0, 0.005), 
   MDSYS.SDO_DIM_ELEMENT('LAT', -90.0, 90.0, 0.005) 
   ), 
   8307); 
   COMMIT; 
DELETE FROM USER_SDO_GEOM_METADATA 
   WHERE TABLE_NAME = 'CUSTOMERS' AND COLUMN_NAME = 'CUST_GEO_LOCATION' ; 
INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) 
   VALUES ('CUSTOMERS', 'CUST_GEO_LOCATION', 
   MDSYS.SDO_DIM_ARRAY 
   (MDSYS.SDO_DIM_ELEMENT('LONG', -180.0, 180.0, 0.005), 
   MDSYS.SDO_DIM_ELEMENT('LAT', -90.0, 90.0, 0.005) 
   ), 
   8307); 

COMMIT; 


以下是所插入信息的说明: 

TABLE_NAME 这是包含空间数据的表的名称。 
COLUMN_NAME 这是存储空间数据的 SDO_GEOMETRY 列的名称。 
MDSYS.SDO_DIM_ARRAY 这是保存 MDSYS.SDO_DIM_ELEMENT 对象的构造函数,该函数依次将空间数据的范围存储在每个维中 (-180.0, 180.0),公差值为 (0.005)。这个公差是 Oracle Spatial 使用的舍入误差值,经度和纬度数据以米为单位。在本例中,该公差值为 5 mm。 
8307 这是空间参照系 id (SRID):Oracle 典表 (MDSYS.CS_SRS) 的外键,它包含了所有受支持的坐标系。将客户的位置与坐标系相关联至关重要。本例中,8307 对应于“经度/纬度 (WGS 84)”。 
返回主题 

在几何列上创建空间索引 

现在,可以为 CUSTOMERS 和 WAREHOUSES 创建空间索引了: 

1. 

在登录 OE 模式的 SQL*Plus 会话中,运行以下脚本: 

@create_indexes 

该脚本包含以下语句: 

-- creating spatial indexes 
-- **NOTE** storage parameters should be modified for large tables 
-- if the tablespace is not locally managed. 
DROP INDEX warehouses_sidx; 
CREATE INDEX warehouses_sidx ON warehouses(WH_GEO_LOCATION) 
           indextype is mdsys.spatial_index; 
DROP INDEX customers_sidx; 
CREATE INDEX customers_sidx ON customers(CUST_GEO_LOCATION) 
           indextype is mdsys.spatial_index; 






LAYER_GTYPE 该参数既充当约束又充当优化程序的提示。如果使用参数 LAYER_GTYPE =POINT,则进行检查以确保所有几何对象都是点,还要检查参数以确保对点数据进行优化处理。customers 和 warehouses 都只包含点几何对象。 
返回主题列表 

执行基于位置的查询 

您将了解如何执行以下类型的基于位置的查询: 

使用空间索引查找距离某仓库最近的五个邻居(无附加约束) 
使用空间索引在某个位置上查找五个距离最近的邻居(有附加约束) 
使用空间索引标识距另一位置指定距的位置集 
返回主题列表 

使用空间索引查找距离某仓库最近的五个邻居(无附加约束) 

查询 1:查找距离 ID 为 2 的仓库最近的五个客户。 

执行以下步骤: 

1. 

在登录 OE 模式的 SQL*Plus 会话中,运行以下脚本: 

@query1 
该脚本包含以下语句: 

-- Finds the 5 closest customers to warehouse_id = 2 
SELECT /*+ordered*/ 
   c.customer_id, 
   c.cust_first_name, 
   c.cust_last_name 
FROM warehouses w, 
   customers c 
WHERE w.warehouse_id = 2 
AND sdo_nn (c.cust_geo_location, w.wh_geo_location, 'sdo_num_res=5') = 'TRUE'; 




以下是对 select 参数的说明: 

/*+ordered*/ 提示是优化程序的提示,它可确保首先搜索 WAREHOUSES 表。 
SDO_NN 操作符从 CUSTOMERS 表返回距离仓库 2 最近的客户的 SDO_NUM_RES 值。SDO_NN 的第一个参数(上例中的 c.cust_geo_location)是要搜索的列。SDO_NN 的第二个参数(上例中的 w.wh_geo_location)是所要查找最近邻居的位置。不应该对返回结果的顺序进行假设。例如,返回的第一行不能确保是距离仓库 2 最近的客户。如果两个或多个客户距离仓库的距离相等,则可能在对 SDO_NN 的后续调用中返回其中一个。 
在使用 SDO_NUM_RES 参数时,WHERE 子句中没有使用其他约束。SDO_NUM_RES 只考虑近似值。例如,如果您希望找出位于纽约的五个最近客户,而其中四个客户位于新泽西,因而将某个条件添加到 WHERE 子句,那么上述查询将返回一行。该行为特定于 SDO_NUM_RES 参数,而其结果可能不是您想要的。在查询 3 中,您将了解到如何查找位于纽约的 5 个最近的客户。 
查询 2:查找距离仓库 2 最近的 5 个客户,并按距离顺序显示结果 

要返回 5 个最近客户的实际距离,您可以使用 SDO_NN_DISTANCE 操作符。执行以下步骤: 

1. 

在登录 OE 模式的 SQL*Plus 会话中,运行以下脚本: 

@query2 
该脚本包含以下语句: 

-- Finds the 5 closest customers to warehouse_id = 2 
-- and orders the results by distance 
SELECT /*+ordered*/ 
   c.customer_id, 
   c.cust_first_name, 
   c.cust_last_name, 
   sdo_nn_distance (1) distance 
FROM warehouses w, 
   customers c 
WHERE w.warehouse_id = 2 
AND sdo_nn 
(c.cust_geo_location, w.wh_geo_location, 'sdo_num_res=5', 1) = 'TRUE' 
ORDER BY distance; 




以下是对 select 参数的说明: 

SDO_NN_DISTANCE 操作符是 SDO_NN 操作符的辅助操作符;它只能在 SDO_NN 操作符内使用。该操作符的参数是一个与被指定为 SDO_NN 最后一个参数的数字相匹配的数字;在本例中为 1。这个参数没有隐含意义,它只是一个标记。如果指定了 SDO_NN_DISTANCE(),则可以按距离对结果进行排序,并确保返回的第一行是距离仓库最近的客户。如果要查询的数据是以经度和纬度形式存储的,则 SDO_NN_DISTANCE 的默认单位是米。 
SDO_NN 操作符还带有 UNIT 参数,它决定 SDO_NN_DISTANCE 返回的度量单位。但本例中并不使用该参数。 
ORDER BY DISTANCE 子句可确保按顺序返回距离 — 最短的距离位于最前面。 
返回主题 

使用空间索引在某个位置上查找五个距离最近的邻居(有附加约束) 

查询 3:查找 5 个居住在纽约州且距离仓库 3 最近的客户,并以英里为单位按距离顺序返回结果 

执行以下步骤: 

1. 

在登录 OE 模式的 SQL*Plus 会话中,运行以下脚本: 

@query3 
该脚本包含以下语句: 

REM Finds the 5 closest customers to warehouse_id = 3 
REM who reside in NY state, and return the distance in miles, 
REM and order the results by distance 
REM 
REM CUSTOMERS and WAREHOUSES 
REM 


set lines 132 
set pages 1000 


SELECT /*+ordered*/ 
   c.customer_id, 
   c.cust_address.state_province state, 
   sdo_nn_distance(1) distance_in_miles 
FROM warehouses w, 
   customers c 
WHERE w.warehouse_id = 3 
AND sdo_nn (c.cust_geo_location, w.wh_geo_location, 
   'sdo_batch_size =5 unit=mile', 1) = 'TRUE' 
AND c.cust_address.state_province = 'NY' 
AND rownum < state_province =" 'NY'" warehouse_id="3 " warehouse_id =" 3 " warehouse_id =" 3 " distance =" 100" unit="MILE')" warehouse_id =" 3 " unit="MILE')" warehouse_id =" 3 " distance =" 100" unit="MILE')" wh_longitude =" -103.00195," wh_latitude =" 36.500374 " warehouse_id =" 1; " wh_longitude =" -124.21014," wh_latitude =" 41.998016 " warehouse_id =" 2; " wh_longitude =" -74.695305," wh_latitude =" 41.35733 " warehouse_id =" 3; " wh_longitude =" -123.61526," wh_latitude =" 46.257458 " warehouse_id =" 4; " wh_longitude =" -79.4167," wh_latitude =" 43.6667 " warehouse_id =" 5; " wh_longitude =" 151.2000," wh_latitude =" -33.8833 " warehouse_id =" 6; " wh_longitude =" -106.0500," wh_latitude =" 24.3833 " warehouse_id =" 7; " wh_longitude =" 123.8839," wh_latitude =" 39.8667 " warehouse_id =" 8; " wh_longitude =" 72.8333," wh_latitude =" 18.9667 " warehouse_id =" 9; " table_name =" 'WAREHOUSES' " column_name =" 'OE.GET_GEOM(WH_LONGITUDE,WH_LATITUDE)'" layer_gtype="point" initial="1K" next="1K" pctincrease="0'); " warehouse_id =" 3 " query_rewrite_enabled =" TRUE; " query_rewrite_integrity =" TRUSTED; " warehouse_id =" 3 " sdo_batch_size ="5" unit="mile'," state_province =" 'NY' " warehouse_id =" 10" warehouse_id="10" unit="MILE')" warehouse_id =" 10" distance =" 100" unit="MILE')" unit="MILE')" warehouse_id =" 10" distance =" 100" unit="MILE')" remove_workspace="">TRUE) ; 

SELECT warehouse_id, warehouse_name, location_id 
FROM warehouses 
WHERE warehouse_id=10 ; 

exec dbms_wm.DisableVersioning('warehouses') ; 
exec dbms_wm.DisableVersioning('inventories') ; 

ALTER TABLE Warehouses 
MODIFY (wh_longitude null, wh_latitude null); 




返回主题 

总结 

在本教程中,您学习了如何: 

加载新客户及其位置 

在几何列上创建空间索引 

执行基于位置的查询 
创建并使用基于函数的索引 

使用 Workspace Manager 分析当前和建议的位置数据 

2009年4月27日星期一

固定思维害死人,以讹传讹的教训

已经有几年自己不写C++代码了,近日需要改正一个debug正常运行,但是release版本崩溃的问题。在自己的多年固有的意识中release版本是无法调试跟踪的,但是原来这只是一个以讹传讹的说法,下面的这些设置改变了自己多年的固有错误想法。

vc++调试release版本的设置:
project settings/c/c++  optmizations(优化)选择Disable[debug]
Debug info选择program Database
Link标签category/Gerneral选中Generate debug info

如果需要调用dll链接库,则所有工程都需要同样的设置。

release版调试完成,正式发布时候,应该恢复默认设置,否则release版本的代码是没有经过优化的。

2009年4月1日星期三

免费发布动感桌面主题,游来游去的金鱼

桌面的鱼是游来游去的,速度在黑莓8700上比较正常。另外素材全部来自网络,本主题的thm来自berrymail论坛,在此表示感谢。

说明:快捷键基本都是按照bm的规则设置的,桌面仅仅保留APPS图标,支持未读短信自动弹出功能。
第三方快捷键j为gmail,m为china google maps,n为NextAction,w为英文原版的opera mini。

8700 rom4.5实际使用,理论上rom4.5的都应该可用。

上图说话,主题好不好,你说了算。









2009年3月27日星期五

搞定黑莓的幻灯片主题

经过一晚上的摸索,在没有任何svg知识的情况下,看到一个网友的效果图后,自己弄出了黑莓的幻灯片式的主题,我骄傲呀。

=================
Sent by BBEmail v0.5 trial version.

2009年3月26日星期四

在淘宝taobao上开始出售第一个商品,处女作

与其说是卖东西,不如说体验一回淘宝卖家的感受。可千万别有人马上拍呀,手机还在朋友手里呢。
http://item.taobao.com/auction/item_detail.jhtml?item_id=88e6ff07f9f0277047b695c3f76a85c6&x_id=0db2

2009年3月24日星期二

修改黑莓自带浏览器主页地址的新思路

在主题中增加一个web-link,例如指向hao123或google,然后把这个weblink放入桌面,OK搞定了

=================
Sent by BBEmail v0.5 trial version.

点讯黑莓输入法增加自定义词组备份功能

点讯今日升级输入法,最大的改进应该就算是能够导出自定义词组了吧

=================
Sent by BBEmail v0.5 trial version.

2009年3月18日星期三

Google Authorized Websites使用需谨慎,授权关系不受密码是否改变而影响

原来自用一PPC手机,为了能和google calendar同步,安装了GooSync的客户端软件,并授权可以访问google calendar。后改用黑莓手机,期间google密码经过多次改动,PPC手机也送人了,本以为密码改后,PPC就无法同步了,实际上我错了,但凡被google授权后,只有显示的删除授权,否则会一直能够访问更新,不管密码是否发生了变化。

也想清理一下你的授权站点吗?在google帐户设置中找到Change authorized websites链接,进入即可。

2009年3月16日星期一

方向之惑

30刚出头?30已出头?是继续做这种天天开会,扯皮,明争暗斗的所谓管理工作?还是静下心来,研究些实际的东西呢?感觉这两年技术没咋进步,倒是越来越油,越来越社会,越来越适应这种山头林立,拉帮结派的公司氛围,越来越热衷于研究怎么排队,如何分析形式。照这个样子下去,行吗?是不是太早了点?人不能太安逸了,团长是这么告诉我的。

=================
Sent by BBEmail v0.5 trial version.

2009年3月13日星期五

移动gprs计费陷阱

通过短信查询指令cxgtc得到的剩余gprs流量和计费系统的不一致,计费系统即使在已经没有剩余流量可用的情况下,通过短信查询得到的信息还是流量没有用完,还有剩余多少kb的提醒,上月中此招,被多扣除300kb的费用。质询10086后转到专家服务,技术专家承认是移动自身的系统问题造成的,道歉并且派发了10元的充值卡,虽然临近315了,自己实在没精力陪移动折腾,再说了,多少钱反正也都是公司报销的通讯费用,今天充值卡到账,事情结束。

=================
Sent by BBEmail v0.5 trial version.

2009年3月12日星期四

隆重纪念自己的第一个DIY黑莓主题

在一位网友共享资源的情况下,按照自己的喜好修改了一下,见此帖,本人的处女作:
http://www.berrymail.cn/bbs/viewthread.php?tid=10802&extra=&page=4


=================
Sent by BBEmail v0.5 trial version.

2009年3月4日星期三

阿迪这次是当冤大头了

奥运档案:阿迪北京奥运的赞助金额大概是一亿六千万美刀,奥组委的底线价格是4000万美刀,耐克,特步,李宁等公司赞助金额都没超过3000万美刀,最低报价是1000万(估计是李宁),加起来的价格都没够阿迪报价的零头。不管北京奥运会给阿迪带来了什么,多花了一个多亿美刀是肯定的了。中间的故事是这样的,负责人在收到其他公司的标书时候,心已经哇凉哇凉的了,最高都没到底线价格,眼看就要流标了。当看到阿迪最后一个提交的标书标的价格时候,该负责人顿时浑身冒汗,反复确认该价格,完全不敢相信,阿迪给了个这么高的天价。据说是阿迪获知耐克事在必得,出价很高,为了能确保击败耐克才出了这么高的价格。相信这出戏的幕后故事一定很精彩。

Sent via BlackBerry® by BerryMail

2009年3月3日星期二

今收到移动发来的一则短信,共勉

仁者不忧,智者不惑,勇者不惧,信者不悔;锐气藏于胸,和气浮于面,才气见于事,义气施于人;有为有不为,知足知不足!与你共勉,祝君快意人生!

Sent via BlackBerry® by BerryMail

2009年3月2日星期一

黑莓电话功能的惊奇发现

不管是在打出电话还是接电话的过程中,不仅能接听新来的电话,更牛的是还可以拨出另外一个电话,并在两个通话间自由切换,牛逼。

=================
Sent by BBEmail v0.3 trial version.

2009年2月24日星期二

简单分析google maps的基站定位是如何工作的

今天分析移动基站定位原理和分析相关黑莓开发类库得到的部分心得:
1.
google肯定不是从运营商那里获得的基站位置数据库,中国移动也不会给他,Google一定是绕过运营商采集到的。但是最初的数据库从何而来,不得而知,相信在服务推出前应该有一个基础的数据库。

2.
google mobile maps仅利用了基站的Cell ID这一个参数,没有利用其它的例如
TA-时间前置量(Time Advance),RxL-信号接收强度,TxPwr-显示通话中手机的功率发射强度(PowerLevel) 等其他参数。

3.
google mobile maps的用户越多,基站定位结果就越精确,因为带有GPS功能的手机会越来越多,只要这部分用户在程序中enable了GPS,google就会搜集Cell ID和经纬度之间的关系,来补充自己服务器端的数据库。

4.
导航地图生产企业按照这种方式采集基站经纬度信息很容易,成本很低。做法如下:在道路采集作业车上,装配普通智能手机,记录下时间和基站Cell ID的关系,待作业完成后,根据时间从道路的作业光盘中读取当时的GPS经纬度,从而建立Cell ID和经纬度的对应关系库。特点之一就是这种采集方式不需要手机具备GPS功能。

5.
可惜,如果最初展开道路全国作业时就进行此项工作的话,估计就能够很早得到最全的数据库了。错过了google的一单生意了。

2009年2月19日星期四

购买黑莓前请运行硬件测试

进入 options -> status 键入 test 选择all 最后 run即可

发现点讯输入法在黑莓日历中的无法保存的解决方法

那就是最后一个字符不能是汉字的标点符号,例如逗号或者句号,都不可以,否则会触发黑莓的check spelling拼写检查功能,从而导致信息无法保存。
这是一个困扰很久的问题,自己经常利用黑莓的日历记录每天的工作信息。但是总会经常遇到输入完想要保存时候,黑莓菜单会跳到check spelling上面去,然后及时选择save也已经无法保存信息了。

=================
Sent by BBEmail v0.3 trial version.

2009年2月18日星期三

瑞星的江湖,IT圈里永远都不缺少故事

爆炸新闻
http://news.163.com/09/0219/09/52GO009P0001124J.html

反击
http://www.donews.com/Content/200902/6eb588371ac647b5bc05d1522df82493.shtm

参考资料
http://home.donews.com/donews/article/6/60980.html
http://pop.pcpop.com/doc/425006/1.html

http://home.donews.com/donews/article/6/60980.html


瑞星高管被捕 险恶商战迎来大结局
http://www.laonanren.com/news/2009-02/10147.htm

大结局? 肯定不是,好戏还在后头。

黑莓点讯拼音输入法更新速度太慢了。

测试版发布已经有一个多月了,反馈应该都差不多了吧,期待下个版本尽快推出。

=================
Sent by BBEmail v0.3 trial version.

给黑莓安装繁体字支持

解决了在维基百科中出现的乱码现象,另外在twitter中部分乱码也得到解决。

=================
Sent by BBEmail v0.3 trial version.

2009年2月16日星期一

个人对黑莓pushmail的一点感受

原生的邮件处理方案因为中国移动的阻挠行为基本已经没戏了。在众多黑莓爱好者的努力下也有了一些不错的解决方案,sm,bm两者搞的比较早,用户相对也多一些。第三方的方案应该说都只能是pull方案,没办法实现真正的push方案。应该说用户感受,以及稳定性等方面都还有不少的差距,bm到现在为止还只能以berrymail的邮箱地址发邮件,应该说是很令人失望的。自己总结一下在黑莓的邮件解决方案在目前的情况下最优的组合就是139短信通知加gmail手机端收发邮件,另外可以使用bbemail来更新博客或者twitter等应用,还可以感受一点原生发送邮件的解决方案。应该说有了bbemail或者后续跟进的smartmail,bm的前途基本已经看到头了,sm的收费之路也要推迟了。我个人实际只利用此类软件来发送邮件,玩玩而已。因为公司邮件太多,都利用手机来收发的话,烦都烦死了。想象一下在工作中,手机不断滴滴叫的痛苦吧,电脑里要处理,手机里面也要处理。感受实际是很差劲的。

=================
Sent by BBEmail v0.3 trial version.

Blackberry unite验证

经过多个推友的测试结果证明免费的blackberry unite只有在连着usb线的时候才能起到作用,后经过到国外论坛找资料基本已经确定,离开rim的数据服务,blackberry unite是行不通的。

=================
Sent by BBEmail v0.3 trial version.

2009年2月15日星期日

=?UTF-8?B?5ZGo5pyr5rKh5LqL77yM55yL572R57uc6KeG6aKR77yMbmJh5omj56+u5 aSn6LWb?=

小个子战胜了大块头,impossible is nothing。

=================
Sent by BBEmail v0.2 trial version. Please send email to bbemail_support@126.com for registration.

2009年2月14日星期六

=?UTF-8?B?5Li65LqG6Kej5YazaW5zdGFuZ2/lnKjpu5HojpNyb200LjLkuIvpnaLov 5DooYzlvILluLjogIzlho3mrKHliLfmnLo=?=

终于通过几天的不停的折腾,刷机,刷到rom4.5后,instanGO异常问题消失,关键是把google maps给搞定了,而且是英中两个版本全部搞定,也通过这两个软件的稳定运行,证实了rom4.5的网络比4.2的要好很多。

=================
Sent by BBEmail v0.2 trial version. Please send email to bbemail_support@126.com for registration.

2009年2月12日星期四

=?UTF-8?B?5YWz6Zet4oCc5L2O55S16YeP5pe2TEVE6Zeq57u/54Gv5o+Q56S64oCd5 5qE5b+D5b6X?=

来自 berrymail

关闭闪灯提示的两种方法:
方法一 删除收件箱里的一封邮件。
或者
方法二 将"已读"的一封邮件标记为"未读",再将其打开。

=================
Sent by BBEmail v0.2 trial version. Please send email to bbemail_support@126.com for registration.

2009年2月11日星期三

央视大火,韩寒何时被和谐

趁火打劫,韩寒痛骂央视,不知道这厮的博客何时被河蟹。这反低俗搞的很不彻底,还是有死角的。

=================
Sent by BBEmail v0.2 trial version. Please send email to bbemail_support@126.com for registration.

2009年2月10日星期二

乱码问题继续测试

已经把gmail中的utf-8取消了。

=================
Sent by BBEmail v0.2 trial version. Please send email to bbemail_support@126.com for registration.

=?UTF-8?B?5Yip55SodHdpdHRlcm1haWzmm7TmlrBUd2l0dGVy6YG/5YWN5Ye6546w6 ZW/5bC+5be055qE5pa55rOV?=

设置twittermail为邮件标题更新的方式,可以避免邮件正文中的尾巴出现

=================
Sent by BBEmail v0.2 trial version. Please send email to bbemail_support@126.com for registration.

2009年2月9日星期一

Google maps 又犯毛病了

机器刷了rom45的,之前运行还算正常的google maps又不能连接到网络了,晕死。

=================
Sent by BBEmail v0.2 trial version. Please send email to bbemail_support@126.com for registration.

查询已经使用的GPRS流量

发送 CXGLL to 10086

查询GPRS剩余可用流量的命令

CXGTC to 10086

在gmail中批量操作技巧,例如设置全部未读邮件为已读

1. 在 gmail的搜索选项中,选择你要批处理的邮件,例如选择‘未读邮件’。
2. 搜索结果出来后选择‘全部’结果,此时会在工具栏下面,搜索结果上面出现‘此页中的所有20会话都已被选中。选择所有与此搜索相符合的会话。’
3. 点击‘选择所有与此搜索相符合的会话’链接。
4. 在‘更多操作’中选择‘标记为已读’即可。

其他批量处理技巧与上相似。

今日元宵节日

不给面子的是,先是白天卫星出故障,导致很多电视信号出故障,后来就是央视大楼的冲天大火。

=================
Sent by BBEmail v0.2 trial version. Please send email to bbemail_support@126.com for registration.

2009年2月6日星期五

试用InstanGO

感觉不是很稳定的说

2009年2月4日星期三

三星S600耗电量的问题

买了大概一年多了的三星S600,耗电量太惊人了,新的南浮电池基本也就拍十几张就已经不行了,而且经常出现因为没电导致镜头无法收回的问题。三星的破相机,服了。

Sent via BlackBerry® by BerryMail

2009年1月31日星期六

节后上班第一天

各个单位放鞭炮的动静太震撼了,公家的钱就是好花。

Sent via BlackBerry® by BerryMail

google好像疯了

所有网站都被google提示为恶意的病毒网站,‘该网站可能含有恶意软件,有可能会危害您的电脑。’ ‘警告- 访问该网站可能会损害您的计算机!’

遭到女儿表扬了

在回哈的火车上,人巨多特挤,关键是没有买到坐票,上车安顿下来之后直奔餐车而去,搞定座位,很宽松的说。女儿表扬:爸爸大事能办好。哦耶。

Sent via BlackBerry® by BerryMail

2009年1月28日星期三

下载梁羽生的小说

成功从EASOU.COM宜搜上面下载梁羽生的电子书。七剑下天山和云海玉弓缘。并且在阅读器ANYVIEW里面设置成功。梁羽生走了,可他还活在曾经的武侠迷中。

Sent via BlackBerry® by BerryMail

2009年1月27日星期二

测试BM附件发送图片

通过BM把图片发布到BLOGGER上面,使用邮件附件的方法。

Sent via BlackBerry® by BerryMail

GOOGLE地图我的位置功能

黑莓上的GOOGLE地图,不是很稳定的说,经常提示程序需要数据连接等信息,而且其中的我的位置功能貌似也不稳定,切换城市的时候很好用,莫非是移动对GOOGLE进行了限制,应该不会呀,GOOGLE的此项功能应该是绕开移动的说。

Sent via BlackBerry® by BerryMail

2009年1月26日星期一

去大庆

陪老婆孩子去大庆,过年串门,就是回北京的车票还没戏呢,不管了,车到山前必有路。

Sent via BlackBerry® by BerryMail

车票更难买了

ZF把网上的车票转让给关了,结果就是彻底买不到票了。

Sent via BlackBerry® by BerryMail

宅男

牛年初一,基本没出屋,宅男,明天出去串门。

Sent via BlackBerry® by BerryMail

Test

Happy new year

Sent via BlackBerry® by BerryMail
----
hello every one

2009年1月25日星期日

被女儿雷到了

太搞笑了,祖英开始独唱的时候,老婆说,怎么又是她,我说,重量级歌手呗,女儿接了一句,立刻把我雷到了,问:她重量级?多少斤呀。

2009年1月24日星期六

黑莓自带浏览器无法显示 google reader内容的解决方法

浏览器 options 中 broswer configuration 去掉 support style sheets 的勾。

2009年1月21日星期三

关于黑莓中的OFFICE文档查看程序

黑莓的OFFICE文档查看程序基本是不需要安装的,因为GMAIL中是可以很容易查看附件中的文档内容的,DOC,XLS,PPT都是可以的。

Sent via BlackBerry® by BerryMail
----
手机邮件,临时方案。

关于国内对奥巴马就职演讲的和谐版

国内对奥巴马的演讲词进行了和谐,删除了其中关于对外关系的两段,删除共产主义的那块能够理解,可是把那段关于什么通过贪腐,欺骗,排除意见人士而维护政权的部分也删除,这就叫人不好理解了,为什么我们的精英们把这段话也删除了呢?是通过行动来证实,我们的ZF完完全全符合这条内容吗?那么主动的对号入座,真让我等对于这个政权还报有一丝希望的良民们彻底绝望了。

Sent via BlackBerry® by BerryMail
----
手机邮件,临时方案。

郁闷的年终奖处理方案

公司邮件说没有年终奖了,每人就是500过节费。郁闷的不是没有年终奖,而是和之前的沟通会说法不一。之前说法是普通员工照常,管理层减半。没有年终奖不是你的错,前后不一就是你的不对了,大家都有心里预期了,让我如何跟下属交待呢。

Sent via BlackBerry® by BerryMail
----
手机邮件,临时方案。

家乐福购物

在家乐福购物,买点过节用品,人这个多呀,跟不要钱似的抢购,不知道那些叫唤抵制法国货的爱国青年们是否会到家乐福买年货。

Sent via BlackBerry® by BerryMail
----
手机邮件,临时方案。

2009年1月20日星期二

移动EDGE网络

感觉近来移动的EDGE网络覆盖已经很全面了,在北京市区,郊区,火车沿线的大部分时刻也都能得到E网的覆盖。稳定性看来也还可以。

Sent via BlackBerry® by BerryMail
----
手机邮件,临时方案。

等待BM的新版本

暂时不准备使用BM来收邮件,除了在4.2中有未读提醒个数错误之外,估计对于电量也有较大的消耗,关键在于只能使用BERRYMAIL的地址发邮件,就没法在正式场合使用了。等待下个版本再说吧。

Sent via BlackBerry® by BerryMail
----
手机邮件,临时方案。

移动139邮箱具体业务各地不同

北京移动在到达通知这块提供普通短信和长短新等两种短信通知形式,黑龙江移动仅仅提供普通短信通知,而且只显示邮件标题而不显示邮件正文。本来要利用BM的发送邮件功能来免费发送短信的,看样子并不是所有的移动139邮箱用户都能在短信通知中看到邮件正文的,而且标题也仅仅显示前面几个字而已。

Sent via BlackBerry® by BerryMail
----
手机邮件,临时方案。

以后尝试使用bm更新本博客

关闭BM的自动下载邮件选项,只使用发邮件功能。

Sent via BlackBerry® by BerryMail
----
手机邮件,临时方案。

终于解决了BM发送邮件的问题

莫名其妙的就解决了,唯一处理的就是运行了系统自带的那个内存情理程序。虽然现在也偶尔报告异常,但是邮件已经收发都很正常了,而且貌似速度不错的说。

Sent via BlackBerry® by BerryMail
----
mail: wangtao.wxy@gmail.com

貌似解决了google maps在黑莓中异常的问题

有的煤油会遇到类似于 此程序需要数据连接,网络不可用,等类似的报错信息。我业遇到过,现在的解决方法是 情理内存,后此现象自行消失。

Sent via BlackBerry® by BerryMail
----
mail: wangtao.wxy@gmail.com

2009年1月17日星期六

他奶奶的,终于买到火车票了

本来也是做好了乘坐飞机回去的打算了,想想铁道部的这些人公然不顾人们对实名购票的呼吁,油盐不进的傲慢之风就来气。都是那些有关系的人在做真正的票贩子。既得利益者,既得利益集团,让他们主动放弃巨大的利益,是永远都不可能的。

2009年1月8日星期四

点讯 梅花 黑莓 输入法 测试版 试用 报告

今天偶然发现了的,梅花也出黑莓输入法了,very激动,赶紧下载下来测试,黑莓8700, rom 4.2的,成功安装,试玩半小时,总体感觉相当不错,只是在 日历 中输入的时候,有时候没有保存,及时选择 save了,不知道跟我安装的QuickWheel有没有关系。 继续体验吧。

2009年1月6日星期二

黑莓的又一人性设计

充电完成后,会自动断开,不会造成过充现象,其他机器可能也有这功能,但是黑莓系统会把所有充电相关的指示都清除掉。

入手黑莓8700

今日在中关村入手了一台黑莓8700,也结识了村里的一个批发商,当场揭穿了他的什么软解机之类的忽悠,很实在的和他聊了聊黑莓的现状,他也看出来我玩黑莓很长时间了,不是那种菜鸟,和我基本上全盘托出目前的现状,用他的话来说,黑莓,国内现在的水太深了,呵呵,总而言之,我还是老老实实的买个8700玩吧,其余的就算了,不管多便宜都不能买。目前来讲,只有8700才很具性价比,而且没有太多的问题,当然就是这样里面也有很多猫腻,同样的加强给我换了3个机器,才算把真东西拿出来。

用一段时间再说吧,一天时间太短了,希望没有大问题了。