原文地址: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游戏”是指利用HTML5的Web技术以及Google Maps API来开发一种地理位置服务(LBS,Location-Based Services)游戏。这种游戏通常会结合用户的真实地理位置信息,提供基于...
【LBS网站系统(BLOG)】是一个基于ASP技术构建的地理位置服务(Location-Based Service,简称LBS)与博客(BLOG)相结合的平台。在这一系统中,用户不仅可以发布和分享个人日志,还能利用LBS功能记录和分享他们的位置...
全国基站数据库的建立是为了提供精确的位置信息,这对于各种应用场景至关重要。例如,紧急救援服务可以通过基站定位快速找到需要帮助的用户;公共交通管理可以监控乘客流动,优化路线;市场营销可以分析消费者行为,...
总的来说,百度lbs云开发程序为开发者提供了便捷、高效的工具,帮助他们快速构建具有LBS功能的应用程序,无论是在PC、Android还是iOS平台上,都能实现一致的用户体验。通过深入理解和熟练运用百度lbs云的API,开发者...
开发者可以通过阅读和运行这些示例,快速理解和学习如何在自己的应用中实现LBS功能。 具体步骤包括: 1. **注册开发者账号**:首先,你需要在百度地图开放平台注册一个开发者账号,获取API密钥,这是使用百度地图...
9. **可定制性**:为了满足不同项目的需求,LBS^2 模板应具有高度的可扩展性和可定制性,方便开发者根据自己的需求进行调整。 10. **文档与示例**:一个优秀的模板应该附带详细的使用指南和示例代码,帮助开发者...
首先,加强法律监管,建立和完善针对LBS服务的法律法规,明确数据保护责任,对违规行为进行严厉处罚。其次,采用更强的数据加密技术,确保在传输过程中位置信息不被截取。再者,引入差分隐私技术,允许系统提供服务...
【标题】"LBS^2 China" 暗示了一个与地理位置服务相关的项目或...总的来说,"LBS^2 China"的压缩包可能包含了一套完整的、为中国市场定制的LBS网页模版,帮助开发者构建功能丰富的、具有本土化特色的地理位置服务网站。
【网页模版】标签提示我们,这可能是一个用于构建与LBS^2 魔兽相关的网站的模板。网页模版是预先设计好的网页布局,包含色彩搭配、字体样式、图片布局等元素,可以帮助开发者快速创建符合特定主题的网站,节省时间和...
这些资源对于理解LBS+AR在游戏开发中的实现至关重要,包括如何处理地理位置数据、如何构建AR场景、如何设计游戏规则以及如何与服务器进行交互等。 在深入探讨LBS+AR技术时,我们还可以关注以下几个关键点: 1. ...
在社交应用中,LBS可以让用户分享自己的位置,增强互动性。在旅游领域,它可以推荐附近的景点和旅行路线。 【标签】"网页模版"表明这是一个与网站设计相关的项目,可能涉及到使用预先设计好的网页结构和样式,以便...
通过对“lbs.rar”中的“itcast-lbs”项目深入研究,我们可以学习到LBS应用的开发流程,理解如何集成和使用定位服务,以及如何构建一个完整的LBS应用。这不仅有助于提升我们的编程技能,还能让我们了解到位置服务在...
对于Java开发者来说,通过百度LBS云存储Java DEMO,可以学习如何在自己的应用中集成这一功能,实现高效的位置数据处理。 首先,我们需要理解LBS云存储的基本概念。LBS云存储是将位置信息(如经纬度坐标、地址等)...
3. **开放平台**:构建开放平台,允许第三方开发者接入并开发基于位置的服务应用。平台方可以通过数据分析等方式获取收益。 4. **服务集成**:整合多种服务资源,为用户提供一站式的解决方案。例如,在旅游场景中,...
【标签】"网页模版"则指出了这个项目可能与网页设计和开发有关,尤其是使用了预设的模板来快速构建具有LBS功能的网站。网页模板是预先设计好的页面布局,包含了样式、色彩、图片等元素,可以帮助开发者快速创建出...
这不仅增加了用户参与度,也有助于建立社区感,让用户能够分享他们的体验和发现。 至于“资料”,这通常指的是与软件相关的文档,如开发指南、API参考、用户手册等。这些资料对开发者和使用者都至关重要,它们提供...
LBS隐私保护研究包括了对隐私概念的界定、隐私威胁模型的分析、系统结构的构建、隐私保护技术的研究以及隐私保护技术性能的度量和评价等。 首先,研究者们对LBS隐私的概念进行了界定,明确了隐私威胁模型。LBS隐私...
这可能是一个包含了一系列相关资源的压缩包,如HTML文件、CSS样式表、JavaScript脚本、图像和其他设计元素,用于构建符合LBS^2残破主义理念的网页模版。 综合以上分析,LBS^2残破主义可能是一个结合了基于位置服务...