jQuery集成多源地图服务进行线缓冲区分析

jQuery集成多源地图服务进行线缓冲区分析
jQuery集成多源地图服务进行线缓冲区分析

jQuery集成多源地图服务进行线缓冲区分析

董志

1引言

当今,互联网资源丰富,有许多WebGIS开发商在Internet 上提供了地图服务,这些地图服务特点各异、各有千秋。WebGIS的开发者可以利用这些网络地图资源,将它们进行集成,从而实现各种基于Web的GIS应用。本文所实现的方法是基于jQuery框架,利用本地Web Services,集成Google Maps与MapABC地图服务进行线缓冲区分析,查询缓冲区内的POI(Point of Interest,即兴趣点)。本地Web Services负责缓冲区边界的生成,Google Maps地图服务负责地址解析与半径的地理坐标长度比计算,MapABC地图服务负责提供地理信息的可视化表达和缓冲区多边形内的POI查询;而jQuery框架将这些服务串联,并将分析结果用数据列表的形式呈现出来,设计思路如图1所示。

以下分别简单介绍一下jQuery、Google Maps API、MapABC API与缓冲区分析。

jQuery是一个快速、简单的JavaScript library,是轻量级的JS库(比ExtJS轻)。它简化了Web开发的事件处理、动画、Ajax互动,兼容CSS3,还兼容各种浏览器(IE6.0+,FF1.5+, Safari2.0+,Opera9.0+),从而方便了Web应用的开发。jQuery 能够使用较少的代码实现更多的功能。

Google Maps API是Google提供的一组电子地图服务,用户可通过这些服务将地图、地址解析和其他来自Google的内容加入到应用的网页中。

MapABC API也是一组地图功能服务(注册后使用),由北京图盟科技有限公司发布,提供了丰富的地图API和搜索API,其中地图API采用Flash地图展现,为用户封装了JavaScript地图调用接口,能够在HTML中方便地构建Flash地图应用;而搜索API是基于JavaScript的地图数据检索计算接口,所有搜索结果都可以展现在Flash地图上。开发者可以根据自己的技术架构进行选择,创建各种地图应用。

缓冲区分析属于地理信息空间几何关系分析,地理信息空间几何关系分析主要包括邻近度(proximity)分析、叠加分析、网络分析等。缓冲区分析是邻近度分析的一种。缓冲区是

摘要:介绍了利用本地Web Services通过jQuery集成互联网地图服务,实现地理空间线缓冲区分析功能。利用jQuery装载MapABC地图数据,使用户在Web环境的电子地图中进行缓冲区中心线的绘制,调用Google Maps API接口计算缓冲区半径,将参数传入到Web Services生成缓冲区边界坐标,根据生成的边界坐标向MapABC Map服务获取POI数据并装载到jQuery UI的DataGrid组件中去。

关键词:jQuery框架;MapABC API地图数据;Google Maps API接口;地图服务组合;空间分析;线缓冲区分析

图1技术路线图2城市择房的交通噪音分析

为了识别某一地理实体或空间物体对其周围地物的影响度而在其周围建立具有一定宽度的带状区域,可应用到道路、河流、环境污染源、居民点、辐射源等的空间分析,为某种应用目的提供科学依据,另外,结合不同的专业模型,可以在生活、军事、城乡规划等领域发挥重要的作用。例如,要分析因道路拓宽而需拆除的建筑物和需搬迁的居民,需进行线缓冲区分析;如在城市进行择房,进行交通噪音情况的线缓冲区分析(购房的房间离主要交通要道200m之外,可以减少噪音污染,如图2所示)。

为了保证程序中地图数据的现势性,Web程序中使用的是在线地图数据和POI数据,数据获取于MapABC服务;程序也使用到了Google Map API的远程电子地图服务接口;线缓冲区边界坐标串的生成由本地服务器的Web Services完成,程序流程如图3所示。2本地服务器端线缓冲区边界的生成

基于线要素的缓冲区,通常是以线为中心轴线,距中心轴线一定距离的平行条带多边形。对于一个给定的对象A,它的缓冲区可以定义为:P={x|d(x,A)<=r}(d一般是指欧式距离,也可以是其他的距离,其中r为邻域半径或缓冲区建立的条件,如图4所示)。

本程序的线缓冲区边界方法是凸角圆弧法,其顾名思义,即是在转角外侧用圆弧来代替尖角,内侧仍然使用尖角的方法,生成缓冲区主要步骤:(1)直线性判断,判断相邻3点是否在同一直线上;(2)折点凸凹性判断,确定转角的地方哪侧使用直线求交,哪侧使用圆弧连接;(3)凸点圆弧的嵌入,即将转角外侧形成的圆弧和两边的线段相连,内侧则用尖角联接。在实现本算法的关键点是判断特征点的凸凹性,实质是判断矢量的方向问题。文中的线缓冲区边界算法根据文献3进行了改写和部分代码的修正而实现。

2.1矢量数学计算方法

public class MathTool

{

public static double GetQuadrantAngle(double px2, double px1,double py2,double py1)

{

//获取由两个点所形成的向量的象限角度

double x=px2-px1;

double y=py2-py1;

double theta=Math.Atan(y/x);

if(x>0&&y>0)return theta;

if(x>0&&y<0)return Math.PI*2+theta;

if(x<0&&y>0)return theta+Math.PI;

if(x<0&&y<0)return theta+Math.PI;

//注意两点可能在数轴上的情况处理

if(x==0&&y>0)return Math.PI/2;

if(x<0&&y==0)return Math.PI;

if(x==0&&y<0)return Math.PI*3/2;

if(x>0&&y==0)return0;

return theta;

}

public static double GetQuadrantAngle(Coordinate pointA,Coordinate pointB)

{

return MathTool.GetQuadrantAngle(pointB.x,pointA. x,pointB.y,pointA.y);

}

public static double GetIncludedAngel(Coordinate pointA,Coordinate pointB,Coordinate pointC)

{//获取由相邻的三个点所形成的两个向量之间的夹角double x1=pointA.x;

double x2=pointB.x;

double x3=pointC.x;

构造Jquery UI框架

开始

集成调用Google Map和MapABC 接口加载地图

根据用户操作向电子地图添加polyLine对象

响应ADD_OVERLAY 事件,收集多边形点信

根据多边开空间信息调用Google Map 服务接口计算经纬度长度比

根据经纬坐标及转换后经纬度距离调用缓冲区加界生成Webservice

根据缓冲区边界调用MapABC多边形查询服务搜索区域内POI

是否查询到

POI结果

根据查询结果解析

成JSON对象,并创

建Marker对象添加

到地图中

根据JSON对象创建JQuery的dataGrid对象的查询结果列表

结束

图3线缓冲区分析程序的流程图图4线缓冲区的定义

double y1=pointA.y;

double y2=pointB.y;

double y3=pointC.y;

double innerProduct=(x2-x1)*(x3-x2)+(y2-y1)*(y3-y2);

double mode1=Math.Sqrt(Math.Pow((x2-x1), 2.0)+Math.Pow((y2-y1),2.0));

double mode2=Math.Sqrt(Math.Pow((x3-x2), 2.0)+Math.Pow((y3-y2),2.0));

return Math.Acos(innerProduct/(mode1*mode2));

}

}

public class PointBuffer

{

public static string GetBufferEdgeCoords(Coordinate pointA,double radius)

{//根据线上的点及缓冲半径产生点缓冲区

double x0=pointA.x;

double y0=pointA.y;

string sufferResult="";

double xx=pointA.x+radius;

double yy=pointA.y;

int n=12;

double step=Math.PI/12;

for(int i=0;i

{

double xa=x0+radius*Math.Cos(i*step);

double ya=y0+radius*Math.Sin(i*step);

if(sufferResult.Length>0)

{

sufferResult+=","+xa.ToString()+","+ya.ToString();

}

else

{

sufferResult=xa.ToString()+","+ya.ToString();

}

}

return sufferResult;

}

}

}

2.2缓冲区生成主程序

[WebMethod]

public string GetBuffer(string coords,string radius)

{

return PolylineBuffer.GetBufferEdgeCoords(coords,radius);

}

……

public class PolylineBuffer

