`

构建自己的LBS

 
阅读更多

原文地址:http://twaver.servasoft.com/?p=2908

 

随着网络和手持终端的迅猛发展,地理数据相关的应用已经渗入到了各个应用领域,常见的位置服务例如搜索最近的银行,身边的餐馆,甚至最近的微博好友等等,这些基于位置信息的应用已经是遍地开花,这些应用都是以海量的服务数据为基础的,同时目前在国内被一些所谓的”巨头”把持,并且还不提供友好的免费接口,这就造成了一些技术爱好者无法达成低成本应用该技术的愿望;与此同时,一些企业级的应用需求,例如搜索500米内的基站,10公里内出现故障的终端设备等等,往往也因为购置高昂的相关专业应用软件和数据,而导致项目成本居高不小.今天我们针对这些情况,结合TWaverGIS在实际中的一些应用为大家介绍一种构建自定制LBS(location-based service)的技巧.
TWaverGIS可以非常容易的辅助用户将自己的业务数据和地理数据实现快速混搭,地理特征的数据往往来源于我们项目中购置的地图数据,而需要提供出位置服务的数据,例如终端设备的位置,基站位置,餐馆位置等等这些业务数据则属于特殊需求的图层数据,由于两种数据的性质不同,前者是不太容易省却购买成本的,但是后者由于目前GPS终端的普及而可以很容易的就获取到其位置信息,然后有用户自行购建相关的业务数据层,填充进空间数据库,免除采购成本.这部分可以自定制的数据可以通过高昂的商业软件进行构建和发布,也可以借助TWaverGIS创建维护自己的shp格式数据,生成完全低成本的空间数据,然后借助于GeoServer这个免费的应用服务提供数据发布的服务,通过TWaverGIS实现自己位置搜索、查询和展示,构建自己定制的LBS。
具体的步骤可以参考如下:
第一步:创建自己的空间数据。TWaverGIS对于开源的geotools进行了简单封装,帮助用户创建自定义的shp格式数据,用来构建自定义的数据层。

然后将这个数据发布在GeoServer中。
第二步:通过TWaverGIS搭建一个可视化的空间数据生成器,向该数据层注入准确的空间数据。参考代码如下:

 

public class TowerCreator {
	public static String WFS_SERVER_PSTH = "http://localhost:8000/geoserver/wfs?";
	public static String SERVA_NAMESPACE = "serva=\"http://www.servasoftware.com/gis\"";	

	public static void main(String[] args){
		JFrame frame = new JFrame();
		final TNetwork network = new TNetwork();
		GisNetworkAdapter adapter = new GisNetworkAdapter(network);
		adapter.installAdapter();
		JButton s = new JButton("Insert Tower");

		final GeographyMap map = adapter.getMap();
		map.addLayer("Google", TWaverGisConst.EXECUTOR_TYPE_GOOGLETERRAINMAP);
		map.setCenterPoint(new GeoCoordinate(121.5,31.233));
		map.setZoom(14);
		StatusBar bar = new StatusBar(map, network.getCanvas());
		final List points = new Vector();
		final Vector features = new Vector();
		s.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				features.clear();
				Calendar time = Calendar.getInstance();
				String[] an = {"NAME","ADDRESS","BID"};
				int length = points.size();
				int hour = time.get(Calendar.HOUR_OF_DAY);
				int min = time.get(Calendar.MINUTE);
				for(int i=0;i<length ;i++){
					String t = hour+"-"+min;
					String[] vn = {"Custom 你好_"+t+"_i","Shanghai 中文 _"+t+"_"+i,"BID "+i};
					Vector ps = new Vector();
					ps.add(points.get(i));
					GeographyFeature feature = GisToolkits.createFeture(ps, Geom.GEOM_MULTIPOINT,
							an, vn);
					features.add(feature);
				}
				String operation = WFSUtils.buildInsertAction(WFS_SERVER_PSTH, SERVA_NAMESPACE,
						"serva:TShpFile", features);
				String rc;
				try {
					rc = WFSRequest.httpPost(WFS_SERVER_PSTH, operation, "xml");
					System.out.println("Result is :\n"+rc);
					network.getDataBox().clear();
					points.clear();
				} catch (Exception e1) {

				}

			}
		});
		network.getCanvas().addMouseListener(new MouseAdapter() {
			 public void mouseClicked(MouseEvent e) {
				 if(SwingUtilities.isLeftMouseButton(e)){
					 GeoCoordinate geo = GisToolkits.convertScreenToLatLong(map, e.getPoint());
					 points.add(geo);
					 Rack rack = new Rack();
					 rack.setWidthSize(5);
					 rack.setHeightSize(5);
					 rack.putBodyColor(Color.RED);
					 rack.putClientProperty(TWaverGisConst.GEOCOORDINATE, geo);
					 network.getDataBox().addElement(rack);
					 System.out.println(geo.getLongitude()+","+geo.getLatitude());
				 }else{
					 System.out.println("Clear");
					 network.getDataBox().clear();
					 points.clear();
				 }
			 }
		});
		network.getToolbar().add(s);
		frame.getContentPane().add(network,BorderLayout.CENTER);
		frame.getContentPane().add(bar,BorderLayout.SOUTH);
		frame.setSize(800,600);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		frame.setLocationRelativeTo(null);
	}
}
 

在实际应用中,往往是在项目施工的时候,使用GPS终端到现场采集大量数据回来,然后再参考代码

String[] an = {"NAME","ADDRESS","BID"};
int length = points.size();
int hour = time.get(Calendar.HOUR_OF_DAY);
int min = time.get(Calendar.MINUTE);
for(int i=0;i<length ;i++){
	String t = hour+"-"+min;
	String[] vn = {"Custom 你好_"+t+"_i","Shanghai 中文 _"+t+"_"+i,"TEL"+i};
	Vector ps = new Vector();
	ps.add(points.get(i));
	GeographyFeature feature = GisToolkits.createFeture(ps, Geom.GEOM_MULTIPOINT,
			an, vn);
	features.add(feature);
}
String operation = WFSUtils.buildInsertAction(WFS_SERVER_PSTH, SERVA_NAMESPACE,
		"serva:TShpFile", features);
String rc;
try {
	rc = WFSRequest.httpPost(WFS_SERVER_PSTH, operation, "xml");
	System.out.println("Result is :\n"+rc);
	network.getDataBox().clear();
	points.clear();
} catch (Exception e1) {

}
 

实现大量数据的注入。
第三步:前面两步我们已经组织好了必要的数据基石,那么我们就可以组织我们自己的LBS应用了。
例如我们可以以某一坐标为中心点,查询周围500米范围内的基站

 

SpatialOperateCondition condition = new SpatialOperateCondition(TWaverGisConst.GML_TYPE_POINT);
condition.setCoordinates(new GeoCoordinate[]{queryCenter});
condition.setUnit("m");
condition.setOperatorType(TWaverGisConst.SPATIAL_OPERATOR_TYPE_DWITHIN);
condition.setDistance(500);
String operation = WFSUtils.buildSpatialOperation(LAYER,new String[]{},condition);
System.out.println(operation);
GeographyFeature[] features = WFSRequest.requireFeatures(WFS_SERVER_PSTH, operation);
if(features==null){
	return;
}
for(int i=0;i<features .length;i++){
	List p = features[i].getPoints();
	Rack result = new Rack();
	GeoCoordinate geo = (GeoCoordinate)p.get(0);
	result.putClientProperty(TWaverGisConst.GEOCOORDINATE, geo);
	result.setWidthSize(5);
	result.setHeightSize(5);
	result.putBodyColor(Color.RED);
	network.getDataBox().addElement(result);
}
System.out.println("result num is "+features.length);
 当然也可以根据基站的名字或者街道地址什么的进行查询,这些可以通过TWaverGIS提供WFS查询接口进行处理。
分享到:
评论

相关推荐

    使用HTML5和Google Maps构建手机LBS游戏

    NULL 博文链接:https://fantasticinblur.iteye.com/blog/1174039

    lbs博客系统(asp)

    lbs博客系统 此博客系统基于asp系统构建,功能强大

    基于J2EE和Oracle Spatial构建LBS地图服务.pdf

    基于J2EE和Oracle Spatial构建LBS地图服务.pdf

    基于定位服务(LBS)的移动商务新模式.docx

    从广义上讲,只要是涉及到位置的服务都属于LBS,比如查询自己周围餐厅,查询自己所在城市的天气等,这些都属于LBS应用的范畴。LBS只是一种手段和工具,并不能作为一个完整的商业模式,只有把它与商家建立起联系,为不同的...

    基于LBS的智能停车系统研究.pdf

    该系统通过融合物联网、大数据、传感等先进技术,建立车与人、城市、位置的对话,提供更智能、更经济、更高效、更人性化的停车解决方案。 智能停车系统的研究背景是全球人口持续增长,城市化加速,汽车消费增加,...

    使用Ruby on Rails开发LBS网站初探示例代码

    这几天一直在学习使用RoR(Ruby on Rails),想建立一个功能全面一点的LBS(Location Based Service)网站。但是对于我这个RoR的初学者(仅有几天时间)来说,毕竟太复杂了。因此本文试图简化原来的设计思路,抛弃一切...

    基于LBS和混合推荐算法的智能旅游导游系统Tourval.zip

    React:一个流行的JavaScript库,用于构建用户界面。 Angular:一个用于构建Web应用的前端框架。 Vue.js:一个渐进式JavaScript框架,用于构建交互式界面。 Sass 和 Less:CSS预处理器,用于简化和加强CSS的功能。 ...

    基于MapViewer 的 LBS 系统的设计与实现

    据库相结合开发基于位置的服务系统的总体体系结构和实现原理,构建并实现了一种的基于 Mapviewer 平台的基于位置服务的应用,即在地图上的范围查询服务。最后总结了基于位置服务的 技术具有广阔的应用前景和巨大的商业...

    LBS移动社交资源共享平台的设计与实现

    结合移动互联网、社交网络和电子商务,构建了基于位置的服务(LBS)移动社交资源共享(SMSRL)平台,并对主要功能模块设计进行了详细的描述,探讨了实现该平台的关键技术。SMSRL平台的系统设计合理,便于在不同平台间移植和...

    如何运用高德地图开放平台打造一流位置应用

    通过此次演讲大家可以了解到如何通过高德开放平台的各个产品来构建属于自己的LBS应用,包括地图显示与操作、兴趣点搜索、地理编码、离线地图及云图(地图数据的云存储)等功能,开发者可以清楚的了解到高德开发平台...

    &nbsp;一种移动Ad hoc环境下的LBS位置保护算法的研究

    传统的基于位置信息的服务(LBS)的隐私保护需要LBS提供者(简称LSP)与用户之间通过第三方作为中介来进行信息交换,但这种模式极易遭到攻击者攻击。为此提出一种基于K-匿名机制的隐形空间算法KABSCA(k-anonymity ...

    amap-framework:它是一个基于AMap的LBS的抽象概念层。如果你想像往常一样构建你的地图,试试吧

    地图框架 它是一个基于AMap的LBS的抽象概念层。如果您想像往常一样构建地图,请尝试一下。

    LBS让实体店和虚拟店共赢

    为了抗争,很多实体店也纷纷在互联网上建立自己的虚拟店。对实体店更不利的是,移动互联网技术正在帮助虚拟店进一步扩大用户群。比如,很多手机应用都在利用条码(二维码)扫描、图片识别、近场通信(NFC)等技术,...

    LBS中位置及其语义的研究 (2006年)

    阐述了两种LBS位置表示方法,引入了语义位置的概念,对现有的语义位置概念作了修正,强调了位置属性也是语义位置的重要组成部分。通过对位置概念内涵和外延的分析。讨论了位置属性所包括的内容;运用层次建模,实现...

    移动定位业务,车辆监控系统,地理信息系统,3G

    本系统在“北京市拔尖创新人才计划”的支持下,研究的目的是在现有移动通信网络的基础上,利用新兴的蜂窝移动定位技术及移动通信技术获取目标移动终端的位置信息,并结合GIS而构建基于位置的服务(LBS,Location ...

    论文研究-基于移动agent和元数据的位置服务信息查询.pdf

    为了有效访问基于位置服务(LBS)环境中的服务信息,提出了基于移动agent 和元数据的LBS信息查询新思路,给出了构建LBS信息查询系统的方法,并利用移动agent 开发平台Voyager和Java系列软件开发了一个分布式的LBS信息...

    LBS在嵌入式GIS中的应用研究

    智能交通系统(InelligentTransportSysTem,简称ITS)智能交通系统将先进的信息技术、数据通讯传输技术、电子传感技术、电子控制技术以及计算机处理技术等有效地集成运用于整个交通运输管理体系,而建立起的一种在大...

    仿乐享 超phpcms 微信源码

    爱微志在帮助那些不懂技术的个人或企业建立属于自己的接口程序,让完全不懂技术的个人或企业通过简单的配置,即可拥有强大的功能。企业使用爱微可以用低廉的成本实现智能客服机器人功能,淘宝店家可以轻松实现店铺...

Global site tag (gtag.js) - Google Analytics