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:post@localhost: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();
                }
            });
        });
    }
);
nodejs+postgis实现搜周边的更多相关文章
- unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计
		unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计 最近做玩票性质的游戏项目,客户端技术是 unity3d 和 android. ... 
- nodejs+mongo 实现搜附近的人
		参考网址:http://blog.csdn.net/huangrunqing/article/details/9112227 用mongo作为存储,来实现搜索附近的人具有先天的优势, MongoDB原 ... 
- nodejs【伪】入门教程
		声明: 本文适合白的不能再白的小白 不要被标题误导,本文不会讲nodejs基础,只是本人学习流程和资料的一个整合 如果想找一大堆教程自己看,没有电梯,自己拉到文章最下方吧 一.nodejs是什么 ... 
- ios用户体验
		如果转载此文,请注明出处:http://blog.csdn.net/paulery2012/article/details/25157347,谢谢! 前言: 本文是在阅读<ios用户体验> ... 
- web前端开发教程系列-4 - 前端开发职业规划
		前言 关于我:小天 1). 架构师,项目经理,产品经理 2). 中间件研发 3). VPCC 云计算基础平台管理 4). 智慧旅游 5). 智慧教育 6). 一次失败的创业体验(爱邂逅网) 一. 在开 ... 
- 《iOS用户体验》总结与思考-改动版
		假设转载此文.请注明出处:http://blog.csdn.net/paulery2012/article/details/25157347,谢谢. 前言: 本文是在阅读<ios用户体验> ... 
- 【GIS】postgres(postgis) --》nodejs+express --》geojson --》leaflet
		一.基本架构 1.数据存储层:PostgreSQL-9.2.13 + postgis_2_0_pg92 2.业务处理层:Nodejs + Express + PG驱动 3.前端展示层:Leaflet ... 
- nodejs实现定时爬取微博热搜
		The summer is coming " 我知道,那些夏天,就像青春一样回不来. - 宋冬野 青春是回不来了,倒是要准备渡过在西安的第三个夏天了. 废话 我发现,自己对 coding 这 ... 
- [JS,NodeJs]个人网站效果代码集合
		上次发的个人网站效果代码集合: 代码集合: 1.彩色文字墙[鼠标涟漪痕迹] 2.彩色旋转圆环 [模仿http://www.moma.org/interactives/exhibitions/2012/ ... 
随机推荐
- Django 入门项目案例开发(中)
			关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. 昨天已经描述了如何搭建Django的开发环境,今天描述业务流程,具体我们要实现一个什么样的业务 ... 
- 机器学习——LightGBM
			基础概念 LigthGBM是boosting集合模型中的新进成员,它和xgboost一样是对GBDT的高效实现,很多方面会比xgboost表现的更为优秀.原理上它和GBDT及xgboot类似,都采用损 ... 
- 常用vue请求交互数据方式
			几种 vue的数据交互形式 var that=this get请求 that.$http.get("1.txt").then(function(result){ console.l ... 
- JQ(查找)
			1.由下级到上级再到下级 var aa=$("td:eq(0)").parents("tr").find("td:eq(1)"); 2. 
- Ubuntu17.10下编译Openjdk8u
			一开始笔者用的系统和软件版本都是最新的,导致编译了好几次都失败,最后找到解决的办法,现在记录一下编译及解决的方法 避免以后忘记 所用操作系统 Ubuntu17.10 所用软件及版本 make 3.8. ... 
- docker容器启动时执行脚本  run /bin/bash执行多条指令
			搜了很多资料发现并未解决,以下方法失败!求大神评论给出完美方案 1.首先需要编写需要启动的脚本,并将脚本放在 /etc/init.d/目录下 如:cs.sh 2.修改权限 3.chkconfig -- ... 
- C Primer Plus note7
			这个程序是<C Primer Plus 中文版 第六版>书上198页的代码,是一个值的琢磨的程式. 有时间可以看一看: 尤其是下面这几句代码,很精妙: 用了很短的程式,得出了最大值和最小值 ... 
- 我的gulp第一个程序
			以前都是单枪匹马的干,从没用过模块化的打包工具,加入新的团队后,模块化开发学到不少,尤其是工具的使用.团队目前较多的使用gulp,也是最流行的一款前端打包工具.最近Team开始尝试用gulp,我也只是 ... 
- CentOS 7运维管理笔记(2)----修改命令提示符颜色
			使用 su 命令切换到root用户: 使用 vi /etc/bashrc 命令插入如下代码: PS1="[\e[1;32m\u\e[m\e[1;33m@\e[m\e[1;35m\h\e[m ... 
- VC添加文件到工程出错问题--FileTool.dll
			原文:http://blog.csdn.net/bingdianlanxin/article/details/45112737 在我们的软件开发中,经常需要导入其他文件到我们的工程. 一般,我们会选择 ... 
