123
返回列表 发新帖
楼主: liyihongcug

gis与元胞机

[复制链接]
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
21#
 楼主| 发表于 2014-4-22 21:31 | 只看该作者
本帖最后由 liyihongcug 于 2014-4-23 10:12 编辑

本周首先对C4.5的算法步骤进行了梳理:
  Step1.对数据源进行数据预处理,将连续型的属性变量进行离散化处理形成决策树的训练集(如果没有连续取
值的属性则忽略);
  (1)根据原始数据,找到该连续型属性的最小取值a0。、最大取值a(n+1) ;
  (2)在区间[a,b]内插入n个数值等分为n+1个小区间;
  (3)分别以ai,i=l,2,… ,n为分段点,将区间【a0, a(n+1) 】划分为两个子区间:
  Step2.计算每个属性的信息增益和信息增益率;
  (1)计算属性A的信息增益Gain(A)
信息增益Gain(A)的计算和ID3算法中的完全一致;
  (2)计算属性A的信息增益率Gain—Ratio(A)
Gain—Ratio(A)= Gain(A)/I(A)
  对于取值连续的属性而言,分别计算以ai (i=l,2,…,n)为分割点,对应分类的信息增益率,选择最大信息
增益率对应的n ,作为该属性分类的分割点。
  选择信息增益率最大的属性,作为当前的属性节点,得到决策树的根节点。
  Step3.根节点属性每一个可能的取值对应一个子集,对样本子集递归地执行以上Step2过程,直到划分的每个
子集中的观测数据在分类属性上取值都相同,生成决策树。
  Step4.根据构造的决策树提取分类规则,对新的数据集进行分类。

    随后对数据挖掘十大算法之一的另一个进行了研究——CART算法。
  CART算法是决策树算法中的一种,基本理论与C4.5算法类似,也是一种比较经典的决策树算法。
1.背景:
  分类与回归树(CART——Classification And Regression Tree) ) 是一种非常有趣并且十分有效的非参数分类和回归方法。它通过构建二叉树达到预测目的。该方法是四位美国统计学家耗时十多年辛勤劳动的成果。在他们所著的“Classification And Regression Tree(1 9 8 4) ”一书中有该方法的详细说明。
  分类与回归树CART 模型最早由Breiman 等人提出,已经在统计领域和数据挖掘技术中普遍使用。它采用与传统统计学完全不同的方式构建预测准则,它是以二叉树的形式给出,易于理解、使用和解释。由CART 模型构建的预测树在很多情况下比常用的统计方法构建的代数学预测准则更加准确,且数据越复杂、变量越多,算法的优越性就越显著。模型的关键是预测准则的构建,准确的。
  2.定义:
  分类和回归首先利用已知的多变量数据构建预测准则, 进而根据其它变量值对一个变量进行预测。在分类中, 人们往往先对某一客体进行各种测量, 然后利用一定的分类准则确定该客体归属那一类。例如, 给定某一化石的鉴定特征, 预测该化石属那一科、那一属, 甚至那一种。另外一个例子是, 已知某一地区的地质和物化探信息, 预测该区是否有矿。回归则与分类不同, 它被用来预测客体的某一数值, 而不是客体的归类。例如, 给定某一地区的矿产资源特征, 预测该区的资源量。

P.S.下两周主要对C4.5算法进行应用,阅读《基于C4.5决策树的流量分类方法》和《基于C4.5算法的数据挖掘应用研究》进行理论实践,并尝试用软件运行;同时了解CART的预测准则和应用范围。
http://blog.sina.com.cn/s/blog_7399ad1f01014oic.htmlhttp://wenku.baidu.com/link?url=G7HkU5oqn01amLK7MWGKI-6bWag4T_s7FRZk-Pb6vw03h6E4iG3-Dcq77PBm8IFxVDAct6Hncd5V9SqObFjgH-A0d4PUEn9Z9jg0WgzlJvq
http://doc.mbalib.com/view/c9bb3918c6684e2ad916096613fd74ee.html
http://www.docin.com/p-473038039.html

计算方法编辑若x1,x2,x3......xn的平均数为m

方差公式


则方差


2
方差的概念与计算公式编辑
例1 两人的5次测验成绩如下:
X: 50,100,100,60,50 E(X )=72;
Y: 73, 70, 75,72,70 E(Y )=72。
平均成绩相同,但X 不稳定,对平均值的偏离大。方差描述随机变量对于数学期望的偏离程度。
单个偏离是消除符号影响方差即偏离平方的均值,记为D(X ):
直接计算公式分离散型和连续型,具体为:这里 是一个数。推导另一种计算公式
得到:“方差等于平方的均值减去均值的平方”。
其中,分别为离散型和连续型计算公式。 称为标准差或均方差,方差描述波动
方差的性质1.设C为常数,则D(C) = 0(常数无波动);
2. D(CX )=C2 D(X ) (常数平方提取);
证:特别地 D(-X ) = D(X ), D(-2X ) = 4D(X )(方差无负值)
3.若X 、Y 相互独立,则,证:记
前面两项恰为 D(X )和D(Y ),第三项展开后为
当X、Y 相互独立时,故第三项为零。特别地独立前提的逐项求和,可推广到有限项。
方差公式:
平均数
(n表示这组数据个数,x1、x2、x3……xn表示这组数据具体数值)

方差公式:

常用分布的方差1.两点分布
2.二项分布
X ~ B ( n, p )
引入随机变量 Xi (第i次试验中A 出现的次数,服从两点分布)
3.泊松分布(推导略)
4.均匀分布
另一计算过程为
5.指数分布(推导略)
6.正态分布(推导略)
7.t分布 :其中X~T(n),E(X)=0;

8.F分布:其中X~F(m,n),
;

正态分布的后一参数反映它与均值 的偏离程度,即波动程度(随机波动),这与图形的特征是相符的。
例2 求上节例2的方差。
解 根据上节例2给出的分布律,计算得到
工人乙废品数少,波动也小,稳定性好。

3
方差的定义:编辑
设一组数据x1,x2,x3……xn中,各组数据与它们的平均数x(拔)的差的平方分别是(x1-x拔)2,(x2-x拔)2……(xn-x拔)2,那么我们用他们的平均数来衡量这组数据的波动大小,并把它叫做这组数据
的方差。



Kmeans算法
编辑
k-means 算法接受参数 k ;然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。
K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
假设要把样本集分为c个类别,算法描述如下:
(1)适当选择c个类的初始中心;
(2)在第k次迭代中,对任意一个样本,求其到c各中心的距离,将该样本归到距离最短的中心所在的类;
(3)利用均值等方法更新该类的中心值;
(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。
算法的最大优势在于简洁和快速。算法的关键在于初始中心的选择和距离公式。

2
算法流程编辑
首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。

3
具体流程编辑
输入:k, data[n];
(1) 选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1];
(2) 对于data[0]….data[n], 分别与c[0]…c[k-1]比较,假定与c差值最少,就标记为i;
(3) 对于所有标记为i点,重新计算c={ 所有标记为i的data[j]之和}/标记为i的个数;
(4) 重复(2)(3),直到所有c值的变化小于给定阈值。 http://blog.csdn.net/aladdina/article/details/4141127
http://www.cs.uvm.edu/~icdm/algorithms/CandidateList.shtml

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
22#
 楼主| 发表于 2014-4-24 18:38 | 只看该作者
本帖最后由 liyihongcug 于 2014-5-14 21:23 编辑

http://blog.sina.com.cn/s/blog_5fc375650102dqri.html

一、异常值是指什么?请列举1种识别连续型变量异常值的方法?

异常值(Outlier) 是指样本中的个别值,其数值明显偏离所属样本的其余观测值。在数理统计里一般是指一组观测值中与平均值的偏差超过两倍标准差的测定值。
Grubbs’ test(是以Frank E. Grubbs命名的),又叫maximum normed residual test,是一种用于单变量数据集异常值识别的统计检测,它假定数据集来自正态分布的总体。
未知总体标准差σ,在五种检验法中,优劣次序为:t检验法、格拉布斯检验法、峰度检验法、狄克逊检验法、偏度检验法。

二、什么是聚类分析?聚类算法有哪几种?请选择一种详细描述其计算原理和步骤。

聚类分析(cluster analysis)是一组将研究对象分为相对同质的群组(clusters)的统计分析技术。 聚类分析也叫分类分析(classification analysis)或数值分类(numerical taxonomy)。聚类与分类的不同在于,聚类所要求划分的类是未知的。
聚类分析计算方法主要有: 层次的方法(hierarchical method)、划分方法(partitioning method)、基于密度的方法(density-based method)、基于网格的方法(grid-based method)、基于模型的方法(model-based method)等。其中,前两种算法是利用统计学定义的距离进行度量。
k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然 后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。
其流程如下:
(1)从 n个数据对象任意选择 k 个对象作为初始聚类中心;     
(2)根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;   
(3)重新计算每个(有变化)聚类的均值(中心对象);
(4)循环(2)、(3)直到每个聚类不再发生变化为止(标准测量函数收敛)。
优点:本算法确定的K 个划分到达平方误差最小。当聚类是密集的,且类与类之间区别明显时,效果较好。对于处理大数据集,这个算法是相对可伸缩和高效的,计算的复杂度为O(NKt),其中N是数据对象的数目,t是迭代的次数。一般来说,K<<N,t<<N 。
缺点:1. K 是事先给定的,但非常难以选定;2. 初始聚类中心的选择对聚类结果有较大的影响。

三、根据要求写出SQL
表A结构如下:

Member_ID (用户的ID,字符型)
Log_time (用户访问页面时间,日期型(只有一天的数据))
URL (访问的页面地址,字符型)
要求:提取出每个用户访问的第一个URL(按时间最早),形成一个新表(新表名为B,表结构和表A一致)

create table B as select Member_ID, min(Log_time), URL from A group by Member_ID ;

四、销售数据分析
以下是一家B2C电子商务网站的一周销售数据,该网站主要用户群是办公室女性,销售额主要集中在5种产品上,如果你是这家公司的分析师,
a) 从数据中,你看到了什么问题?你觉得背后的原因是什么?
b) 如果你的老板要求你提出一个运营改进计划,你会怎么做?
表如下:一组每天某网站的销售数据

a) 从这一周的数据可以看出,周末的销售额明显偏低。这其中的原因,可以从两个角度来看:站在消费者的角度,周末可能不用上班,因而也没有购买该产品的欲望;站在产品的角度来看,该产品不能在周末的时候引起消费者足够的注意力。
b) 针对该问题背后的两方面原因,我的运营改进计划也分两方面:一是,针对消费者周末没有购买欲望的心理,进行引导提醒消费者周末就应该准备好该产品;二是,通过该产品的一些类似于打折促销等活动来提升该产品在周末的人气和购买力。

五、用户调研
某公司针对A、B、C三类客户,提出了一种统一的改进计划,用于提升客户的周消费次数,需要你来制定一个事前试验方案,来支持决策,请你思考下列问题:
a) 试验需要为决策提供什么样的信息?
c) 按照上述目的,请写出你的数据抽样方法、需要采集的数据指标项,以及你选择的统计方法。

a) 试验要能证明该改进计划能显著提升A、B、C三类客户的周消费次数。

b) 根据三类客户的数量,采用分层比例抽样;
需要采集的数据指标项有:客户类别,改进计划前周消费次数,改进计划后周消费次数;
选用统计方法为:分别针对A、B、C三类客户,进行改进前和后的周消费次数的,两独立样本T-检验(two-sample t-test)。

http://blog.csdn.net/wrchow/article/details/6412959
http://blog.csdn.net/wrchow/article/details/6403184#comments
http://blog.csdn.net/bentley2010/article/details/7746335

1.Google Maps 在谷歌全球开发技术推广网站的链接:https://developers.google.com/maps/

2.Google Maps Javascript API V3  API基础知识链接:https://developers.google.com/maps/documentation/javascript/basics

3.Google Maps Javascript API V3  基本代码范例链接 https://developers.google.com/maps/documentation/javascript/examples/

4. Google Street View Image API 谷歌地图街景API链接:https://developers.google.com/maps/documentation/streetview/

5.Google 地球 API 开发人员指南链接:https://developers.google.com/earth/documentation/OOGLE地图放大或缩小时会根据当前缩放比例加载对应比例的图片,缩放等级从0-17级。图片划分原则:
GOOGLE地图中的每一块小图片为固定256*256像素。
0级时,总共为四张图片拼成一个世界地图
1级时,每一小级对应扩大为四张小图,即1级时共有16张图片
其它以次类推。 google.maps.Marker对象可以听下面的用户事件,例如:
  • 'click'
  • 'dblclick'
  • 'mouseup'
  • 'mousedown'
  • 'mouseover'
  • 'mouseout'

These events may look like standard DOM events, but they are actually part of the Maps API.这些事件可能看起来像标准的DOM事件,实际上却是在地图API的一部分。

MVC的对象通常包含状态。.每当一个对象的属性的变化,API将触发一个改变事件的属性。例如,该API会触发一个zoom_changed发生变化,在地图上地图的缩放级别。您可以通过注册拦截改变addListener()在事件处理程序event命名方法以及http://liaomeihua2300.blog.163.c ... 919201081023931425/




使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
23#
 楼主| 发表于 2014-5-11 23:25 | 只看该作者

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
24#
 楼主| 发表于 2014-5-21 14:31 | 只看该作者
本帖最后由 liyihongcug 于 2014-5-23 18:14 编辑

http://www.cnblogs.com/ninemilli/archive/2011/12/26/2289285.html
http://blog.csdn.net/hugoandpig/article/details/7719307  http://blog.newnaw.com/?p=789http://books.google.com.hk/books?id=IAqEIVHwTWkC&pg=PA207&lpg=PA207&dq=var+placemark+%3D+ge.createPlacemark('');++fail&source=bl&ots=mGJY4Gnb_r&sig=Dp5Rqtiy9Fr4zzpoNiiUA6VC71w&hl=zh-CN&sa=X&ei=wPF9U4vEIs388QWAioCgDA&ved=0CFcQ6AEwBg#v=onepage&q=var%20placemark%20%3D%20ge.createPlacemark('')%3B%20%20fail&f=false
http://productforums.google.com/forum/#!topic/earth/ke5l6vwGEQ0
https://groups.google.com/forum/#!forum/kml-support
https://groups.google.com/forum/#!topic/maptiler/XCJdgqMTGMM https://developers.google.com/ea ... kml_placemark?csw=1https://3dwarehouse.sketchup.com/model.html?redirect=1&mid=9f6b297f3b28d7473cd3af9ea22a40bf
http://blog.csdn.net/linghe301/article/details/7969669  http://blog.sina.com.cn/s/blog_648076920100oqsd.htmlhttp://www.xzbu.com/2/view-4172017.htm

地址:http://mt0.googleapis.com/vt?src=apiv3&x=${x}&y=${y}&z=${z}  http://hi.baidu.com/znn1980/item/13ca960e48b620dddde5b0f8

卫星:http://khm0.googleapis.com/kh?v=143&x=1675&y=789&z=11

x:瓦片坐标系

y:瓦片坐标系

z:缩放级别

[backcolor=white !important][size=1em]
[backcolor=rgb(250, 250, 250) !important][size=1em]1

[backcolor=white !important][size=1em]2

[backcolor=rgb(250, 250, 250) !important][size=1em]3

[backcolor=white !important][size=1em]4

[backcolor=rgb(250, 250, 250) !important][size=1em]5

[backcolor=white !important][size=1em]6

[backcolor=rgb(250, 250, 250) !important][size=1em]7

[backcolor=white !important][size=1em]8

[backcolor=rgb(250, 250, 250) !important][size=1em]9

[backcolor=white !important][size=1em]10

[backcolor=rgb(250, 250, 250) !important][size=1em]11

[backcolor=white !important][size=1em]12

[backcolor=rgb(250, 250, 250) !important][size=1em]13

[backcolor=white !important][size=1em]14

[backcolor=rgb(250, 250, 250) !important][size=1em]15

[backcolor=white !important][size=1em]16

[backcolor=rgb(250, 250, 250) !important][size=1em]17

[backcolor=white !important][size=1em]18

[backcolor=rgb(250, 250, 250) !important][size=1em]19

[size=1em][backcolor=rgb(250, 250, 250) !important][size=1em]//将tile(瓦片)坐标系转换为lnglat(经度纬度)坐标系
[backcolor=white !important][size=1em]  
[backcolor=rgb(250, 250, 250) !important][size=1em]public static Lnglat toLnglat(Tile tile) {
[backcolor=white !important][size=1em]        double n = Math.pow(2, tile.getZoom());
[backcolor=rgb(250, 250, 250) !important][size=1em]        double lng = tile.getX() / n * 360.0 - 180.0;
[backcolor=white !important][size=1em]        double lat = Math.atan(Math.sinh(Math.PI * (1 - 2 * tile.getY() / n)));
[backcolor=rgb(250, 250, 250) !important][size=1em]        lat = lat * 180.0 / Math.PI;
[backcolor=white !important][size=1em]        return new Lnglat(lng, lat);
[backcolor=rgb(250, 250, 250) !important][size=1em]  
[backcolor=white !important][size=1em] }
[backcolor=rgb(250, 250, 250) !important][size=1em]  
[backcolor=white !important][size=1em]//将lnglat坐标系转换为tile坐标系
[backcolor=rgb(250, 250, 250) !important][size=1em]  
[backcolor=white !important][size=1em]public static Tile toTile(int zoom, Lnglat lnglat) {
[backcolor=rgb(250, 250, 250) !important][size=1em]        double n = Math.pow(2, zoom);
[backcolor=white !important][size=1em]        double tileX = ((lnglat.getLng() + 180) / 360) * n;
[backcolor=rgb(250, 250, 250) !important][size=1em]        double tileY = (1 - (Math.log(Math.tan(Math.toRadians(lnglat.getLat())) + (1 / Math.cos(Math.toRadians(lnglat.getLat())))) / Math.PI)) / 2 * n;
[backcolor=white !important][size=1em]        return new Tile(new Double(tileX).intValue(), new Double(tileY).intValue(), zoom);
[backcolor=rgb(250, 250, 250) !important][size=1em]}





使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
25#
 楼主| 发表于 2014-5-23 22:34 | 只看该作者
本帖最后由 liyihongcug 于 2014-6-20 21:47 编辑

http://blog.renren.com/share/232606452/13787834516  http://www.cnblogs.com/zhangjun1 ... /05/08/3066921.html  http://greatmaps.codeplex.com/  http://www.cnblogs.com/ninemilli/archive/2011/12/26/2289285.html  http://www.cnblogs.com/liongis/archive/2010/04/30/1724937.html刚对常用的几种事件做了一下分析:
1 地图开始加载到完成触发的事件及顺序:
bounds_changed
tilesloaded
2 地图放大缩小 触发的事件顺序分别为(鼠标滚轮向上或下滚动一次):
center_changed
zoom_changed
bounds_changed
tilesloaded
鼠标滚轮向上或下滚动多次:
center_changed
zoom_changed
bounds_changed
以上三个事件顺序循环触发
tilesloaded (这个事件触发多次取决于移动滚轮的速度,最终是再会触发一次)
如果速度太快也会报


3 当拖动地图
center_changed
bounds_changed
以上两种事件的触发次数取决于移动的距离
dragend (当鼠标松开会触发一次)
tilesloaded (如果移动过程中有短暂的停留会触发该事件多次)
如果在松开鼠标前有停留,tilesloaded 可能会在 dragend 之前触发(取决于加载速度),如果是鼠标按下后快速的移动并且放开 在 dragend 事件后 还会触发 center_changed ,bounds_changed事件,因为地图还在移动。
总之dragend 只触发一次,并且是在鼠标松开时触发(mouseup)
总结:视图改变时用ajax 获取数据时不要绑定center_changed和bounds_changed事件,如果是通过拖拽改变视图 请求最少的事件为 dragend ,如果是放大或缩小的方式可以考虑zoom_changed,兼容所有用户行为事件的为tilesloaded 。  http://www.dewen.org/q/915
http://www.chawenti.com/articles/17303.html

提及的最近的一个项目,数据源是一张高分辨率的2.5维图片,现在已经成功转化成了带有地理坐标的TIFF格式。下面将介绍借助GeoServer如何将这个TIFF格式的数据以TMS(Tiled Map Service)的形式发布出去。此前笔者利用商业软件ArcGIS Server发布地图服务已经算是比较熟悉了。此次利用开源软件发布还处于摸索与学习阶段。

    1.GeoServer介绍

    GeoServer是OpenGIS Web 服务器规范的J2EE实现的社区开源项目。利用GeoServer可以方便地发布地图数据,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。它能兼容WMS和 WFS 特性;支持 PostGIS 、Shapefile 、ArcSDE、 Oracle 、VPF 、MySQL 、MapInfo ;支持上百种投影;能够将网络地图输出为 jpeg、gif、 png 、SVG 、 KML 等格式;支持 AJAX 的地图客户端OpenLayers;

    2.GeoServer下载与安装

    下载地址: http://geoserver.org/display/GEOS/Welcome,最新版本是GeoServer 2.3.3,关于GeoServer具体的安装过程在这里就不展开去介绍了,安装过程中有个注意事项,在设置端口号的时候,如果本机默认安装了Tomcat服务器,GeoServer的端口号不要设置成默认的8080,避免与Tomcat的端口号冲突,造成不必要的麻烦。

    3.发布WMS

  (1)首先启动GeoServer服务,点击Start GeoServer,会弹出一个控制台程序,等运行完毕后,点击GeoServer Web Admin Page打开GeoServer的主页,输入用户名admin,密码geoserver,打开后主页如图所示。


  (2)建立工作空间,通过Add new workspace添加新空间test,并设置它为默认空间。

  (3)添加Store,点击Add new Store,可以看到数据源包括很多,有矢量数据源(Vector Data Sources),栅格数据源(Raster Data Sources)等等。这里我们选择GeoTIFF,把上篇文章里转化的带有地理坐标的TIFF格式的图片加载进来即可。

  (4)发布WMS,点击Publish按钮发布刚刚新建的图层s。

  (5)弹出设置发布参数的显示框,如图所示。包括4个标签,数据、发布、尺寸、切片缓存等,如无需切片缓存,可以不做任何设置,直接默认保存即可。

  (6)在Layer Preview中点击OpenLayers可以查看已经发布的地图,如图所示。

  (7)至此,WMS已经发布成功,在浏览器里可以看到服务的地址http://localhost:8080/geoserver/test/wms?service=WMS&version=1.1.0&request=GetMap&layers=test:s&styles=&bbox=-0.5,-3071.5,6143.5,0.5&width=660&height=330&srs=EPSG:404000&format=application/openlayers,我们可以通过openlayers去调用wms,从而在浏览器中看到我们发布的地图服务。

  4.发布TMS

  (1)刚刚发布的过程中没有设置Tile Caching选项,如果要发布切片服务,则需要对其进行设置,在设置Tile Caching之前首先新建一个Gridsets,设置格网集的名称、坐标系、切片的范围、切片的宽与高以及切片的级数,图中设置了6级。其中切片的范围来源于发布地图时的地图范围

https://developers.google.com/maps/documentation/javascript/overlays?csw=1#CustomMapTypes   http://www.doyouhike.net/forum/comm_nav/topics/4/940520,0,0,0.html

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
26#
 楼主| 发表于 2014-6-20 21:53 | 只看该作者
本帖最后由 liyihongcug 于 2014-6-20 21:55 编辑

http://blog.sina.com.cn/s/blog_ba3ace5f0101i879.html
匹配至这些在线地图服务的切片尺寸和缓存比例,可在客户端应用程序中实现快速的叠加。如果计划使用 ArcGIS Online、Google 地图或 Bing 地图叠加自定义的地图服务,请在创建地图时执行以下工作流程:
1   创建地图
    第一步,您将通过在 ArcMap 中添加数据并对其进行相应的符号化创建地图。
2   将坐标系更改为 WGS 1984 Web Mercator (auxiliary sphere)
    要更改坐标系,请执行以下操作:
    1. 右键单击 ArcMap 内容列表中的数据框名称(默认为图层),然后选择属性。
    2. 单击坐标系选项卡。
    3. 单击 Projected Coordinate Systems > World > WGS 1984 Web Mercator (auxiliary sphere)。这也是 ArcGIS Online、Google 地图和 Bing 地图所使用的坐标系。 如下图所示。



    4. 单击确定。
    旧版本:
    ArcGIS 的早期版本建议使用 WGS 1984 Web Mercator 投影坐标系。WGS 1984 Web Mercator (auxiliary sphere) 是一种等效的坐标系,其简化了某些数据集所需的基准变换。
3   依据 ArcGIS Online、Google 地图和 Bing 地图所使用的比例设计地图
    地图服务的用户想要在 ArcGIS Online、Google 地图和 Bing 地图所使用的比例上查看地图。在本例中,只应在这些比例上设计地图。但是,如何得知这些比例是多少呢?
    可以通过执行以下操作,将这些比例加载到 ArcMap 的比例下拉列表中:
    1.  在 ArcMap 中打开地图文档。
    2.  在标准工具工具条上,单击比例下拉列表,然后选择自定义此列表。
    3.  单击加载,然后选择 ArcGIS Online/Bing 地图/Google 地图。如下图所示。



    4.  单击确定应用您的更改。此时,您将可以查看这些流行的 Web 地图服务所采用的比例,并使用下拉列表在这些比例之间轻松跳转。
    设计地图时,您仅需保证其在缓存比例下的良好外观即可。如果不打算以较大比例对地图进行缓存,则不需要在那些较大比例下做任何设计工作。
    设置图层的比例范围,以使每个比例下显示的数据和标注的数量正好合适,而且进行了相应地符号化。设置比例范围时,应避免在设计时所用的比例或近似比例下开关图层。
    您最好对图层进行复制,以便在不同的比例下对其进行符号化。ArcMap 内容列表可包含图层的多个副本,每个副本都具有其自己的符号系统和比例范围。要复制图层,可在 ArcMap 内容列表中右键单击该图层,然后单击复制。然后右键单击数据框名称,并单击粘贴图层。
4   定义地图缓存切片方案并将地图发布为服务
    在 ArcMap 中完成地图文档的创建之后,需要将其作为地图服务发布到 ArcGIS Server 站点。在此过程中,将在服务编辑器对话框中设置服务的属性。对话框中包含缓存选项卡,可在其中设置地图缓存的属性。
    设置缓存属性时,应选择 ArcGIS Online/Bing 地图/Google 地图切片方案。如下图所示,还有其他许多可以调整的缓存设置。


    可以选择在发布服务时自动构建缓存,也可以选择以后自己构建。不必在切片方案中的所有比例下构建缓存,特别是当在最大比例下将获取数量不可控的切片对地图进行覆盖时。但是,不应从切片方案中删除这些比例。

有关缓存的入门知识,请参阅创建地图缓存 http://blog.sina.com.cn/s/blog_ba3ace5f0101i879.html ArcBruTile  

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
27#
 楼主| 发表于 2014-6-21 19:04 | 只看该作者
本帖最后由 liyihongcug 于 2014-6-21 19:23 编辑

二、 w3c Geolocation API
通过使用w3c Geolocation API,脚本是能够有能力在授权机器上访问相应的位置信息的。这是一个高级API,开发人员不需要考虑过于细节的东西,可以方便的获取地理位置信息,所以无论是通过mac地址、IP、还是GPS,你不用去想他到底是什么方式获取的,只管用就ok了。但有一点你需要注意,由于受到设备或其他因素限制,返回的位置信息并不一定是真正的实际位置,比如在局域网内的PC设备。
三、当前Geolocation API的支持情况
        Firefox 3.5+
        Chrome 5.0+
        Internet Explorer 9.0+
        Safari 5.0+a
        Opera 10.6+
        iPhone 3.1+
        Android 2.0+
        BlackBerry 6+
在这些浏览器上你是可以使用Geolocation API的,但对于不支持Geolocation API的浏览器上你该如何取做呢?
四、如果浏览器不支持Geolocation API,该怎么办?
幸运的是,其他开发人员封装了相应的Geolocation库去提供这种获取位置信息的能力,但这些库和标准的Geolocation API相比是有很大差别的而且对于开发人员来说写一套跨所有浏览器的库是一件极具挑战性的。我们来看一些这样的库文件。
1.Gears
通常大家叫他 google Gears,他是由谷歌提供的工具库,源于一个开源项目,这个开源项目的目的是为浏览器添加高级特性的。
在Gears组件当中,最令人感兴趣的就是Geolocation module,这个模块和w3c Geolocation API是十分相似的,事实上,w3c Geolocation API 原型正是基于Gears。使用方式很简单一行引用
<script type="text/javascript" src="http://code.google.com/apis/gears/gears_init.js"></script>
2.geo-location-javascript
geo-location-javascript,尝试搭建一个能够将所有底层平台差异包装在一起封装成一套简单的API,和w3c的GeolocationAPI十分相似,目前以下这些平台是支持geo-location-javascript框架的

IOS

Android

BlackBerry OS

Gears

Nokia web Runtime

web OS

Mozilla Geode

这个API库包含两个主要的方法:一个是检测你当前使用的设备是否具备定位能力,另一个是定位你的位置。这个API库可以视为是w3c Geolocation API的一个子集,在使用geo-location-javascript之前,你需要做另外一件事。看一下




下面的代码。

<script type="text/javascript" src="http://code.google.com/apis/gears/gears_init.js"></script>

<script type="text/javascript" src="geo.js"></script>

<script type="text/javascript">

        function initialize() {

                if (geo_position_js.init())

                        geo_position_js.getCurrentPosition(show_position, error_handler,{ enableHighAccuracy: true });

                else

                        alert('Geolocation functionality is not available.');

</script>

首先,我们现在应用程序中载入了Gears框架,接着我们再载入geo-location-javascript API。在实际应用程序中,initialize()方法会在onload事件中被调用。

initialize()方法是一个十分重要的前置条件。他所实现的功能就是去检测你的设备是否能个使用定位,如果可以使用定位功能,他就会去尝试定位当前位置。如果设备不支持定位,之后将会给出一个回馈给用户,当然这里的提示是有些生硬的,可以在实际开发中去设计一下。

和其他的地理位置API一样,geo-location-javascript API也包括w3c Geolocation API,在定位之前一定需要用户允许才可以后续处理。

geo_position_js.getCurrentPosition(),这个方法中包含两个回调函数,show_position 和 error_handler.分别对应,成功和失败回调。如果在定位设备位置的时候出现错误,或者用户拒绝定位,取消定位时,error_handler回调将会被触发。否则成功的回调就会被调用。并且设备纬度和经度就可以被程序使用了。


PS:有一点是十分值得注意的,geo-location-javascript API和 w3c Geolocation API 有一点是不一样的,那就是它不像w3c Geolocation API一样支持地理位置的长轮训。如果你需要实现这样的功能,你需要通过setInterval不停地去轮训调用getCurrentPosition()方法。 window.onload = function()  {if (!window.google || !google.gears) {
console.log('Gears is not installed');
}else{
var geolocation = google.gears.factory.create('beta.geolocation');
geolocation.getCurrentPosition(function(p){
    var address = p.gearsAddress.city + ','+ p.gearsAddress.region + ','+ p.gearsAddress.country;
   deo.$('currentLocation').value = address;
   },
   function(){
alert("出错!");
},
{ enableHighAccuracy: true,gearsRequestAddress: true });
}
}

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
28#
 楼主| 发表于 2014-6-21 19:30 | 只看该作者
本帖最后由 liyihongcug 于 2014-6-21 19:52 编辑

Google Gears 是一个开源的浏览器插件,它支持用户浏览器能够使用开发者创建的基于 Gears 的离线应用。

AD:WOT2014:用户标签系统与用户数据化运营培训专场


Google Gears 介绍

Google Gears 是一个开源的浏览器插件,它支持用户浏览器能够使用开发者创建的基于 Gears 的离线应用。它提出了一种离线应用的思想,它的三大核心模块将帮助开发者更好地运用这个思想来开发。Gears 技术是基于客户端语言 JavaScript 技术的扩展。

架构

Gears 的离线思想:参考以下 Gears 的架构图,正常(网络连接正常)的 Web 应用在架构图中走的路线是沿着水平线横着与 Internet 通信。如果网络连接失败,用户依然能够访问,Data Switch 组件则不向 Internet 提交数据(即使提交也会失败),而向本地的客户端提交数据,将数据暂存在客户端本地的轻便型数据库里(Gears 使用的是 sqlite),等待到网络连接恢复时,再选择向 Internet 提交那些暂存的待提交的数据。

图 1. Gears 架构




此时,您将会产生一些疑问:

Gears 用什么语言和 sqlite 交互?
网络恢复后再向服务器提交数据,意味着从 sqlite 里读取数据并删除等 IO 操作,浏览器如何承受如此重的负担?
网络连接失败真的依然能访问网页?
Gears 的三大核心模块将告诉您如何做到这些。

三大核心模块

本地服务器:
此模块用于存储网络资源文件,以便离线情况下访问网页。

本地数据库:
此模块用于存储和访问用户离线情况下提交的数据。

工作者池:
它是一个提高 JavaScript 工作效率和页面性能的模块,使 JavaScript 代码像后台进程一样运行而不影响用户访问网页。


初识 Gears

访问 Google 的 Gears 主题页 下载 Google Gears 的安装文件,安装时确保网络连接正常。

安装完后,就可以使用 Gears 了。对于 Gears 开发,Google 网站 还提供了很多有用的工具和 Sample。

有兴趣的读者可以自行研究一下。在此,我们仅使用 Google 提供的一个本地数据库的操作工具。解压下载好的包,您将发现包内 tools 文件夹里的 dbquery.html 文件。将 tools 文件夹放置 Tomcat 目录下的 webapp 文件夹下,启动 Tomcat 服务器,确保您能够访问 dbquery.html。访问成功,您将看到这样的页面。

图 2. dbquery.html 页面 http://lixinlixin2008.iteye.com/blog/800945
http://wenku.it168.com/d_000785456.shtml
win8  IE11> google chrome> 360(too weak)篇文章提及的方法僅適用於 iPhone 3.0+ 及 Android-based 手機。

在寫 mobile web app 時,如果使用者是用 iPhone 3.0+ 或是 Android-based 手機來瀏覽網站時,其實還是有辦法取得手機的經緯度座標資料。以下先分別講述兩支手機各別的方法,然後再將兩個方法合成同一份 JavaScript 程式碼。
iPhone

iPhone 3.0 之後,iPhone Safari 直接支援 Geolocation API,所以你可以利用下面這段 JavaScript 程式碼來取得該 iPhone 的經緯度座標資料:

Java代码

  • var getPosition = function(pos) {
  •     // pos.coords.latitude 及 pos.coords.longitude 即為座標資料
  • };
  • var errorCallback = function(error) {
  •     // 定位失敗,可能是無法定位或是使用者關閉手機的定位服務
  • };
  • navigator.geolocation.getCurrentPosition(getPosition,
  •     errorCallback, {enableHighAccuracy: true});

var getPosition = function(pos) {    // pos.coords.latitude 及 pos.coords.longitude 即為座標資料};var errorCallback = function(error) {    // 定位失敗,可能是無法定位或是使用者關閉手機的定位服務};navigator.geolocation.getCurrentPosition(getPosition,    errorCallback, {enableHighAccuracy: true});

Android-based

在目前 Android-based 的手機上,瀏覽器還不直接支援 Geolocation API,但是 Android-based 手機的瀏覽器都預先安裝好了 Google Gears,所以也可以透過 Google Gears 所提供的 Geolocation API 來取得座標資料:

Java代码

  • // 先載入 Google Gears JS lib:  
  • // http://code.google.com/apis/gears/gears_init.js
  • ....
  • if (window.google && google.gears) {
  •     try {
  •         var geo = google.gears.factory.create('beta.location');
  •         geo.getCurrentPosition(getPosition,
  •             errorCallback, {enableHighAccuracy: true});
  •     } catch (e) {
  •         // error
  •     }
  • }

// 先載入 Google Gears JS lib: // http://code.google.com/apis/gears/gears_init.js....if (window.google && google.gears) {    try {        var geo = google.gears.factory.create('beta.location');        geo.getCurrentPosition(getPosition,            errorCallback, {enableHighAccuracy: true});    } catch (e) {        // error    }}

呼叫的方式與原生支援的 Geolocation API 一模一樣。
加入 IP-based Geolocation 支援

如果利用原生的 Geolocation API 或是 Google Gears 取得座標資料失敗時,其實還可以再使用 IP 作定位的動作,這時可以利用 Google AJAX API Loader 來作:

// 先載入 http://www.google.com/jsapi 取得 google ajax api loader
Java代码

  • ...
  • if (google.loader.ClientLocation) {
  •     // google.loader.ClientLocation.latitude
  •     // google.loader.ClientLocation.longitude
  • }

...if (google.loader.ClientLocation) {    // google.loader.ClientLocation.latitude    // google.loader.ClientLocation.longitude}
全部放在一起

最後,如果要把這些 code 全部放在一起,那就有可能會是這樣:

// 先載入:
// http://www.google.com/jsapi?key=去申請
// 還有 http://code.google.com/apis/gears/gears_init.js

....
....
Java代码

  • var getPosition = function(pos) {
  •     // pos.coords.latitude 及 pos.coords.longitude 即為座標資料
  • };
  • var errorCallback = function(error) {
  •     fallbackToIPGeoLocation();
  • };
  • var fallbackToIPGeoLocation = function() {
  •     if (google.loader.ClientLocation) {
  •         // google.loader.ClientLocation.latitude
  •         // google.loader.ClientLocation.longitude
  •     } else {
  •         // 投降了,真的無法定位
  •     }
  • };
  • if (navigator.geolocation) {
  •     navigator.geolocation.getCurrentPosition(getPosition,
  •         errorCallback, {enableHighAccuracy: true});
  • } else {
  •     if (window.google && google.gears) {
  •         try {
  •             var geo = google.gears.factory.create('beta.location');
  •             geo.getCurrentPosition(getPosition,
  •                 errorCallback, {enableHighAccuracy: true});
  •         } catch (e) {
  •             fallbackToIPGeoLocation();
  •         }
  •     } else {
  •         fallbackToIPGeoLocation();
  •     }

使用道具 举报

回复
论坛徽章:
0
29#
发表于 2014-6-28 14:41 | 只看该作者
学习,继续学习

使用道具 举报

回复
论坛徽章:
0
30#
发表于 2014-6-30 11:38 | 只看该作者
新手晕了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表