问题标签 [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 回答
375 浏览

ruby-on-rails - 如何使用 GIS 数据库测试 Rails 应用程序

我正在开发一个 Rails 应用程序(3.2.8),它将使用 activerecord-postgis-adapter 和 activerecord-spatialite-adapater gems 和各种 rgeo 插件。

我想以传统方式使用 Rails 单元和功能测试,但这种测试通常使用随机或垃圾数据。除了最简单的多边形和排列之外,工厂和固定装置显然无济于事。

这个问题提供了指向免费 shapefile 的链接,但使用易于理解的高质量数据为测试数据库播种似乎并不是最好的主意。例如,如果我使用美国的州和县作为我的测试数据,则会错过一个区域仅部分包含多边形的边缘情况。

测试此应用程序的最佳方法是什么?Rails 的 GIS DB 有工厂吗?有没有像 Faker 这样的使用随机数据的东西?

0 投票
1 回答
1484 浏览

ruby-on-rails - RGeo 投影缓冲区多边形太小

我有一个使用带有 proj4 支持的 rgeo 0.3.19 的 rails 应用程序,它使用 rgeo-activerecord 0.4.5 gem 连接到 PostGIS 1.5 数据库。

我的应用程序有一个名为 Region 的模型,其中包含一个地理点、一个半径和一个多边形形状。当一个新区域即将保存时,它使用该区域的 geofactory 的缓冲区函数使用半径和地理点创建一个多边形。

这是用于区域模型的 geofactory

我正在使用的 projection_srid 是 Apple 和 Google 映射的墨卡托投影 3857。问题是正在创建的缓冲区与我在苹果地图或谷歌地图中绘制的缓冲区大小不同。例如,如果我使用内置的 MapKit 函数 MKCircle

圆圈将像这样绘制和覆盖。 iOS 绘图半径

但是,如果我从构成数据库中多边形形状的缓冲区函数中获取创建的坐标并将它们绘制在谷歌地图上,我就会得到这个。

谷歌地图半径

如您所见,使用相同投影系统创建的多边形比应有的要小。根据定义的半径大小,这个问题会以指数方式失控。我还尝试使用 RGeo 中定义的 simple_mercator 工厂,它产生了相同的结果。

希望有人对为什么在缓冲经度、纬度投影点时会创建大小不正确的多边形有所了解。

0 投票
1 回答
506 浏览

postgis - 使用 RGeo::Geographic.simple_mercator_factory 的点投影方法的结果是什么

我有工厂RGEO_FACTORY = RGeo::Geographic.simple_mercator_factory

我有一个点(POINT(28.97566007 41.01452809)),它的 srid 是 3785。

然后我使用RGEO_FACTORY.point(lon, lat).projection. 它是POINT (3225555.7243913896 5014484.790030423)

现在,我需要使用 sql 来查询以提高速度。像这样:"SELECT ST_AsText(ST_Transform(lat_lon, 4326)) from points WHERE points.id = 1"。我希望得到与 相同的结果POINT (3225555.7243913896 5014484.790030423)。但我无法得到它。

而且我尝试过其他 srid 来转换点的坐标,但徒劳无功。

我应该怎么做才能解决这个问题?

提前致谢。

0 投票
1 回答
407 浏览

postgis - 如何用纯sql表达投影?

我用过

但是现在我想用sql来实现它。我在 postgis 数据库中有点(几何)。

我应该怎么做 ?

0 投票
3 回答
1802 浏览

ruby-on-rails - Convert an ActiveRecord column to PostGIS Point

My setup:

  • Ruby 2.0.0
  • Rails 3.2.12
  • most recent pg gem
  • most recent activerecord-postgis-adapter gem
  • most recent rgeo-geojson gem
  • Postgres 9.1.6
  • PostGIS 2

I've asked something similar a few days ago. (Need to convert a Boolean from Postgres (== String) to a Ruby Boolean). There I had to convert a value from a custom select to boolean. This was pretty straight forward, by just adding this to my model:

But now I receive a value of type Point (which is a type from PostGIS). Its string representation in database looks like "0101000000EE7C3F355EF24F4019390B7BDA011940", but it has to become a (I think) RGeo::Feature::Point or maybe RGeo::Geos::CAPIPointImpl ?!

Now I looked at ActiveRecord::ConnectionAdapters::Column (http://rubydoc.info/docs/rails/ActiveRecord/ConnectionAdapters/Column), I can only find value_to_boolean and value_to_decimal.

Then I recognized that there is also ActiveRecord::ConnectionAdapters::PostgreSQLColumn (http://rubydoc.info/docs/rails/ActiveRecord/ConnectionAdapters/PostgreSQLColumn), but it doesn't seem to have any useful methods.

Thank you!

0 投票
2 回答
3477 浏览

mysql - 当多边形出现错误时,如何从 WKT 在 Ruby 中创建 RGeo 多边形

我正在使用以 WKT 格式存储多边形的 MySQL 数据库。数据库中的许多多边形都有重复的点(例如,在下面的示例中,点 -122.323502 47.600959 重复了 3 次)。

当尝试在这些多边形上调用 RGeo::Cartesian::Factory.parse_wkt() 时,结果为零。

如何在不修改多边形数据的情况下从这些多边形创建 RGeo 对象。

0 投票
1 回答
625 浏览

ruby-on-rails-3 - 使用 PostgreSQL 函数在 ruby​​/rails 中插入和更新

我在面向地理的应用程序中使用 activerecord-postgis-adapter 和 squeel。使用基于 find 和 where 工作正常和 squeel 的各种查询获取数据允许我使用 PostgreSQL/PostGIS 函数基于空间函数和数据类型进行查询。

但是,我不知道在执行 INSERT 和 UPDATE 时如何访问类似的功能。假设我想做以下事情:

我怎么能执行这样的查询?Squeel 似乎甚至不支持 SELECT 以外的其他查询。

在一个完美的世界中,我什至希望 Rgeo 的数据类型在用于 UPDATE 查询时自动转换,就像 where 查询一样。

我知道我可以退回到

ActiveRecord::Base.connection.execute

,但宁愿避免这种情况,除非有人告诉我这是唯一的方法。

-ra

0 投票
2 回答
790 浏览

ruby-on-rails - 在 heroku cedar 上安装 GEOS

我们在 heroku cedar 堆栈上安装 GEOS 库时遇到了麻烦。

我们遵循了本指南:https ://devcenter.spacaldb.com/Heroku.html ,但它没有用。

我们注意到存储在提供的 geos 二进制文件中的路径 (/app/tmp/geos) 是错误的,因此我们使用 vulcan 构建了自己的二进制文件。

我们相应地更改了参数 (BUNDLE_BUILD__RGEO),但我们无法使其工作。

我们甚至在我们的自定义 rgeo gem 中硬编码地理路径,但没有任何成功

我们还尝试了其他构建脚本(https://github.com/roximity/heroku-buildpack-ruby-geos),但它们太旧了,很难让它们与 heroku 的版本保持同步

我们正在使用 ruby​​ 2.0.0-p195 和 Rails 3.2.13

0 投票
1 回答
1655 浏览

ruby-on-rails - 为什么我在加入文件名时得到“Errno::ENOENT: No such file or directory”?

我有一个文件试图在 Rails 应用程序中打开。出于某种原因,Ruby 正在拆分文件的名称。

例如:

什么是输出/lib/tasks/filename/shp

然后我运行命令:

我收到错误消息:

看起来文件已被拆分为filename.shp

0 投票
1 回答
363 浏览

ruby-on-rails - activerecord (rails) 迁移——为列设置选项值

我将rgeogem 与activerecord-postgis-adapter用于某些列,并且我希望更改现有列的选项

请允许我以这种方式显示它,在 schema.rb 文件中,目前这是记录该列的行

所以这个专栏有一些 postgis 认可的特殊元标记选项。

我想将这些:shape列的默认 srid 设置04326。我想通过迁移来做到这一点,或者甚至更好,以便能够单独设置这些点的值。目前,我还没有在 RGeo 文档中找到 :srid 标签的 setter 方法,只有一个阅读器。所以我认为我最好的选择是迁移。

我试过这个:

但是得到了这个错误:

我知道可以通过执行一串 SQL 来解决这个问题,但我希望活动记录也能提供一种方法