{

public static string GetBufferEdgeCoords(string strPolyLineCoords,string radius)

{

return GetBufferEdgeCoords(strPolyLineCoords, Convert.ToDouble(radius));

}

///

///根据给定的一系列有顺序的坐标,逆时针生成缓///冲区的边界坐标。

///

///一系列有顺///序的坐标

///缓冲区半径

///缓冲区的边界坐标

public static string GetBufferEdgeCoords(string strPolyLineCoords,double radius)

{

//参数处理

if(strPolyLineCoords.Trim().Length<1)return"";

string[]strCoords=strPolyLineCoords.Split(',');

Listcoords=new List();

for(int i=0;i

{

coords.Add(new Coordinate(strCoords[i],strCoords[i+1]));

i++;

}

//分别生成左侧和右侧的缓冲区边界点坐标串string leftBufferCoords=GetLeftBufferEdgeCoords (coords,radius);

coords.Reverse();

string rightBufferCoords=GetLeftBufferEdgeCoords (coords,radius);

return""+leftBufferCoords+","+ rightBufferCoords+"";

}

……

3客户端jQuery的初始化

jQuery的特点或者说是优点有许多,例如:提供强大的功能函数,使代码简洁;解决跨浏览器问题;友好的UI界面与特效,如渐变弹出,图层移动等动画效果如此等等。在本程序客户端的地图数据交互代码的实现中,会体现这些优点。

要在网页上显示MapABC地图,必须在html网页中为地图留出一个容器。在本程序中,创建一个id为“map_canvas”的div 元素,而这个div元素也是基于jQuery框架的。html如下所示:


空间分析之缓冲区分析

window.onload=function(){

window.moveTo(0,0);

window.resizeTo(screen.availWidth,screen.availHeight);

}

jQuery在html文档就绪时的入口函数如下:

$(function(){

setPageLayout();//设置界面

bindEvent();//捆绑事件

loadMap();//根据Google Map API解析地址装载

//MapABC地图

createResultWindow();//创建jQuery的DataGrid对象})

函数setPageLayout功能为设置界面,程序用到了jQuery

的选择器。在Dom编程中开发者使用有限的函数根据id或者TagName获取Dom对象,而在jQuery中则完全不同,jQuery 提供了异常强大的选择器用来帮助开发者获取页面上的对象,并且将对象以jQuery包装集的形式返回。本程序中常用选择器有3种:元素选择器,如$('#map-layout');jQuery属性选择器,如$("div[region='north']");jQuery CSS选择器,如$("div [region='east']").css("background-color",$("div[region= 'center']").css("background-color")),该函数具体代码如下:function setPageLayout(){

$('#map-layout').layout();//布局

$("div[region='north']:first-child").css("text-align"," center").css("vertical-align","middle");

$("div[region='north']").css("text-align","center").css(" vertical-align","middle");

//去掉文本框的边框

var inputObj=$('#searchTable');

inputObj.css('border-width','0');

//设置文本框中字体的大小

inputObj.css("font-size","16px");

var panelSearch=$("#panelSearch");

$("div[region='north']").css("background-color",$("div [region='center']").css("background-color"));

$("div[region='east']").css("background-color",$("div [region='center']").css("background-color"))

.css("right",$("#searchTable").width());

$("#panelSearch").width($("#searchTable").width())

.css("right",$("#searchTable").width());

$("#btnEp").attr("icon","icon-ok")

$('#map-layout').layout("collapse","east");

}

函数bindEvent功能为设置在电子地图上进行画折线操作:function bindEvent(){

$("#btnEp").click(function(){drawLine();});//设置画折//线操作

}

函数loadMap功能为利用MapABC API将地图服务装载到“map_canvas”,在装载前使用google.maps.Geocoder对地址进行解析,得到坐标后初始化地图,具体代码如下:

function loadMap(){

var geocoder=new google.maps.Geocoder();

geocoder.geocode({'address':"武汉光谷广场"},function (results,status){

if(status==google.maps.GeocoderStatus.OK){

var mapOptions=new MMapOptions();//构建地图辅助类mapOptions.zoom=14;//要加载的地图的缩放级别mapOptions.toolbar=DEFAULT;//设置地图初始化工具条mapOptions.toolbarPos=new MPoint(15,15);

//设置工具条在地图上的显示位置

mapOptions.center=new MLngLat(results[0]. geometry.location.lng(),results[0]https://www.360docs.net/doc/a07153244.html,t());

//要加载的地图的中心点经纬度坐标

mapOptions.overviewMap=HIDE;//设置鹰眼地//图的状态,SHOW:显示,HIDE:隐藏(默认)

mapOptions.scale=SHOW;//设置地图初始化比

//例尺状态,SHOW:显示(默认),HIDE:隐藏。

mapOptions.returnCoordType=COORD_ TYPE_OFFSET;//返回数字坐标

mapOptions.zoomBox=true;

//鼠标滚轮缩放和双击放大时是否有红框动画效果。

mapObj=new MMap("map_canvas", mapOptions);//地图初始化

mapObj.addEventListener(mapObj,ADD_OVERLAY, addOverlayEvent);

}

else{

alert(str+"无法解析地址");

}

});

}

以上函数loadMap使用了google.maps中的Geocoder对象进行了“武汉光谷广场”的地址解析,以便确定电子地图的中心位置。

$(function(){})在远程调用google Map与MapABC的服务装入地图数据的同时,还同时进行了jQuery框架的构建、调整了线缓冲区分析主界面,并捆绑了相应的响应事件,主函数运行后效果如图5所示。

4jQuery AJAX调用地图服务及地图数据的表示

本程序需要用户基于网络电子地图进行缓冲区中心线及缓冲半径的输入,得到参数以调用本地服务生成缓冲区边界坐标串,然后根据边界坐标串调用MapABC的多边形查询接口,将查询到的POI结果装载到jQuery UI的DataGrid控件中。

响应“画线”按钮事件,进行画中心线操作,并得到折线坐标串:

//响应按钮事件

function drawLine(){

mapObj.removeOverlaysByType(MOverlay.TYPE_ POLYGON);

mapObj.removeOverlaysByType(MOverlay.TYPE_MARKER);

radius=$("#txtSufferDistancePanel").val();

mapObj.setCurrentMouseTool(DRAW_LINE);

addOverlayEventParam=null;

isEdit=1;

if($('#drawInfo').length<=0){

$("div[region='north']").append("在地图双击左键结束画线,陏后开始进行缓冲区查询(沿着道路中心线两侧POI较多)。");//动态创建提示信息

}

}

//响应添加polyLine事件

function addOverlayEvent(param){

if(isEdit==0)

return;

if(param==null||param==""){

$.messager.alert('警告对话框','请完成画线!在地图上双击即可结束画线。','warning');

}

if(radius==null||radius==""){

$.messager.confirm('Confirm','缓冲半径为0,是否设置缓冲半径?',function(r){

if(r){

$("#txtSufferDistancePanel").focus();

}

});

}

//获取中心线并进行坐标获取

var overlayPolygon=mapObj.getOverlayById(param.overlayId);

if(overlayPolygon.TYPE=="Polyline"){

mapObj.removeOverlayById(regionId);

regionId=param.overlayId;

var coords="";

for(var i=0;i

if(coords.length<=0){

coords=overlayPolygon.lnglatArr[i].lngX+"," +overlayPolygon.lnglatArr[i].latY;

}

else{

coords+=","+overlayPolygon.lnglatArr[i]. lngX+","+overlayPolygon.lnglatArr[i].latY;

}

}

mapObj.setCurrentMouseTool(MConstants.

PAN_WHEELZOOM);

isEdit=0;

dealLineBuffer(coords,radius);

}

}

接下来整理中心线坐标,利用google Map服务计算经纬度的半径距离,得到这两个参数后使用jQuery Ajax调用本地服务资源,代码如下:

//通过google.maps.geometry接口获取的地图长度坐标比function dealLineBuffer(coords,radius){

图5jQuery的Layout对象加载MapABC地图数据

var points=coords.split(",");

var x1,y1,x2,y2;

for(var i=0;i

if(points[i+1]&&points[i+2]&&points[i+3])

if(Math.abs(points[i+2]-points[i])>

0.000000001&&Math.abs(points[i+3]-points[i+1])> 0.000000001){

x1=points[i];

y1=points[i+1];

x2=points[i+2];

y2=points[i+3];

break;

}

}

if(x1&&y1&&x2&&y2){

var destinationA=new https://www.360docs.net/doc/a07153244.html,tLng(y1,x1);

var destinationB=new https://www.360docs.net/doc/a07153244.html,tLng(y2,x2);

var templateDistance=google.maps. https://www.360docs.net/doc/a07153244.html,puteDistanceBetween(destinationA, destinationB);

var latlngDist=Math.sqrt(Math.pow((points[0]-points[2]),2)+Math.pow((points[1]-points[3]),2));

var k=templateDistance/latlngDist;

radius=radius/k;

getLineBuffer(coords,radius);

}

}

//根据中心线调用本地服务产生缓冲区边界

function getLineBuffer(coords,radius){

var serverUrl="WebService.asmx/";

var url=serverUrl+"GetBuffer";

xmlPara="coords="+coords+"&radius="+radius;

$.ajax({

type:"POST",

url:url,

data:xmlPara,

success:function(result){

mapObj.setCurrentMouseTool(PAN_WHEELZOOM);

docSubmit=new ActiveXObject("Microsoft. XMLDOM");

docSubmit.async=false;

docSubmit.loadXML(result.xml.replace(/</g,"<"). replace(/>/g,">"));

var lineBuffer=docSubmit.documentElement. getElementsByTagName("lineBuffer");

var lineSufferPoints=lineBuffer[0].childNodes[0].text;

var resultlineBuffer=new geoElement();;

https://www.360docs.net/doc/a07153244.html,="缓冲面";

resultlineBuffer.coords=lineSufferPoints;

resultlineBuffer.type=2;

ElementToMap(resultlineBuffer,true,2);

getPOIbyLineBuffer(lineSufferPoints);

bufferCoords=lineSufferPoints;

}

});

}

//将生成的缓冲区多边形添加到地图中

function ElementToMap(geoElement,changeCenter,index) {

mapObj.removeOverlaysByType(MOverlay. TYPE_POLYGON);

var arr=new Array();//由多边形顶点组成的经纬度数组

var points=geoElement.coords.split(",");

for(i=0;i

arr.push(new MLngLat(points[i++],points[i++]));

var linestyle=new MLineStyle();//创建线样式对象

linestyle.thickness=3;//线的粗细度,默认为2

linestyle.color=0x0000ff;//线的颜色,16进制整数,默认//为0x005890(蓝色)

var fillstyle=new MFillStyle();//创建填充样式对象

fillstyle.color=0xf5deb3;//面的填充颜色,16进制整数。

fillstyle.alpha=0.5;//填充面的透明度,范围0~1,0为透//明,1为不透明(默认)

var areastyle=new MAreaStyle();//创建面样式对象

areastyle.borderStyle=linestyle;//面的边框风格。

areastyle.fillStyle=fillstyle;//面的填充风格。

var tipoption=new MTipOptions();//添加信息窗口

tipoption.title="信息窗口标题";//信息窗口标题

tipoption.content="信息窗口内容";//信息窗口内容

var labeloption=new MLabelOptions();//添加标注

labeloption.content="缓冲区多边形";//标注的内容

//设置标注左上角相对于面对象中心的锚点。标注左上角//与面对象中心重合时,像素坐标原点(0,0)

https://www.360docs.net/doc/a07153244.html,belPosition=new MPoint(10,10);

var areaopt=new MAreaOptions();//构建一个名为//areopt的面选项对象。

areaopt.areaStyle=areastyle;//设置面的风格areaopt.tipOption=tipoption;//设置面的信息窗口参数选项areaopt.canShowTip=true;//设置面是否显示信息窗口

areaopt.isEditable=false;//设置面是否为可编辑状态,//true,可编辑;false,不可编辑(默认)

https://www.360docs.net/doc/a07153244.html,belOption=labeloption;//设置面的标注选项参数var polygon=new MPolygon(arr,areaopt);//通过经纬度数//组及参数选项构建多边形对象

mapObj.addOverlay(polygon,true);//向地图添加覆盖物}

程序将得到的缓冲区多边形边界传入MapABC的MPoiSearch

服务接口查询缓冲区内的POI,在获取POI后根据查询结果创

建JSON对象供DataGrid使用,并在地图上显示POI(如图6

所示)。具体代码如下:

//通过远程MapABC服务查询缓冲区边界内的POI

var recordsPerPage=20;//每页显示的POI数量

var pageNum=1;//当前页号

function getPOIbyLineBuffer(coords){

var MSearch=new MPoiSearch();

var opt=new MPoiSearchOptions();

if(pageNum==null)

pageNum=1;

opt.recordsPerPage=recordsPerPage;//每页返回数据//量,默认为10

opt.pageNum=pageNum;//当前页数。

opt.dataType="";//数据类别,该处为分词查询,只需要相//关行业关键字即可

opt.dataSources=DS_BASE_ENPOI;//数据源,基础+企//业地标数据库(默认)

var arr1=coords.split(",");

var arr=new Array();

for(var i=0;i<=arr1.length-2;){

var mll=new MLngLat(arr1[i],arr1[i+1]);

arr.push(mll);

i=i+2;

}

var multiXY=new MLngLats(arr);

MSearch.setCallbackFunction

(searchSearchresult_CallBack);//设置回调函数

MSearch.poiSearchByRegion(MOverlay.TYPE_POLYGON, multiXY,"",opt);//传递参数并查询多边形面内POI

showCue();

}

//回调函数-①根据返回结果生成JSON字符串;②在地图上//创建Marker.

function searchSearchresult_CallBack(data){

var resultStr="";

mapObj.setCurrentMouseTool(PAN_WHEELZOOM);

mapObj.removeOverlaysByType(MOverlay. TYPE_MARKER);

if(data.error_message!=null){

resultStr="查询异常!"+data.error_message;

}else{

switch(data.message){

case'ok':

if(data.searchresult.list){

var datagrid_data_json="{'total':"+data. searchresult.count+",'rows':[";

var rowsData="";

var marker=new Array();

resultCount=data.searchresult.list.length;

for(var i=0;i

markerOption.imageUrl="http://code. https://www.360docs.net/doc/a07153244.html,/images/lan_1.png";

var tipOption=new MTipOptions(); tipOption.title=(i+1)+"."+data.searchresult.list[i].name;

var tipC="
"+TipContents(data. searchresult.list[i].type,data.searchresult.list[i].address,data. searchresult.list[i].tel)

tipOption.content=tipC;//tip内容

tipOption.borderStyle.thickness=2;

tipOption.borderStyle.color=0x005cb5;

tipOption.borderStyle.alpha=1;

https://www.360docs.net/doc/a07153244.html,="Arial";

tipOption.titleFontStyle.size=12;

tipOption.titleFontStyle.color=0xffffff;

tipOption.titleFontStyle.bold=true;

https://www.360docs.net/doc/a07153244.html,="Arial";

tipOption.contentFontStyle.size=13;

tipOption.contentFontStyle.color=0x000000;

tipOption.contentFontStyle.bold=false;

tipOption.fillStyle.color=0xFFFFFF;//填充色

tipOption.fillStyle.alpha=1;

tipOption.titleFillStyle.color=0x005cb5;

tipOption.titleFillStyle.alpha=1;

markerOption.tipOption=tipOption;

markerOption.canShowTip=true;//创建marker对象

var mar=new MMarker(new MLngLat(data. searchresult.list[i].x,data.searchresult.list[i].y),markerOption);

mar.id=(i);

marker.push(mar);if(rowsData.length>0){

rowsData+=",";

}//1.根据返回结果生成JSON字符串

rowsData+="{'itemIndex':'"+(i+1)+" ','name':'"+data.searchresult.list[i].name.replace(/\'/g,"\\\'")+ "','city':'"+data.searchresult.list[i].citycode+"','address':'"+ data.searchresult.list[i].address+"','tel':'"+data. searchresult.list[i].tel+"','type':'"+data.searchresult.list[i]. type+"','x':'"+data.searchresult.list[i].x+"','y':'"+data. searchresult.list[i].y+"'}";

}

mapObj.addOverlays(marker,true);//2.在地图上创建Marker

datagrid_data_json+=rowsData+"]}";

createGrid(eval('('+datagrid_data_json+') '),pageNum,recordsPerPage);//根据字符串生成JSON对象,//并传入createGrid函数创建jQuery的DataGrid对象

}

else{

if(data.searchresult.count>0)

$.messager.alert('远程服务提示','网络忙!请重新尝试','warning');

}

break;

case'error':

resultStr='网络忙!请重新尝试';

break;

default:

resultStr='网络忙!请重新尝试';

}

}

hideCue();

if(resultStr.length>0)

$.messager.alert('远程服务提示',resultStr,

'warning');

}

//进行提示

function showCue(){

if($('#waitInfo').length<=0){

$("body").append("

");

$('#waitInfo').window({

width:180,

shadow:true,

maximizable:false,

minimizable:false,

closed:false,

draggable:false,

resizable:false,

modal:false

});

$('#waitInfo').append("正在缓冲区内进行空间搜索!< img title='正在执行查询,请稍等...'alt='正在执行查询,请稍等...'src='images/loading.gif'style='margin:0auto;display: block'/>");

}

else{

$('#waitInfo').window('open');

$("#tt").css('opacity',0)

.animate({'opacity':'1'},400)

}

}

//关闭提示

function hideCue(){

$('#waitInfo').window('close');

}

最后将查询到POI结果装载到DataGrid,DataGrid装载的是JSON数据,其格式如下:

{'total':43,'rows':[{'itemIndex':'1','name':'武汉大学资源与环境科学院','city':'027','address':'','tel':'','type':'科教文化服务;学校;高等院校','x':'x1','y':'y1'},{'itemIndex':'2','name':'华中师范大学(东北门)','city':'027','address':'珞喻路152号',

'tel':'','type':'科教文化服务;学校;高等院校','x':'x2','y':'y2'}, {'itemIndex':'3',''itemIndex':'2','name':'武汉大学信息学部(北一门)','city':'027','address':'','tel':'','type':'科教文化服务;学校;高等院校','x':'x3','y':'y3'},{'itemIndex':'4','name':'石林东路','city':'027','address':'','tel':'','type':'地名地址信息;交通地名;道路名','x':'x4','y':'y4'},{'itemIndex':'5','name':'中国地质大学机械与电子工程研究所','city':'027','address':'','tel':'',

'type':'科教文化服务;科研机构;科研机构','x':'x5','y':'y5'}]}。

程序中使用DataGrid装载POI数据。DataGrid支持数据的列表展示,支持排序、分页、自定义按钮、远程数据和本地数据装载等等功能,界面友好,功能强大。在createGrid函数中,DataGrid分页由记录总数total、当前页号pageNumber、每页显示记录数据pageSizeCount确定,total由JSON数据包含,具体代码如下:

//根据查询POI结果创建DataGrid对象

function createGrid(datagrid_data_json,pageNumber Count,pageSizeCount){

$('#tt').datagrid({

title:'缓冲区查询结果',

width:$("#panelSearch").parent().parent().width(),

height:$("div[region='east']")[0].parentNode. offsetHeight-$("#searchTable")[0].offsetHeight,

singleSelect:true,

striped:true,

pagination:true,

pageNumber:pageNumberCount,//页号

pageSize:pageSizeCount,//每页POI显示数量

columns:[[

{field:'itemIndex',title:'序号',width:80}, {field:'name',title:'名称',width:80,resizable:true}, {field:'city',title:'城市',width:80,align:'right'},

{field:'address',title:'地址',width:80,align:'right'}, {field:'tel',title:'电话',width:100},

{field:'type',title:'类型',width:60}

]],

onClickRow:function(rowIndex,rowData){//单击//一行POI数据,则在地图上设POI位置为当前中心并显示信//息窗体。

var s=mapObj.setCenter(new MLngLat (rowData.x,rowData.y));

var t=mapObj.openOverlayTip(rowIndex);

},

left:$("div[region='east']")[0].parentNode.offsetLeft-10, top:$("div[region='east']")[0].parentNode.offsetTop +$("#searchTable")[0].offsetHeight+10

});

//设置分页控件

var p=$('#tt').datagrid('getPager');

$(p).pagination({

代码为https://www.360docs.net/doc/a07153244.html, 中的cs 代码如下:

Response.Write(str);

运行结果如图1所示。

5结语

位运算实现DHTMLX 框架中树控件的多选操作,也可以

运用到MFC 、JSP 、https://www.360docs.net/doc/a07153244.html, 、PHP 等其他平台或框架的树形控件的多选操作中,这样,极大地简化了代码量,提高了代码的执行效率,并且也方便了代码的操作。另外,位运算其强大的运算能力不仅仅应用于此,还可以应该于其他地方的多情况组合运算和其他操作。

(收稿日期:2012-04-24)

图1程序运行结果

pageList:[pageSizeCount],//可以设置每页记录条

//数的列表

beforePageText:'第',//页数文本框前显示的汉字afterPageText:'页共{pages}页',

displayMsg:'当前显示{from}-{to}条记录共

{total}条记录',

onBeforeRefresh:function (pageNumber,pageSize){

reFreshBufferPoi(pageNumber,pageSize);},

onSelectPage:function (pageNumber,pageSize){reFreshBufferPoi(pageNumber,pageSize);}});

$("#tt").datagrid('loadData',datagrid_data_json);$('#tt').show();$('#w').show();

$('#w').window('show');

$("#w").slideDown("slow");//动画效果特效

$("#tt").datagrid('loadData',datagrid_data_json)//装载数据

.css('opacity',0)

.animate({'opacity':'1'},400);//透明变化特效}

//响应Refresh 按钮事件,刷新数据

function reFreshBufferPoi(pageNumber,pageSize){$("#tt").empty();

pageselectCallback(pageNumber,pageSize);}

//响应pageselect 按钮事件,刷新数据

function pageselectCallback(pageNumber,pageSize){if (bufferCoords.length >0){recordsPerPage =pageSize;pageNum =pageNumber;

getPOIbyLineBuffer(bufferCoords,pageNum);}

return false;}

5运行效果

图7是jQuery 集成多源地图服务进行线缓冲区分析的实

验结果(POI 结果分页显示)。

6结语

利用jQuery 库、本地Web Services 、MapABC API 、Google

Maps API ,笔者完成了具有地理空间线缓冲区分析功能的WebGIS 程序。

通过程序的运行情况可以看出,集成互联网多种资源和服务作为实现地理信息应用的一个手段是可行的,也是方便的。笔者认为在实际运行中,集成多种地图服务应该能够提高

WebGIS 开发效率,有效地利用Web 资源。目前,这个程序只

是Internet 地图服务上的互相集成,以后可以深入到有关地理信息语义网的数据集成方面,加强对于地理本体方面的功能。

参考文献

[1]董志,邹文明.电子地图的多源数据导入与坐标地址的自

编辑[J].测绘信息与工程,2009,34(4):50-51.

[2]董志.C#集成Google Map API 进行地理空间的定位[J].

电脑编程技巧与维护,2011,(19):47-53.

[3]https://www.360docs.net/doc/a07153244.html,/longshaoye112358/article/details/5355417.

(收稿日期:2012-06-05)

图7线缓冲区分析程序运行效果

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

(上接第55页)

前端经典面试题——Angular、主流框架和服务器相关问题

前端经典面试题——Angular、主流框架和服务器相关问题 1、ng-app 是什么? 答:ng-app 指令用于告诉AngularJS 应用当前这个元素是根元素.所有AngularJS 应用都必须要要一个根元素. HTML 文档中只允许有一个ng-app 指令,如果有多个ng-app 指令,则只有第一个会被使用. 2、说说MVC 和MVVM 分别是什么? 答:MVC 全名是Controller 模型(model)-视图(view)-控制器(controller)的缩写,MVVM 是Model-View-ViewModel 的简写. 3、?g 是什么? 答:-g 是-global 的简称,全局的意思. 4、自定义指令的类型(E,A,C,M)? 答:元素(E)、属性(A)、类(C)、注释(M). 5、$scope 和自定义指令里的scope 有啥区别? 答:$scope 对象在AngularJS 中充当数据模型的作用,也就是一般MVC 框架中Model 得角色.但又不完全与通常意义上的数据模型一样,因为$scope 并不处理和操作数据,它只是建立了视图和HTML 之间的桥梁,让视图和Controller 之间可以友好的通讯. 自定义指令里的scope 表示指令的作用域,它有三个可选值:true、false、对象{} 6、Ionic 中的路由? 答:Ionic 也是基于Angular 的,使用的是ui-router,

ui-router 的核心理念是将子视图集合抽象为一个状态机,导航意味着状态的切换,Ionic 之所以没有使用Angular 官方的ngRoute,是回ngRoute 缺少一些高级的特性,比如视图命名,视图嵌套. 7、filter? 答:过滤器. 8、ng-bind? 答:ng-bind 指令告诉AngularJS 使用给定的变量或表达式的值来替换HTML 元素的内容. 如果给定的变量或表达式修改了,指定替换的HTML 元素也会修改. 9、说一说link? 答:link 中可以拿到scope 和controller,可以与scope 进行数据绑定,与其他指令进行通信. 10、为什么angular 不推荐使用dom 操作? 答:Angular 倡导以测试驱动开发,在的service 或者controller 中出现了DOM 操作,那么也就意味着的测试是无法通过的 使用Angular 的其中一个好处是啥,那就是双向数据绑定,这样就能专注于处理业务逻辑,无需关系一堆堆的DOM 操作.如果在Angular 的代码中还到处充斥着各种DOM 操作,那为什么不直接使用jquery 去开发呢. 11、看过Angular 的源码吗,它是怎么实现双向数据绑定的? 答:angular 对常用的dom 事件,xhr 事件等做了封装,在里面触发进入angular 的digest 流程. 在digest 流程里面,会从rootscope 开始遍历,检查所有的watcher. 12、ui-router 和ng-router 区别?

SCCE-G3-模拟笔试题2

1.在html页面上编写JavaScript代码时,应编写在()标签中间。(选择一项) A. B. C.和 D.和 2.在javascript中,数组的()属性用于返回数组中元素的个数。(选择一项) A.first B.shift C.length D.push 3.分析下面的JavaScript代码,经过运算后a的值为()。(选择一项)var x=12; var y="hi"; var a=x+y; A.12hi B.hi C.12 D.程序报错 4.在html中,运行下面的JavaScript代码,则在弹出的提示框中显示的消息内容为()。(选择一项) A.2 B.2.5 C.32/2 D.16 5.在html中,下列css的属性与html标签中style对象的属性对应错误的是()。(选择两项) A.background-image与backgroundImage B.border-color与color C.font-size与size D.text-align与textAlign 6.当按键盘A时,使用onKeyDown事件打印event.keyCode的结果是()。(选择一项) A.65 B.13 C.97 D.37 7.在html中,要通过无列表符号来实现导航菜单,css属性中()可以实现导航菜单横线排列。(选择一项) A.list-style B.padding C.z-index

穷游APP分析报告

穷游APP分析

1 简介 穷游APP是穷游网在移动互联网时代的产品,穷游网是国互联网主要的游记和旅游攻略等的提供方之一。穷游网从PC互联网时代过渡到移动互联网时代,采用了APP矩阵的方式,继续提供在PC互联网时代的服务。而穷游APP就是这个APP产品矩阵中的核心,为整个APP矩阵提供基础服务——游记攻略、折扣和酒店预订等。 2 功能分析 穷游APP分四大功能板块——推荐、目的地、社区和我的主页,这四大功能板块分别提供了不同的功能入口,四大板块通过在APP顶栏选择切换。 推荐 进入穷游APP,首先展现在用户眼前的就是推荐板块。推荐板块包含里编辑推荐、签到功能、看锦囊功能、购买折扣功能、订酒店功能和旅游定位服务功能。 (1)编辑推荐由滑块、旅游地点推荐、折扣推荐和游记推荐四部分组成。页面顶端的滑块有7个滑,前四个滑块容是官方活动,第五个滑块是旅游锦囊,最后两个滑块是用户精华游记。点击每个滑块图片,都会进入该活动的一个详细介绍WEB页面,而根据活动容的不同,WEB页面里也会提供不同的,到APP相应位置。旅游地点推荐有三个,每个都到官方文章。折扣推荐只显示5个,可通过查看全部进入折扣页面。游记推荐显示无限制,可一直不断载入。 (2)签到功能可每日签到一次,获取1里程,里程数累计显示在页面上。里程数下面是用里程兑换的商品,如果有足够的里程数,直接点击兑换即可,然后等待穷游工作人员联系交付。 (3)看锦囊功能为用户提供了全球所有热门旅游地点的专业完整旅游攻略,这些攻略皆由有经验的旅游作者撰写而成。锦囊提供了下载选择,用户下载后可再出行时无网络的条件下阅读锦囊,寻找旅游攻略。 (4)购买折扣功能提供了一个旅游项目电子商务平台,上面有许多旅游公司销售的不同类型的旅游项目,用户可在上面直接完成订购。 (5)订酒店功能让用户选择入住地区和时间后,会筛选出符合条件的酒店,但当用户点击某个酒店的时候,会跳转到booking,也就是说用户最终完成酒店订购是通过booking 这个平台。而穷游APP就是和booking合作,为booking向穷游APP的用户提供了一个酒

超完整JQUERY面试题及答案

一、Jquery测试题 下面哪种不是jquery的选择器?(单选) A、基本选择器 B、后代选择器 C、类选择器 D、进一步选择器 考点:jquery的选择器(C) 当DOM加载完成后要执行的函数,下面哪个是正确的?(单选) jQuery(expression,[context])B、jQuery(html,[ownerDocument])C、jQuery(callback)D、jQuery(elements) 考点:jquery的核心函数(C) 下面哪一个是用来追加到指定元素的末尾的?(单选) A、insertAfter() B、append() C、appendTo() D、after() 考点:jquery的核心函数(C) 下面哪一个不是jquery对象访问的方法?(单选) A、each(callback) B、size() C、index(subject) D、index() 考点:jquery的核心函数之对象访问(D) jquery访问对象中的size()方法的返回值和jQuery对象的_______属性一样. 考点:jquery的核心函数之对象访问(length) jquery中$(this).get(0)的写法和__________是等价的。 考点:jquery的核心函数之对象访问($(this)[0]) 7.有这样一个表单元素 ,想要找到这个hidden元素,下面哪个是正确的?(单选) A、visible B、hidden C、visible() D、hidden() 考点:jquery的选择器(B) 如果需要匹配包含文本的元素,用下面哪种来实现?(单选) A、text() B、contains() C、input() D、attr(name) 考点:jquery的选择器(B) 现有一个表格,如果想要匹配所有行数为偶数的,用________实现,奇数的用_______实现。 考点:jquery的选择器(even,odd) 如果想要找到一个表格的指定行数的元素,用下面哪个方法可以快速找到指定元素?(单选) A、text() B、get() C、eq() D、contents() 考点:jquery的选择器(C) 在一个表单里,想要找到指定元素的第一个元素用_________实现,那么第二个元素用_________实现。考点:jquery的选择器(first,eq(1))

地图类app竞品分析

高德地图和百度地图竞品分析 一、行业情况 作为互联网时代,地图无例外也从传统型转入互联网模式。目前,整个手机地图还是带有浓重的BAT色彩,百度旗下的百度地图,阿里旗下的高德地图。但是三大地图选择路线还有很大差异,百度地图选择探索o2o,高德地图深耕LBS,腾讯地图就有点低调,从底层数据做起,利用微信、QQ进行切入。在未来,地图行业形成三足鼎立的形式已事实,其他厂商很难与之抗衡。 二、产品分析 通过对比分析可以看出几个方面情况: 1、无论高德地图,还是百度地图使用的人群主要集中在男性方面,女性方面使用率并不太高。此外年龄层也集中20-39岁的中青年人群。

2、百度地图和高德地图使用性能上差异不大,只是在AppStore上百度地图评分低于高德地图,iOS用户相对来说要更青睐于高德地图。此外,高德地图所占空间只是百度地图的五分之三。 3、数据支持上,高德地图利用自采集数据,而百度地图利用地理数据服务商提供的数据。此外在交通路况信息,高德地图也是利用自身采集,部分地区和交通部门合作提供更为权威数据。同样,百度地图利用第三方数据。 三、功能分析

从功能上看,百度地图和高德地图都能提供完善基本导航和定位功能,两家地图也在用户体验度上都下了不少功夫,高德地图推出室内地图,积水地图;百度地图推出骑行导航、热力图、全景图、违章查询具有生活服务特点的功能。但是高德地图的室内地图由于提供地点不多,相比百度地图全景地图,用户认可度稍微低点。此外,百度地图的违章查询更体现百度地图生活服务平台的定位。 四、使用分析 1、导航方面 A、路况信息:使用场景从海口到琼海,全长公里,导航途中俩款地图都有路线提示,服务区提示,所用时间提示。不同的是,百度地图会有当前行驶速度提示,而高德地图没有这方面的功能。但是这里有个百度地图致命缺陷,就是没有提供路况提醒,地图显示路况良好,使用时间也是根据路况良好来计算的。反观高德地图,地图及时提供拥堵情况,显示整个拥堵距离,连行驶时间都根据拥堵状况计算在内。

校招面试心得体会

校招面试心得体会 网上不少面试心得,面试成功或失败经验,还有各厂面试题整理,大家都看得乐此不疲。 我跟大家讲,对于99%人而言,这些校招面试心得看得再多也没用。 很多小单位,只要稍微正常点的,专业对口的,是个人都要,网上这些面试套路你看或不看差别不大;而像BAJT这样的厂子,你就算挤破头也是进不去的,如果你能进去,与所谓面试技巧关系并不大,而是你本身够硬,所谓面试技巧的作用就像是公主头上多插了根羽毛,锦上添花而已。 很多校招应届生,看这些大公司的招聘要求,发现麻鸭,我条条都符合,简直是为我量身定制的。这就好比杨超越的择偶标准是长得顺眼,会做家务。请问,是为你量身定制的吗? 互联网大厂的校招那就好比杨超越找男朋友,薪资高,福利好,比如开发岗位,年薪不可能少于20万,那可是千军万马过独木桥,多少人争,多少人抢,那么多应聘者,可能最终就招1~2个应届生,显然绝大多数人就都是炮灰。 我今年校招内推少说几百封简历,哪些人有可能进阅文,哪些人绝对没戏,看简历的时候就心里有数了。但是,通过简历识人会看走眼,因此,凡事有点希望的,都会给个

笔试面试机会,但,诸位千万不要以为有了面试机会脚已经跨进去一半了,说句不好听的,很多都是走个形式,最后大概率还是那几个过硬的简历中筛选跟阅文精气神比较契合的。 大家要想真正在面试中获得面试官的亲睐,我觉得更关键的要多去外面看看,而非表面的技巧或者抓紧这个把月学些知识应付面试。 大学虽说是个小社会,但不是社会,你身在这个弹丸圈子里,每天三点一线,眼界和认知会大大受限,关键是你自己完全意识不到自己受限,当面试的时候,你说的那些话,你所认为重要的东西,往往不是面试官所关心的,用句流行语讲就是who cares,加s。 拿我妹举例来说,她说她情商很高,适合做管理,因为大学自己开团带人玩游戏玩得挺好。站在她个人角度,逻辑完全走得通,毕竟在学校,管人带人要么协会社团,要么就是这种自己组个游戏团队,在学校这样一个眼界受限的小圈子里,自然就会觉得管理好像就这么回事,我做得挺好。 但是,如果真的在一个比较优秀的团队呆过,看过团队负责人工作日常,就会知道这管理团队很难也很辛苦,不仅负责项目管理与资源统筹,还要时刻关注员工心理,承上启下,压力很大。我想,究竟自己适不适合做管理,我妹会有更准确的认知。这认知一旦准确了,面试时说的话也会变得

MapGIS K9基础系列(二)--透视服务

MapGIS K9基础系列(二)--透视服务使用MapGIS K9 IGServer平台做过WebGIS开发的朋友都非常熟悉,在MapGIS的BS开发中,地图加载是所有功能的基础,在地图的web端显示基础上,我们进行各种系统功能的开发,而作为基础的地图加载,我们离不开两个服务:瓦片服务和矢量服务。本篇就将围绕MapGIS服务展开,全面讲解各个服务,并以此为核心,展开描述在不同环境下之所以会出现各种软件使用异常的原因。 在“MapGIS K9基础系列(一)--安装指南”中,验证安装部分,已经提到过,正确安装“证书+MapGIS K9 SP2企业版+MapGIS IGServer增量包”之后(WebGIS开发需要安装“证书+ MapGIS K9 SP2企业版+MapGIS IGServer增量包”),在系统的服务列表会生成5个以MAPGIS开头的服务,如下图所示: 这5个服务分别对应了软件的不同部分,并提供不同的功能: (1)MAPGIS Licence Service:MapGIS证书服务,是安装证书服务程序后生成的(学习版或者正式版),是5个服务中最基础的服务。该服务提供了使 用软件的权限,相当于秘钥,只有在证书服务正常启动后,其他服务才能正 常工作,软件才能正常使用;启动证书服务后,在系统的任务管理器里会相 应启动一个名为zdLccSvc.exe的进程; (2)MAPGIS DataStorage Service:MapGIS数据存储服务,是安装MapGIS K9 SP2企业版之后生成的,是软件的核心服务。该服务和数据相关,因而

是所有MapGIS功能实现的核心,软件的一切功能一定是在该服务正常启动 后,才能进行。该服务可以在证书之前启动(原则上所有的服务都要在证书 服务之后启动,但数据存储服务既可以在证书服务之前也可以证书服务之后 启动),启动它之后,MapGIS K9 SP2企业版的所有功能就都可以使用了(主 要是指MapGIS K9 SP2企业版软件的各种操作);启动数据存储服务后,在 系统的任务列表里会相应的启动一个名为DS_Service.exe的进程。 (3)剩下的3个服务都是安装MapGIS IGServer增量包之后产生的,是针对WebGIS开发而用,其中MapGIS IGServer TileData Service和MapGIS IGServer VectorData Service处于相等的地位,在IGServer服务管理器中 统一进行管理;MapGIS IGServer GIS Center则是针对企业级用户而设, 具体说明如下: ①MapGIS IGServer TileData Service:瓦片服务,介于客户端与 MapGIS K9基础平台(本文中MapGIS K9基础平台就是指的MapGIS K9 SP2企业版,后面不再说明)之间,客户端浏览器通过封装的http请求方 式向IGServer服务管理器发送请求,根据请求的服务类型获取相应的GIS 数据,在客户端予以显示; 启动瓦片服务后,会在系统的任务管理器里启动3个名为tileService.exe的进程(默认,真实的进程个数可以根据机器的环境进行修 改),如果是默认设置,而点击启动后,没有3个进程同时启动,会看到服 务启动状态处于假死状态,系统列表里显示“启动”而不是“已启动”,客 户端也因无法获取数据而不出图。 ②MapGIS IGServer VectorData Service:矢量服务,和瓦片服务一

社区类APP竞品分析V1.1

社区类APP应用竞品分析 V1.1 制作人:XX 2015年7月1日

一、概览 目前,国内的物业类社区O2O主要分为两种形式:一种是由房地产商旗下的物业企业自己来做(垂直类);另一类是创业企业通过统一的标准规范,制作软件为小区物业提供一系列的服务。 综合app store下载排名前几位的社区类产品,以及对各大网站社区类APP应用的分析,选择了“叮咚小区”、“小区无忧”、“云上城”、“小区管家”、“住这儿”以及在京沪市场上强势出击的“实惠”,这几款突出的社区类APP带动了物业O2O市场,物业社区电商市场也由蓝转红。之所以选择这几款APP,是因为他们有各自的卖点以及切入点。经过实际测试以及相关网站了解资料后,对这几个应用又有进一步的认知。 测试设备 设备型号:IPAD mini2 设备系统:iOS8.1.2 二、需求分析

经过实际测试以及相关调研报告显示,社区类APP大致可分为5个维度需求: 2.1商超配送类 提供周边商铺、超市的在线订购服务,并利用线下店铺的人力资源或专业配送人员,为电商购物解决“最后1公里”的配送问题。 2.2代收代寄类 线下开店或利用合作店铺资源,为用户提供货件代收、代寄服务,并以此聚集人气衍生出其他服务。 2.3社区服务类 配合物业公司提升服务品质,或是提供社区便民服务。如:水、电、煤、物业缴费,以及相关故障报修、维护等 2.4社区综合类 社区内部的综合在线论坛,为用户提供在线沟通、经验分享、交友、二手交易等服务,并提供便民信息查询、商户查询等服务。 2.5家政服务类 整合线下家政、洗衣、做饭资源,提供线上信息查询、预约、支付、投诉等服务。 三、产品结构

4大地图APP产品分析

4大地图APP产品分析 橙子 jeffersoncheng@https://www.360docs.net/doc/a07153244.html, 2015.10.6

目录 前言 (3) 1.安装过程体验 (3) 1.1安装包大小 (3) 1.2wifi环境自动下载离线地图 (3) 2.功能与产品定位 (4) 2.1总体功能对比 (4) 2.2用户分析 (5) 3.搜索 (6) 3.1文字搜索 (6) 3.1.1功能对比 (6) 3.1.2交互界面对比 (7) 3.2分类搜索 (16) 3.2.1类目对比 (16) 3.2.2交互界面对比 (18) 3.3语音搜索 (20) 4. 附近&路线&导航 (21) 4.1附近 (21) 4.2路线 (24) 4.3导航 (26) 5. 其它功能 (27) 5.1街景 (27) 5.2世界地图 (27) 5.3开车相关 (28) 5.4我的足迹 (28) 5.5实时位置共享 (29) 5.6工具箱 (29) 6.SWOT分析及总结 (30)

4大地图APP产品分析 前言 本次挑选了目前国内地图领域的高德地图、百度地图、腾讯地图、搜狗地图作为分析对象。由于地图APP的功能众多,全面的分析将很庞大,本报告只做了一部分分析。 下面为了简便起见,各产品都省去了“地图”字样,仅用厂商名字代替。测试的产品 这个因素。相比来说,高德的安装包大小,iOS版和Android版都排在第2小的位置,这点比较有优势。 1.2wifi环境自动下载离线地图 在wifi环境下,iOS版,安装时高德和百度,都会自动下载离线地图,包括全国缩略图和本市地图。腾讯、搜狗则没有。Android版,则是百度和搜狗自动下载离线地图,而高德、腾讯没有。 有Wifi自动下载离线地图,给在户外使用带来便利,节省流量。这一点来说,高德和百度,做的更好。 为了用户知情考虑,可以在自动下载时,弹出对话框,让用户可以选择取消下载。

jquery面试题

1. jQuery 库中的 $() 是什么? $() 函数是 jQuery() 函数的别称,乍一看这很怪异,还使 jQuery 代码晦涩难懂。一旦你适应了,你会爱上它的简洁。$() 函数用于将任何对象包裹成 jQuery 对象,接着你就被允许调用定义在 jQuery 对象上的多个不同方法。你甚至可以将一个选择器字符串传入 $() 函数,它会返回一个包含所有匹配的 DOM 元素数组的 jQuery 对象。这个问题我已经见过好几次被提及,尽管它非常基础,它经常被用来区分一个开发人员是否了解 jQuery。 2. 网页上有 5 个

元素,如何使用 jQuery来选择它们? 另一个重要的 jQuery 问题是基于选择器的。jQuery 支持不同类型的选择器,例如 ID 选择器、class 选择器、标签选择器。鉴于这个问题没提到 ID 和class,你可以用标签选择器来选择所有的 div 元素。jQuery 代码:$("div"),这样会返回一个包含所有 5 个 div 标签的 jQuery 对象。 3. jQuery 里的 ID 选择器和 class 选择器有何不同? 如果你用过 CSS,你也许就知道 ID 选择器和 class 选择器之间的差异,jQuery 也同样如此。ID 选择器使用 ID 来选择元素,比如 #element1,而 class 选择器使用 CSS class 来选择元素。当你只需要选择一个元素时,使用 ID 选择器,而如果你想要选择一组具有相同 CSS class 的元素,就要用 class 选择器。在面试过程中,你有很大几率会被要求使用 ID 选择器和 class 选择器来写代码。下面的 jQuery 代码使用了 ID 选择器和 class 选择器: 正如你所见,从语法角度来说,ID 选择器和 class 选择器的另一个不同之处是,前者用字符”#”而后者用字符”.”。 4.如何在点击一个按钮时使用 jQuery 隐藏一个图片? 这是一个事件处理问题。jQuery为按钮点击之类的事件提供了很好的支持。你可以通过以下代码去隐藏一个通过ID或class定位到的图片。你需要知道如何为按钮设置事件并执行hide() 方法,代码如下所示:

地图教学“五步曲”

地图教学“五步曲” 发表时间:2012-09-12T10:16:01.903Z 来源:《新校园》学习版2012年第5期供稿作者:王汝花 [导读] 地图是地理信息的一种载体,是地理教学的“第二语言”。 王汝花(无棣县第二高级中学,山东滨州251900) 地图是地理信息的一种载体,是地理教学的“第二语言”。地图的教学是地理学科教学的重要内容,学会读图、识图、用图是学生应掌握的一种基本技能,它对培养学生抽象思维、提高学习成绩和将来参加社会实践,都起着极为重要的作用。如目前考察地理知识时,读图思考题一般占总分的60%以上。要掌握好这一学习工具,对于学生来说,并不是一件容易事。在教学中结合教材实际,笔者尝试了地图教学的如下教法,取得了较为明显的效果。即“读图———析图———绘图———填图———用图”,这五个层次是由简单到复杂,由认识到实践的一个逐步升华的过程,也是一个由知识转化成为能力的过程。 一、读图 这是学生学习地图的最基本的要求,是学好地图的基础,它要求学生能准确、迅速地读出一幅地图所表达的不同的地理事物。在这一环节中,要重点训练以下三方面的内容: (一)熟记图例、注记。图例和注记是地图的“血肉”。对于常用图例,教学时,指导学生画出其形状,反复记忆,达到熟练认识的程度。如城市用“○”表示、公路用“=”表示。做题时,指导学生善于用图例,尤其是作为隐藏条件。如图中仅有一条等高线和一穿过等高线的河流,如何判断河流流向,很明显要看这条等高线的弯曲方向,即流向与凸向相反。 (二)识别地图方向。方向的指示是地图的要素之一,地图的方向有多种表达方式。1.常规方向。即面对地图“上北下南、左西右东”,这是一般地图表达方向的方式,较容易记忆。2.带有指向标的地图。有些地理事物的方向不规则,所以用指向标来指示方向,指向标的箭头指向北方。3.经纬线指示的方向。经线指示南北方向,纬线指示东西方向。在教学过程中要指导学生正确辨认地图的方向,以便准确地认识地理事物的位置、分布等。 (三)明确地图比例。比例尺的大小,在图幅相同的情况下,决定着描述范围的大小和描述程度的详略。教学这一问题,重点利用数学公式讲清它们之间的关系。例如,图幅相同时,比例尺越小,描述范围越大,描述内容越简略。反之,比例尺越大,描述范围越小,描述内容越详细。学生弄清了比例尺的概念,计算公式,学会了应用方法,就会为读懂地图打下基础。 总之,通过上述训练,学生能较熟练读懂一幅地图,并能迅速地指出图中任意地理事物的方向和位置等。 二、析图 析图是根据教学目标在能熟练读图的基础上,感知所需要的信息,从而对图进行综合分析说明,以弄清图中地理事物之间关系的一种技能。析图在开始时,教师必须给学生以方法指导,帮助学生看图找规律。如讲述“北印度洋季风环流的成因”时,可先让学生观察“洋流的流向及南亚地区冬夏季风的风向”图,进一步引导分析图中地理事物的关系,得出正确的结论。 三、绘图 绘图是在读图、析图的基础上,为进一步记住图中各地理事物的位置、方向、界线、形状等而动手操作记忆的过程,是地图教学的关键环节。训练时,根据图的不同情况,可分类进行。 (一)临摹。对于较简单的图,通过读图、析图后,可直接照原样绘出。例如,《气压带风带示意图》,学生在绘图的同时达到了记忆的目的。 (二)复印。对于较为复杂的图,如《世界政区图》《中国地形图》等地图,地理事物多,靠观察分析后照原样绘出,难度较大,这时可叫学生采取直接用复写纸复印出图的大致轮廓,再参照原图注明图例和注记,达到记忆地图的目的。 (三)绘图。根据已有的材料和数据,通过绘图制作画出图示,达到直观记忆的目的。它可分为绘画和制作两类。绘图是根据已有的数据或材料绘制成图。例如,提供了某地一月中气温的日平均数据,就可绘画出该地一月的气温变化曲线图。制作多运用于带有运动过程的地图。例如,锋面的形成过程,可指导学生根据图示制作活动挂图,变抽象记忆为直观记忆。 总之,绘图是学生学习地理应具备的一种能力,只有长期地不间断地强化训练,才能掌握绘图技巧,熟练准确地绘图。 四、填图 所谓填图,即根据已有的地图轮廓,把该区的地理事物用图例或注记准确地填入图中相应位置,它是把知识转化成技能的一种体现,也是地图教学的目的之一。这一环节运用于初中地理部分复习。 五、用图 纵观近些年的高考文综地理试题,经常以地图为切入点,再设置相关问题,考查学生的地理知识,包括区域图、农业地域类型图、天气形势图、等高线地形图、土地利用类型柱状图、生态农业模式图、森林火灾统计表等。这就要求我们学会阅读和使用地图,做到图文结合。首先是审题,看清图的标题(或名称),确定知识范围;其次看图例和注记,发现并提取图中的图像信息,寻找标志性数据或知识点;最后看相互联系,全面综合分析,组织有效答案。 通过以上五个层次的训练,学生能较好地学会读图知识,掌握读图技能,使学生对地图产生兴趣,由原来的“冷接受”转变为现在的“热心学”,通过读图、析图、绘图、填图、用图等训练,做到“心中有图”,为进一步提高学习成绩,将来走向社会打下良好的基础。

旅游app调查报告

旅游app市场需求调查 您好!我是xxxxx公司,正在进行用户对智能手机旅游应用程序(旅游App)的需求调查。本调查所得数据仅用作需求分析,并采取无记名填写,请您放心作答。真诚感谢您的合作与支持。 一、概况了解 1、出行前你使用旅游app的目的是(可多选) A、设计出行路线 B、订购酒店 C、决定交通工具/方式 D、了解当地信息 E、与有经验的驴友沟通 F、其他:______ 2、在旅途中你使用旅游app的主要用途是 A、了解旅游路线相关信息 B、及时预定住宿 C、及时订购交通工具/方式 D、发布心情 E、及时与周围人沟通 F、其他________ 二、具体需求调查 1、如果某旅游app提供一个社交平台,下列功能对你的吸引力程度: 很大较大一般较小很小 ①app地图上寻找旅游沿途商家并直接与之联系进行住宿餐馆 的预定 ②网络在线即可实现对当地商品的购买,送货上门 ③旅行途中遇到的问题可以在app上及时提问、及时获得答案 ④旅行前在网上发起组队;也可主动寻找心仪的队伍求同行 ⑤地图在线显示同行驴友,可与单人沟通,也可多人组群聊 ⑥手机摇一摇,搜索附近的人 ⑦发布旅游心情及美图,旅行结束后自动生成游记,并可编辑 修改调整。 2、你认为旅游app在旅行路线的设计和实施上,下列功能的重要程度: 非常重要重要一般不重要非常不重要 ①输入出发地、目的地,直接以地图形式显示出所有可选择的 旅游线路,并显示各个线路信息、难度系数等。 ②在显示地图上可直观的看到整条线路上的吃、住、行、游、 购、娱等各方面信息及用户点评 ③语音提示附近的加油站,汽车维修站等;

④语音提示所在地的路况及交通情况 ⑤线路地图实现在线下载,可离线查看 ⑥地图直观显示租车地点及前去路径 ⑦提供线路上航班、火车、汽车时刻表,及乘坐方案和地址 3、您认为旅游服务类App各项功能的重要性如何呢? 非常重要重要一般不重要非常不重要 ①旅游目的地介绍 ②旅游线路推荐 ③门票查询预订 ④旅游攻略查询 ⑤智能导游服务 ⑥旅游经历分享 4、你喜欢在旅行途中与朋友们玩游戏吗? A、喜欢(跳转5) B、偶尔(跳转5) C、不喜欢 5、在旅行途中比较偏向于哪类游戏 A、智商类(谁是卧底) B、运气类(猜拳付款) C、棋牌类(斗地主) D、其他:________ 6、你在旅途有什么觉得不方便的事情: _____________________________________________________________________________________________ _____________________________________________________________________________________________ _____________________________________________________________________________________________

Jquery面试题(修改版)-个人总结

单选: 1、下面哪一种不属于Jquery的选择器。(D) A:基本选择器B:层次选择器 C:表单选择器D:节点选择器 2、使用jquery检查元素在网页上是否存在。(B) A:if($("#id")) { //do someing... } B: if($("#id").length > 0) { //do someing... } C: if($("#id").length() > 0) { //do someing... } D: if($("#id").size > 0) { //do someing... } 3、新闻,获取元素title的属性值。(C) A:$("a").attr("title").val(); B:$("#a").attr("title"); C:$("a").attr("title"); D:$("a").attr("title").value; 4、执行下面语句 $(document).ready(function(){ $("#click").click(function(){ alert("click one time"); }); $("#click").click(function(){ alert("click two time"); });

}); 单击按钮,这个会有什么效果。(C) A:弹出一次对话框,显示click one time 。 B:弹出一次对话框,显示click two time 。 C:弹出两次对话框,依次显示click one time,click two time。D:js编译错误。 5、页面中有三个元素,如下:

div标签
span标签p标签 ,如果这三个标签要触发同一个事件,那么正确的写法是(A)。 A:$("div,span,p").click(function(){ //…}); B:$("div || span || p").click(function(){ //…}); C:$("div + span + p").click(function(){ //…}); D:$("div ~ span ~ p").click(function(){ //…}); 6、页面中有一个select标签,代码如下: ,要使“选项四”选中的正确写法。(B)

关于高德地图的分析报告

关于高德地图的分析报告 姓名:曹谦 学号:35 专业:网络与新媒体

目录 引言......................................... 错误!未定义书签。一项目背景..................................... 错误!未定义书签。二运营模式..................................... 错误!未定义书签。三应用分析..................................... 错误!未定义书签。 1 目标群体................................... 错误!未定义书签。 2 市场占有率................................. 错误!未定义书签。 3 与同类应用比较............................. 错误!未定义书签。 产品分析 ................................ 错误!未定义书签。 功能分析 ................................ 错误!未定义书签。 使用分析 ................................ 错误!未定义书签。 推广方式 ................................ 错误!未定义书签。四盈利模式..................................... 错误!未定义书签。 1 对于与地图相关商家的增值服务............... 错误!未定义书签。 2 手机预装软件和与运营商合作客户端下载软件... 错误!未定义书签。 3 流量变现................................... 错误!未定义书签。 4 互联网位置服务............................. 错误!未定义书签。五发展前景..................................... 错误!未定义书签。

前端测试题

Web前端开发面试题 一、描述题(每题2分共20题) 1、简要的描述一下W3C组织的工作职责 答:W3C(万维网联盟)为解决Web应用中不同平台、技术和开发者带来的不兼容性,保障Web信息的顺利和完整流通,网页开发从此在结构、表现、行为上相分离。 2、目前常用的WEB标准静态语言是: 答:XHTML 3、内联元素有哪些?块级元素有哪些?CSS的盒模型有哪些属性? 答:内联元素有a, span, img, input, select, strong等。块级元素有div, ul, ol, li, dl,dt,dd, h1,h2…,p。盒模型:margin, padding,width,height,border。 4、改变元素的外边距和内填充用什么? 答:margin padding 5、对ul li的样式设成无,应该是用什么属性? 答:list-style-type:none; 6、color:#666666;可缩写为什么? 答:color:#666; 7、合理的页面布局中常听说结构与表现分离,那么结构和表现分别指什么? 答:结构为xhtml,表现为css 8、举例你在实践中遇到的IE6 bug,并谈谈解决方案 答:如浮动产生双倍边距,用display:inline解决 9、谈谈不同浏览器的css hack做法 答:所有浏览器通用:height:10px; IE6专用:_height:10px;IE6,IE7公用:*height:10px;IE7专用:*+height:10px;IE7,IE8,FF公用:height:10px !important; 10、CSS中哪些属性可以同父元素继承? 答:color, font-size 11、你如何理解HTML结构的语意化? 答:html本身是没有表现的,我们看到例如h1是粗体,字体大小2em,加粗;strong是加粗的,不要认为这是html,这些其实是html默认的css样式在起作用,所以去掉或样式丢失的时候能让页面呈现清晰的结构不是语义化的HTML特点,但是浏览器都有默认的样式,默认的样式目的也是为了更好的表达html的语义,可以说浏览器的默认样式和HTML结构是不可分割的 12、谈谈对css模块化设计的看法? 答:css模块化开发是css开发者们都会使用到的方法,它具有结构良好,扩展性强,重用性好等特点,同时有利于团队之间的合作。 13、谈谈对css sprite技术的看法 答:css sprite是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张图片中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一张一张的慢慢显示出来了,对于当前网络流行的速度不高于200KB的单张图片的所需载入时间基本是差不多的,所以无需顾忌这个问题,加速的关键,不是降低重量,而是减少个数,传统的切图讲究精细,图片规格越小越好,重量越小越好,其实规格大小计算机统一都按byte计算,客户端每显示一张图片都会向服务器发送请求,所以,图片越多请求次数越多,

(APP)打车app竞品分析

打车神器 1.市场趋势 欧美打车app获得多轮融资。 国内打车app纷纷上线,竞争处于白热化。 由于打车app触动利益集团的奶酪,收到限制和排挤。多地禁止打车app,北京限制只能加价5元。有消息透露官方要对打车app进行整编和“诏安” 2.主要竞争对手 嘀嘀打车,快的打车,大黄蜂,摇摇招车 3.目标用户 乘客需求: 根据北京市交通委数据,北京现有出租车6.66万辆,2012年末2000万人。平均300人争夺1辆车。国社会科学院《公共服务蓝皮书》北京打车容易度38城市中倒数第11,超四成人打车要等10-30分钟 出租车司机: 平均12小时,最高15小时。北京出租车司机一天的纯收入不到200元。北京每辆出租车每天大约运行400公里,但空驶率达到30%至40%。 4.核心功能 叫车,预约

5.产品优缺点 5.1.叫车界面 5.1.1.嘀嘀打车 语音为主,手动输入为辅。对与乘客来说,打字输入已经成为落伍,语音输入已经为人们展开了美丽的画卷。但实际情况却泼了盆冷水,在嘈杂环境中语音叫车很难有清楚的录音,尤其是当你在马路边。对于司机来说也有同样的问题,一般的哥的车多为性价比极高的车型,自然密闭性比较差,在路途中行驶更在噪音的包围中。

回家和上班本应是最常用的功能由于只有在按住预约叫车键时才显示,平时很难被用户发现。而且手指松开叫车键这两个按钮也立刻消失。利用率应该很低。 5.1.2.快的打车 自动输入为主,语音为辅 能够自动输入当前位置,减少了用户的输入 快的打车的解决方案较为理想

家、公司作为最常用的位置显示在主界面上更方便用户使用。 5.2.预约用车 5.2.1.嘀嘀打车 预约用车与直接打车在主界面就已经分开,目的性较为清晰。出发时间的步长为15分钟,略微有点长,不够精确。

基础地形图数据库规范(1:500 1:1000 1:2000)

基础地形图数据库规范(1:500、1:1000、1:2000)

1综述 1.1 目的 为建设大比例尺基础地形图空间数据库制定数据库建设规范,并通过该规范指导数据库建设。 1.2 适用范围 本方案适用于1:500、1:1000、1:2000大比例尺基础地形数据。 本规程规定了大比例尺基础地形图数据的分层,每层的名称与该层内数据的实体类型;各层的属性结构,包括各层的属性表结构、属性项的中英文名称及属性类型宽度;基础地形图数据分类与编码,用以标识该比例尺范围地形图要素数字信息,保证其存储交换的一致性。 本规程适用于大比例尺基础地形图的数据建库与更新。各部门可根据本专业、行业的需要和地区特点,在对此规程定义的数据结构上进行扩展和补充。 本规程适用于大比例尺基础数字地形图为基础的各种空间信息系统中地形图要素信息的采集,存储,检索,分析,输出及交换。各部门在进行各种形式的数字化测图时,可根据不同的专业需要,依据本规程所规定的分类体系和编码方法进行增补和扩延,或采用便于向本规程转换的分类编码。 1.3 制定原则 ?保证按本方案生产的数据与国标2007年的地形图示保持一致; ?保证按本方案生产的数据在转入数据库后可以实现标准图的输出;1.4 引用标准 下列标准包含的条文,通过本标准中引用而构成本规程的条文。本规范制订时,所示标准均为有效。所有标准都会被修订,使用本规范的各方应探讨使用下列标准最新版本的可能性:

1)《基础地理信息要素分类与代码》(GB/T 13923-2006); 2)《国家基本比例尺地图图式第1部分:1:500 1:1000 1:2000 地形 图图式》(GB/T 20257-2007); 3)《基础地理信息要素数据字典第1部分:1:500 1:1000 1:2000 基 础地理信息要素数据字典》(GB/T 20258.1-2007); 4)《基础地理信息标准数据基本规定》(GB 21139-2007); 5)《城市基础地理信息系统技术规范》(CJJ 100-2004,J 298-2004)。1.5 缺省属性项 本标准中的对于各数据的数据结构设计仅定义每层数据的扩展属性项,未包括系统缺省属性项,此处的系统缺省属性项指的是数据导入SDE数据库中时自动生成的属性字段以及由入库系统对入库数据自动生成记录数据创建的时间属性项。这些属性项均不需由数据制作人员进行人工创建,而是由系统自动生成。SDE数据库自带的缺省属性字段包括: 由入库系统记录的属性字段包括: