问题标签 [rgeo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
786 浏览

ruby - 从 ruby​​ 中的 geojson 多边形中删除重复点的最佳方法是什么?

我正在使用 rgeo ruby​​ 库来解析 geojson 多边形。行为是在对具有重复点的多边形调用 decode 时返回 nil,如下例所示:

由于开头重复的点,执行此代码后 rgeo_geom 将为 nil。

清理这个多边形的最有效方法是什么?是否有内置的 rgeo 功能或者我应该自己推出?

需要明确的是,我只想删除连续的重复点,因为这是导致库为上述代码返回 nil 的原因。我也不是在寻找诸如 postgis st_removerepeatedpoints 之类的数据库解决方案,而是在寻找在 ruby​​ 中执行的这种行为。

0 投票
1 回答
274 浏览

ruby-on-rails-5 - 如何确定纬度/经度对是否位于 shapefile 多边形内

我在我的 Rails 5 应用程序中使用rgeoand rgeo-shapefilegems。我的目标是加载邻域的 shapefile 并确定纬度/经度点位于哪个邻域内。

在他们的文档中,他们有这个例子。

我不太确定如何从这个例子转向我想做的事情。

0 投票
2 回答
1176 浏览

ruby-on-rails - 使用 RGeo gem 将 Polygon 转换为 MultiPolygon

我有一个遗留区域数据,其中一些记录在其中Polygon,一些MultiPolygon以 JSON 格式存储在 noSQL DB 中。我需要将该数据迁移到area具有 ST_MultiPolygon 类型的列的 PostGIS 数据库。

所以,我的问题是:如何将Polygon区域转换为MultiPolygon使用 RGeo gem 或类似的东西?

现在,我正在像这样转换 MultiPolygons:

但是当 area 不是多边形,而是多边形时,DB 会抛出异常:PG::InternalError: ERROR: parse error - invalid geometry

多边形的文本表示示例:

我想到的最愚蠢的事情是POLYGONMULTIPOLYGON单词替换,并添加额外的()括号。但是,我相信应该有更好的方法来使用 RGeo 库进行转换。我花了一些时间阅读 RGeo 的文档,但没有找到任何可以帮助我的东西。

0 投票
1 回答
2837 浏览

ruby - RGeo - 修复自相交

我有一堆具有自相交的多边形,这会导致在进一步后处理它们时出现一些错误(特别是 - 我无法计算这些多边形与其他多边形的相交面积)。这是一个破碎多边形的例子:

这就是它在地图上的样子——如您所见,有两条多边形边相交。RGeo 抛出一个错误,指向交叉点坐标(我猜)=> "Geos::GEOSException: TopologyException: Input geom 0 is invalid: Self-intersection at or near point 6.8573510795579145 46.818650764080992 at 6.8573510795579145 46.818650764080992":。所以,我至少拥有它。

我的问题是:有没有办法自动修复那个交叉点?我读到,一个可能的解决方案是插入 2 个具有自相交坐标的相似点。但问题是 - 多边形有一个特定的顺序,我不知道在哪里插入这些点。

此外,也许有一些现有的工具可以帮助解决这个问题......

自相交示例

0 投票
1 回答
512 浏览

ruby-on-rails - RGeo 包含?在模型上

我需要找到一个类的所有实例,Place其中它的多边形属性包含一个提供的点,如Place.for_point(pt).

==== 已添加 ====

好的,我可以执行此查询,但结果错误:

似乎很清楚地提供了正确的坐标:提供的点中的坐标采用纬度格式。但是坐标来自表中一个多边形的质心,所以它们应该在那个多边形内,这意味着我应该得到一组返回的 Place 记录......但我不是。

为什么?我错过了什么?

这是我期望包含该点的多边形:

==== 原帖====

我无法理解如何构建它。对于单个实例,我有一个方法contains?(pt)作为实例方法,Place该方法在调用时可以正常工作,place.contains?(@f.project(@pt_inside))并且@pt_inside是这样定义的:@pt_inside = @f.point(25.1,25.1),其中 @f 是对象的工厂。

的架构Place如下所示:

结尾

我的铁轨生锈了,但我无法查询班级 Place work....

0 投票
2 回答
988 浏览

geospatial - 融合 rasterToPolygons 的输出

rasterToPolygons在包中使用时raster,满足公式标准的每个单元格都将成为其自己的多边形:

但是,我希望每个具有相邻边或角的多边形成为一个较大多边形的一部分,从而减少总多边形的数量。有没有办法做到这一点?

0 投票
1 回答
438 浏览

ruby-on-rails - 尝试将 Rgeo 与 rails 一起使用

我是一个新手,尝试使用 Rgeo 和 GeoJSON。我想从我的数据中提取 GeoJSON 以在传单中使用。

安装GeoJSON和/或地点)的正确方法是什么。

