Articles of 地理位置

MongoDB聚合,geNear并迭代callback

我有一个问题,我找不到解决scheme。 我有一些MongoSchemas用于存储来自用户的地理定位。 手机每隔5分钟发送一次经纬度。 这个API是完美的。 Mongo-Schema看起来像: // Importing Node packages required for schema const mongoose = require('mongoose'); const Schema = mongoose.Schema; //= =============================== // User Schema //= =============================== const GeolocationSchema = new Schema({ loc: { type: { type: String }, coordinates: { type: [Number], index: '2dsphere' } }, user: { type: Schema.Types.ObjectId, ref: 'User' } }, […]

Elasticsearch node.js geo_distancefilter

我正在使用nodejs应用程序中的elasticsearch模块来按照geo_points查找文档。 根据http://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-search ,我试图做到这一点: client.search({ index: 'myindex', type: 'mytype', body: { filtered : { query : { match_all : {} }, filter : { geo_distance : { distance : "200km", coordiates : { lat : 40, lon : -70 } } } } } }).then(function (resp) { var hits = resp.hits.hits; console.log(hits, "items"); }).catch(function (error) { […]

数百个坐标之间的Nodejs距离计算阻塞了我的服务器

我有一个数百个坐标(lat,lon)的列表。 对于每个客户端请求,我需要计算每对这些点之间的距离。 对于1000个坐标的列表 – 这需要我500毫秒,所以它阻止我的nodejs服务器。 我怎样才能修复这个asynchronous? 我不希望它阻止我的服务器,所以它可以继续处理其他请求.. build议打开另一个nodejs进程,并将其设置为“距离计算服务”或类似的东西? 以下是一个示例testing代码: var pts=[]; for (i=0;i<1000;i++){ pts.push(randomLatLon()); } var a; var b; var i,j; var start = new Date(); for (i=0;i<pts.length;i++){ for (j=0;j<pts.length;j++){ if (i===j) { continue; } a = pts[i]; b = pts[j]; var dist = utils.getDistance(a.lat,a.lon,b.lat,b.lon); } } console.log('total time',new Date()-start,'ms'); // ~500 ms 这里是utils.getDistance函数: E.getDistance […]

使用地理位置确定哪些用户靠近一个用户

我想知道什么是最好的方式来确定和计算,哪些用户接近一个用户,使用地理定位和他们的GPS坐标。 给定主要用户的GPS坐标,我知道如何计算他的位置周围的“边界框”。 我可以在数据库中为每个用户configuration文件存储边界框坐标。 但是,那么如何确定哪些用户接近发送请求的用户呢? 是否有任何公式可以让我计算一个GPS位置周围的“盒子”,给定距离,所以位于该盒子内的每个GPS位置和应用这个公式都会呈现相同的盒子? 这样做可以让我简单地问我的数据库哪个用户假装在这个盒子里。

哪个数据库用于存储许多用户的地理位置(坐标),并检查它们是否实时相互靠近?

IOS应用程序会通过REST API随时发送坐标到服务器。 在服务器内部的数据库注册用户与他们的坐标存储。 每个用户可能有许多他想追踪的朋友,如果他们离他很近的话。 因此,在每次坐标更新(来自用户)之后,服务器必须检查他的朋友是否接近他(半径也存储在每个用户的数据库中)。 它必须处理许多用户。 如此多的写入数据库的时间,每写完之后就有计算附近的朋友。 作为服务器技术,我想使用node.js,但我想知道哪些(或什么types的数据库)使用? 有没有任何数据库可以帮助所有的地理定位计算,或者对这种计算特别“调整”? 你会推荐什么?

geoPHP指向多边形

我需要一些帮助,谷歌让我难过 我得到了多边形http://geojson.io/#id=gist:anonymous/069b8a955897723ca256&map=4/58.75/48.03它涵盖了很多。 我有geoPHP库https://github.com/phaye/geoPHP哪些得到的方法包含,涵盖coverBy … 一切都是正常的,除了像74.224074这样的点,96.428248总是为这个多边形的方法包含,覆盖,覆盖等。 但这一定是真的。 请告诉我为什么。 我头痛了 要么 请告诉我,如何检查经纬度在多边形内。 我testing了perl和php中的3个库,使我自己的代码等…但正确的结果,我只从谷歌containsLocation在JavaScript中。 但我必须在服务器端使用它,而不是在浏览器中。 如果有机会在nodejs中使用containsLocation,那将是非常好的。 谢谢 A little code for geoPHP: $a='JSON FROM LINK'; $b=geoPHP::load("POINT(74.224074 96.428248)","wkt"); $a=geoPHP::load($a, 'json'); $result=$a->contains($b); var_dump($result); 这将是错误的 编辑:我想我明白了。 GeoJson以错误的方式,经度,纬度进行坐标。 但它必须是纬度,经济。 将尝试,然后写在这里,如果它的工作 回答: 使用这个www.birdtheme.org/useful/v3tool.html在地图上制作多边形。 它正确的方式(纬度,经度) geoPHP的工作代码: include_once('geoPHP.inc'); $addr=file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?address='.urlencode($_GET['address']).'&sensor=false'); foreach($addr->{results} as $addr1) { if(array_key_exists("geometry",$addr1)){ $lat=$addr1->{geometry}->{location}->{lat}; $lng=$addr1->{geometry}->{location}->{lng}; break; } } $point1 = geoPHP::load("POINT($lat $lng)","wkt"); $ya200=geoPHP::load("POLYGON((41.51 12.3, […]

Mongoose地理查询不会返回正确的结果

我想查询一个数据库,我正在存储的位置坐标附近的某个坐标,还指定一个maxDistance。 我读了官方的mongo文档,以米为单位的maxDistance。 集合模式如下: var BranchSchema = new Schema({ parentId: { type: Schema.Types.ObjectId, required: 'The ID of the parent is required.', index: true }, name: { type: 'String', required: 'The branch name is required.' }, location: { type: [Number], index: { type: '2dsphere' } } }); 我插入了一个具有以下信息的文档: { "parentId" : ObjectId("54ee08c2d903aca72291f120"), "name" : "Branch1", "_id" : […]

什么是通过半径API或Node.js模块为世界拉链的很好的search?

所以我实际上遇到了麻烦。 最初我find了一个叫做邮政编码的npm模块。 正是我想要的function方面有一点额外,但它只适用于美国。 在失望后,我search了npm,找不到包括美国,欧洲或世界其他地方在内的任何东西。 那么我想,谷歌应该有一个API。 那么他们实际上不是。我能够做的最好的是得到经纬度和长坐标的邮政编码。 我一直在寻找大约一个星期,到目前为止,我担心我将不得不创build一个数据库来进行坐标search。 我只是希望有另一个解决办法,而不是必须这样做。 但是我可能一直在寻找错误的东西。 我的大部分search都包括邮政编码查询或半径的地理邮政编码。

地理空间应用:mySql vs CouchDB vs其他

我正在谷歌地图上开发一个应用程序,并检出各种选项来存储和检索边界框中的空间信息。 最初我以为MySql不是一个好的select,但在检查http://dev.mysql.com/doc/refman/5.6/en/spatial-analysis-functions.html和http://code.google.com/apis /maps/articles/phpsqlsearch.html ,看起来像我可以使用MySql,它支持我的用例。 我也用geocouch来评估node.js和couchdb。对于像socket.io这样的模块,geo等看起来也是一个不错的select。 请查阅“GEO,CouchDB和Node.js入门”一书。 我的应用程序将是1页的应用程序,我不会预见,如果我将来需要任何时候rdbms。 我也看到了这个 – http://nodeguide.com/convincing_the_boss.html ,这让我有点担心是否去node.js-geocouch …. 如果您的下一个应用程序的体系结构像NoSQL成分的食谱一样,请暂停一下并阅读此内容。 是的,Redis,CouchDB,MongoDB,Riak,Casandra等都看起来很诱人,但是红苹果Eve也忍不住。 如果您已经在使用node.js来承担技术风险,那么您不应该使用更多可能还不完全了解的技术。 当然,select一个面向文档的数据库有合法的用例。 但是如果你试图在你的软件之上build立一个业务,坚持保守的数据库技术(比如postgres或者mysql)可能会超过满足你内心的书呆子和给你的朋友留下印象的好处。 你有什么意见 ?

MongoDB:如何在没有索引的情况下计算两个坐标内的距离

我需要在一个聚合框架中获得两个坐标之间的距离,但是只有pipe道的第一个匹配(我使用$ text)才能使用索引,并且我不能在同一个匹配查询中使用$ geoNear或$ text 。 我解决了使用下列方法返回半径坐标的问题: {$geoWithin: {$centerSphere: [[lon, lat], (distance*1000)/6731]}} 但我不知道如何计算没有使用索引的距离。 这是pipe道的前两个阶段 [ { '$match': { '$text': { $search: "some text" } } }, { '$match': { coordinate: {$geoWithin: {$centerSphere: [[lon, lat], (distance*1000)/6731]}}, type: 0 } } ] 有可能通过在这个pipe道中增加一个$项目来返回[x,y]和[lon,lat]之间的距离?