nodejs+postgis实现搜周边

利用nodejs搭建服务器,并连接PostgreSQL数据库,利用前端传过来的中心点坐标和搜索半径,进行空间查询,实现简单的搜周边,下面是实现流程和nodejs的代码:

app.post(‘/tosearcharound‘, multipartMiddleware, function (req, res) {
        var queryData = "";
        req.on(‘data‘, function (strChunk) {
            queryData += strChunk;
        });
        req.on(‘end‘, function () {
            console.log(‘数据接收完毕‘);
            //解析出客户端提交的信息中的参数,进行postgres查询
            var querystring = require("querystring");
            var params = querystring.parse(queryData);
            var pointx = params[‘pointx‘],
                pointy = params[‘pointy‘],
                searchRadius = params[‘searchRadius‘];

            console.log(pointx+" "+pointy+" "+searchRadius);

            //利用客户端传过来的参数做查询,将查询结果返回到客户端
            //加载相应的模块,不同的数据库使用不同的模块
            var pg = require(‘pg‘);
            //构造连接数据库的连接字符串:"tcp://用户名:密码@ip/相应点数据库名"
            var conString = "tcp://postgres:[email protected]:5432/projectdb";
            //构造一个数据库对象
            var client = new pg.Client(conString);

            //连接数据库,连接成功,执行回调函数
            client.connect(function (error, results) {
                if (error) {
                    console.log("could not connect to postgres" + error.message);
                    client.end();
                    return;
                }
                console.log("Client connect is ok.\n");
            });
            var querystring = "select st_astext(the_geom) from poi_beijing where ST_DWithin(ST_Transform(the_geom,26986),ST_Transform(ST_Geometryfromtext(‘point(‘||" + pointx + "||‘ ‘ ||" + pointy + "||‘)‘,4326),26986)," + searchRadius + ")";
            console.log(querystring);
            //执行相应点sql语句
            client.query(querystring, function (error, results) {
                console.log("in callback function.\n");
                //console.log(results);
                //console.log(results.rowCount);
                if (error) {
                    console.log("error");
                    console.log(‘GetData Error:‘ + error.message);
                    client.end();
                    return;
                }
                if (results.rowCount > 0) {
                    console.log(results);
                    //callback(results)
                    //指定为json格式输出
                    res.writeHead(200, {
                        "Content-Type": "application/json",
                        "Access-Control-Allow-Origin": "*"
                    });

                    //先将results字符串内容转化成json格式,然后响应到浏览器上
                    res.write(JSON.stringify(results, undefined, 3));
                    res.end();
                }
            });
        });
    }
);
时间: 2024-10-08 10:31:06

nodejs+postgis实现搜周边的相关文章

nodejs+mongo 实现搜附近的人

参考网址:http://blog.csdn.net/huangrunqing/article/details/9112227 用mongo作为存储,来实现搜索附近的人具有先天的优势, MongoDB原生支持地理位置索引,可以直接用于位置距离计算和查询. 另外,它也是如今最流行的NoSQL数据库之一,除了能够很好地支持地理位置计算之外,还拥有诸如面向集合存储.模式自由.高性能.支持复杂查询.支持完全索引等等特性. 先看一下我在mongo中的数据存储格式: /* 0 */ { "_id"

nodejs【伪】入门教程

声明: 本文适合白的不能再白的小白 不要被标题误导,本文不会讲nodejs基础,只是本人学习流程和资料的一个整合 如果想找一大堆教程自己看,没有电梯,自己拉到文章最下方吧 一.nodejs是什么 前段时间,偶然得到了一次跟几个大牛学长学习的机会,他们正在做一个startup的项目,构建网站所使用的就是nodejs;对这个最近牛哄哄的东西,自己也只是略有耳闻,从何下手呢,打开百度,google一下. 首先,nodejs不是一种什么编程语言,而是一个可以让javascript运行在服务器端的平台,至

《iOS用户体验》总结与思考-改动版

假设转载此文.请注明出处:http://blog.csdn.net/paulery2012/article/details/25157347,谢谢. 前言: 本文是在阅读<ios用户体验>的过程中,记录的总结和个人的感受思考.不免有错误之处,恳请读者指正,在以下留言就可以. 第一章:ios人机界面指南概述 1.智能手机的特点:大尺寸.高分辨率.强大的计算能力 2.签名交互:滚动轮.导航键.按键和硬键盘.软键盘.触控笔.触屏.输入特性又被称为"签名交互",用户能够通过输入方式

仿百度地图街景实现

使用过百度地图的同学知道,它有个街景功能,可以看到许多地方的实景.这里就其街景内容的实现,进行下学习. 在百度地图SDK的官网上可以看到,百度对开发者提供了很多相关的内容,方便我们进行学习.关于SDK的使用方法,包括jar包导入,*.so 动态库的添加位置及AndroidManifest文件的配置不做为我们这里讨论的内容,官方文档已经介绍的很详细,不做无聊的搬运工. 效果图 这里我们首先预览下,今天最终要实现的效果图 如图所示,我们这里的实现,就是两个页面的内容,一个是基础的地图MapView,

ios用户体验

如果转载此文,请注明出处:http://blog.csdn.net/paulery2012/article/details/25157347,谢谢! 前言: 本文是在阅读<ios用户体验>的过程中,记录的总结和个人的感受思考.不免有错误之处,恳请读者指正,在下面留言即可. 第一章:ios人机界面指南概述 1.智能手机的特点:大尺寸.高分辨率.强大的计算能力 2.签名交互:滚动轮.导航键.按键和硬键盘.软键盘.触控笔.触屏,输入特性又被称为“签名交互”,用户可以通过输入方式的组合方式别是设备品牌

【云图】如何设置微信里的全国实体店地图?

商家福利!如何提高微信公众平台的粉丝数?如何更好地与粉丝互动?如何为客户提供更好的网络服务? 答案是,为自己的微信公众平台,添加地图功能.有了地图,您的用户能更好更快地找到您实体店的地址,快捷地查询路线.不同实体店还可以添加不同的电话号码,让用户一键拨号,增强互动增强体验. 什么什么,您不懂微信?不要紧,本文详细讲述了如何设置微信公众平台,如何将实体店地图添加到微信公众平台中. 什么什么,您不懂开发不懂地图?不要紧,高德提供如下服务: 1.高德[云图],提供实体店位置.照片.电话.名称等的存储.

web前端开发教程系列-4 - 前端开发职业规划

前言 关于我:小天 1). 架构师,项目经理,产品经理 2). 中间件研发 3). VPCC 云计算基础平台管理 4). 智慧旅游 5). 智慧教育 6). 一次失败的创业体验(爱邂逅网) 一. 在开始规划职业之前,应该充分认识自己从事的行业,结合自己的价值观,树立合理目标,持之以恒 二. 人生阶段 1. 30岁之前: 2. 30岁以后:慢慢开始登上这个社会的大舞台,你这时候的目标就应该是一些具体的成就了,是做这些事情的副产品的时候了 三. 展望未来,个人认为在以下的前端技术领域,会产生较大的机

小程序餐饮模式定制开发

餐饮小程序开发找巢杰:135-3388-6017(微信同号)传统的餐饮生意,商家不知道消费者是谁,也没有与消费者建立紧密联系和有效触达,消费者离店以后,商家与消费者就处于失联状态,商家要想拉新,更多只能通过第三方平台继续做拼团或者团购,但有可能拉回来的还是老客户.如今,赢在移动推出餐饮小程序帮助线下商家链接互联网. 商家如果建立起基于微信的去中心化的平台和会员体系,积累存量会员和客户,形成商家自有的流量洼地,就不需要在依靠第三方平台.而餐饮行业如果能把会员环节做好,生意也会越来越好做. 传统餐饮

[JS,NodeJs]个人网站效果代码集合

上次发的个人网站效果代码集合: 代码集合: 1.彩色文字墙[鼠标涟漪痕迹] 2.彩色旋转圆环 [模仿http://www.moma.org/interactives/exhibitions/2012/centuryofthechild/中间部分效果, 那个走路的孩子技术很简单,和以前的春分秋分Google的Doodles类似,就没有模仿,换成一个头像] 3.视屏拼图 4.百度地图api简单应用集合 5.财经数据 6.天气预报 [nodejs搭建,express框架,nodejs简单页面抓取,JS