宝石文件:

是否需要任何其他配置以及安装它的正确方法是什么(GeoJSON

0 投票
1 回答
135 浏览

ruby-on-rails - 从数据库读取位置数据时,为什么 POSTGIS / RGEO 不加载正确的点类型?

因此,我正在尝试在 Rails 中为一个项目加快基于位置的编程。总之,我的数据库数据似乎是正确的,但我无法让 rails 内存逻辑来获得正确的结果。

我在我的数据库中创建了一个 lonlat 列...

这在我的模式文件中创建了适当的条目......

当我像我一样运行查询时,Bar.where("ST_Distance(lonlat, 'Point(0,0)') < 10000")我会得到理智的结果。(我没有检查准确性,只是粗略的理智)。例如,如果我运行,Bar.where("ST_Distance(lonlat, 'Point(0,0)') < 100").count我会返回 1——恰好在相关点的单条记录。

但是如果我加载记录...

这个结果是完全错误的。事实上,这两个点相距大约 3000 英尺,快速检查上面的计数查询表明数据库至少可以理解这一点。

因此,据我所知,问题仅在于我将这些点加载到内存中。

根据 RGeo 的一些教程/文档中的说明,我geography.rb/config/initializers.

我的理解是这段代码——尤其是第二次调用 config.register,应该告诉 RGeo 将点数据视为地理数据。基于这个问题,我猜我可能需要调整寄存器调用以匹配我的模式文件,所以我实际上有 4 个寄存器行的副本,涵盖 geo_type:“point”/“st_point”,以及存在/不存在没有geographic: true. 帮助。

我错过了什么/误解/做错了什么?我猜这是一个配置问题,只是不知道它是什么,不幸的是,我已经达到了我可以根据文档和教程计算出的极限——唉——有点过时了。

0 投票
2 回答
908 浏览

ruby-on-rails - Rails / PostGIS / RGeo 错误:NoMethodError:未定义方法“工厂”用于 RGeo::GeoJSON::Feature

我正在使用 Ruby on Rails 和 PostGIS 将 GeoJSON 地图数据存储在一个名为“Map”的模型中。当我保存一个使用简单 GeoJSON 功能成功加载的对象时,我收到错误消息“NoMethodError: undefined method `factory' for #”。

请参阅下面的示例、设置、我尝试过的内容以及资源链接。

示例 1(使用 Rails 控制台)

设置

  • 导轨 5.1.4
  • 地理信息系统 9.6
  • Docker 数据库源:kartoza/postgis:9.6-2.4
  • Docker web src:红宝石 2.3.5

文件

配置/初始化程序/rgeo.rb

宝石文件

db/migrate/20182039293939_create_maps.rb

来源

除其他外,我没有任何运气就通过了以下来源:

Daniel Azuma 关于 2011 年设置的原始帖子

StackOverflow 帖子讨论了为什么其中一部分已过时 2015-06-26

  • 请注意已接受答案下方的注释,该注释阐明了如何为所有内容设置默认球形工厂-这对我和我上面所做的都很好。

鉴于这已经是一个单一功能,Github 问题响应似乎并不相关

更新和活跃的 Github activerecord-postgis-adaptor 响应,触及以上所有点

建议尽管不使用 Geos 安装需要与 2015 年搏斗

  • 尽管它看起来不相关,但我仍然在搞乱这个选项
  • 试过但没有效果(见下文)

尝试

我也尝试安装 Geos,但这并没有什么不同。

在容器中:

在 Rails 控制台中:(重启后)

尝试和结果同上(例1)

0 投票
1 回答
177 浏览

ruby-on-rails - 在 rails-postgres-rgeo 项目中按 lat / lon 查找记录

拥有 Table Neighborhoods,如下所示:

geometry- 是一大组 lon/lat 对。我希望能够通过latand找到 Neighborhood lon

现在我使用这种方法:

但是这种方法很慢,要使用我需要全部加载并循环遍历每个Neighoborhood.

最好有一些 sql 查询来立即加载指定lat/lon的社区,而不是遍历所有。

我试过这个(例如,Lat Lon 是硬编码的):

但我明白了: