问题标签 [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.
ruby - 从 ruby 中的 geojson 多边形中删除重复点的最佳方法是什么?
我正在使用 rgeo ruby 库来解析 geojson 多边形。行为是在对具有重复点的多边形调用 decode 时返回 nil,如下例所示:
由于开头重复的点,执行此代码后 rgeo_geom 将为 nil。
清理这个多边形的最有效方法是什么?是否有内置的 rgeo 功能或者我应该自己推出?
需要明确的是,我只想删除连续的重复点,因为这是导致库为上述代码返回 nil 的原因。我也不是在寻找诸如 postgis st_removerepeatedpoints 之类的数据库解决方案,而是在寻找在 ruby 中执行的这种行为。
ruby-on-rails-5 - 如何确定纬度/经度对是否位于 shapefile 多边形内
我在我的 Rails 5 应用程序中使用rgeo
and rgeo-shapefile
gems。我的目标是加载邻域的 shapefile 并确定纬度/经度点位于哪个邻域内。
在他们的文档中,他们有这个例子。
我不太确定如何从这个例子转向我想做的事情。
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
多边形的文本表示示例:
我想到的最愚蠢的事情是POLYGON
用MULTIPOLYGON
单词替换,并添加额外的()
括号。但是,我相信应该有更好的方法来使用 RGeo 库进行转换。我花了一些时间阅读 RGeo 的文档,但没有找到任何可以帮助我的东西。
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 个具有自相交坐标的相似点。但问题是 - 多边形有一个特定的顺序,我不知道在哪里插入这些点。
此外,也许有一些现有的工具可以帮助解决这个问题......
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....
geospatial - 融合 rasterToPolygons 的输出
rasterToPolygons
在包中使用时raster
,满足公式标准的每个单元格都将成为其自己的多边形:
但是,我希望每个具有相邻边或角的多边形成为一个较大多边形的一部分,从而减少总多边形的数量。有没有办法做到这一点?
ruby-on-rails - 尝试将 Rgeo 与 rails 一起使用
我是一个新手,尝试使用 Rgeo 和 GeoJSON。我想从我的数据中提取 GeoJSON 以在传单中使用。
安装GeoJSON(和/或地点)的正确方法是什么。
宝石文件:
是否需要任何其他配置以及安装它的正确方法是什么(GeoJSON)
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.
帮助。
我错过了什么/误解/做错了什么?我猜这是一个配置问题,只是不知道它是什么,不幸的是,我已经达到了我可以根据文档和教程计算出的极限——唉——有点过时了。
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
来源
除其他外,我没有任何运气就通过了以下来源:
StackOverflow 帖子讨论了为什么其中一部分已过时 2015-06-26
- 请注意已接受答案下方的注释,该注释阐明了如何为所有内容设置默认球形工厂-这对我和我上面所做的都很好。
鉴于这已经是一个单一功能,Github 问题响应似乎并不相关
更新和活跃的 Github activerecord-postgis-adaptor 响应,触及以上所有点
- 尽管它看起来不相关,但我仍然在搞乱这个选项
- 试过但没有效果(见下文)
尝试
我也尝试安装 Geos,但这并没有什么不同。
在容器中:
在 Rails 控制台中:(重启后)
尝试和结果同上(例1)
ruby-on-rails - 在 rails-postgres-rgeo 项目中按 lat / lon 查找记录
拥有 Table Neighborhoods
,如下所示:
geometry
- 是一大组 lon/lat 对。我希望能够通过lat
and找到 Neighborhood lon
。
现在我使用这种方法:
但是这种方法很慢,要使用我需要全部加载并循环遍历每个Neighoborhood
.
最好有一些 sql 查询来立即加载指定lat/lon
的社区,而不是遍历所有。
我试过这个(例如,Lat Lon 是硬编码的):
但我明白了: