标签: rgeo

RGeo 交叉函数的问题

我从 RGeo 多边形相交函数(Ruby 2.3.0、RGeo 0.5.3)得到奇怪/不正确的结果

例 1:

我有两个多边形,我相信它们共享一个边界但不共享任何内部空间(即它们接触但不重叠):

wkt_1 = "POLYGON ((-8226874.27782158 4962626.76394919, -8223358.174520462 4961756.817075645, -8223358.174520462 4960289.557693501, -8224471.369428394 4960289.557693501, -8226874.27782158 4962253.674727506, -8226874.27782158 4962626.76394919))"
wkt_2 = "POLYGON ((-8224757.546680832 4960523.476563589, -8225269.1002275925 4959296.105368667, -8226993.791361805 4959219.668340384, -8226420.900079966 4961883.087589158, -8224757.546680832 4960523.476563589))"
poly_1 = RGeo::Geos.factory(:srid => 3857).parse_wkt(wkt_1)
poly_2 = RGeo::Geos.factory(:srid => 3857).parse_wkt(wkt_2)
Run Code Online (Sandbox Code Playgroud)

当我们检查它们之间的交点时,它返回一条线,正如预期的几何图形仅共享一个边界:

poly_1.intersection poly_2
=> #<RGeo::Geos::CAPILineStringImpl:0x3fc0249af168 "LINESTRING (-8224757.546680832 4960523.476563589, -8225598.074380083 4961210.51680879)">
Run Code Online (Sandbox Code Playgroud)

但是,在运行以下检查时,我们得到了与预期相反的结果:

poly_1.overlaps? poly_2
=> true
poly_1.touches? poly_2
=> false
Run Code Online (Sandbox Code Playgroud)

示例 2:

我们取两个合法重叠的多边形:

wkt_3 = "POLYGON ((-8243237.0 4970203.0, -8243237.0 4968735.0, -8242123.0 …
Run Code Online (Sandbox Code Playgroud)

ruby geometry geospatial rgeo

4
推荐指数
1
解决办法
1076
查看次数

RGeo:proj4不支持错误?

我是新手使用地理空间数据并正在使用Rails RGeo gem.我在rails控制台中收到以下错误:

> geo_shape = ES_Zone::FACTORY.parse_wkt
RGeo::Error::UnsupportedOperation: Proj4 is not supported because the proj4 library was not found at install time.
Run Code Online (Sandbox Code Playgroud)

当我测试是否支持proj4时,它可以预测会返回为假.

> RGeo::CoordSys::Proj4.supported?
=> false 
Run Code Online (Sandbox Code Playgroud)

我用Google搜索了错误消息,但我找不到任何有关此特定问题的资源.有任何想法吗?

ruby-on-rails rgeo

3
推荐指数
1
解决办法
1556
查看次数

多边形 rgeo 中的点

我需要知道一个点是否在多边形中,在我的 rails 应用程序中,以便我想使用 rgeo gem。

要安装这个 geme,我按照rgeo git上的说明进行操作

然后我确定 GEOS 和 Proj4 已正确安装。

在此处输入图片说明

我还添加了这个 gem 'ffi-geos',没有特别的原因,只是按照 rgeo doc

最后我在 rails 控制台上进行了测试以检查是否正常工作

  1. poly_text = "POLYGON ..." (很多点,我知道第一点和最后一点是一样的,否则我认为这不起作用,因为需要是一个封闭的多边形)
  2. factory = RGeo::Cartesian::Factory (我使用笛卡尔工厂,因为根据我的调查,如果我使用球形工厂,这将不起作用)
  3. poly = factory.new().parse_wkt(poly_text)
  4. point1 = factory.new().parse_wkt("POINT (0 0)") (这个点不属于多边形)
  5. poly.within?(point1)
  6. 结果:RGeo::Error::UnsupportedOperation:方法几何#contains?没有定义的。来自 (irb):26

在这里你可以看到输出: 在此处输入图片说明

更多信息:rails version 5.1.2 ide c9 os ubuntu

如果有人有解决方案,提前致谢,我也愿意使用另一个 gem,或者其他什么,我的目标是解决我的点/多边形问题。

ruby ruby-on-rails geos rgeo

3
推荐指数
1
解决办法
2493
查看次数

RStudio 图形设备对于 Mac 上的空间对象来说非常慢

我最近买了一台新的 MacBook Pro,但遇到了一些与 R 图形相关的问题。在绘制 sf 对象时,R 的运行速度非常慢。我发现这个问题已有几年历史了(此处: https: //github.com/rstudio/rstudio/issues/3866),但从未提出任何解决方案。作为参考,RStudioGD绘制对象的速度比它慢 300 倍以上pdf,这让我抓狂。从上面的链接分享可重现的示例(尽管系统时间数字是我的):

<<================= 从上面的链接复制:========================== =>>

我想绘制此处找到的缅甸形状文件:

https://gadm.org/download_country_v3.html

library(rgdal)
library(sp)
tdir = tempdir()

get_poly = function() {
  tmp = tempfile(tmpdir = tdir)
  download.file(
    'https://biogeo.ucdavis.edu/data/gadm3.6/shp/gadm36_MMR_shp.zip',
    tmp
  )
  
  unzip(tmp, exdir = tdir)
  
  readOGR(tdir, 'gadm36_MMR_0', stringsAsFactors = FALSE)
}
Run Code Online (Sandbox Code Playgroud)

使用 RStudioGD 绘制此图比绘制 pdf 慢得多:

mmr = get_poly()
system.time(plot(mmr))
#    user  system elapsed 
# 128.162   0.510 129.271 
unlink(tdir, recursive = TRUE)
Run Code Online (Sandbox Code Playgroud)

重新启动 R 以清除缓存/开销并再次运行:

mmr = get_poly()
tpdf = tempfile(tmpdir …
Run Code Online (Sandbox Code Playgroud)

graphics r spatial rgeo r-sf

3
推荐指数
1
解决办法
1223
查看次数

RGeo:灯具中的空间数据

我有一个包含位置属性的模型,由 RGeo::Cartesian::Point 对象表示,并作为空间数据存储在我的数据库中。

为了运行测试,我需要通过夹具创建此类模型的一些示例。

我尝试了几种不同的语法来初始化 erb YAML 中的位置属性,但都没有奏效。

我怎样才能做到这一点?

ruby-on-rails rgeo

2
推荐指数
1
解决办法
205
查看次数

RGeo:将多边形投影到具有不同SRID的Google地图上

我有一个代表学区的多边形,我从NYC Open Data导入.我相信坐标是在epsg投影2263 - nad83/new york long island

我无法将坐标转换为Google地图可用的格式.

这是我从原始shapefile导入多边形的代码:

proj4 = "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"
factory = RGeo::Geographic.projected_factory(:projection_proj4 => proj4, :projection_srid => 2263)

RGeo::Shapefile::Reader.open("/Users/dmanaster1/flatiron_school/nycdata/db/source/ES_Zones_2013-2014.shp", :factory => factory.projection_factory) do |file|
  file.each do |record|
    school_zone = ES_Zone.new
    ...
    school_zone.geometry = record.geometry
    school_zone.save
  end
  file.rewind
end
Run Code Online (Sandbox Code Playgroud)

在我的模型中:

class ES_Zone < ActiveRecord::Base
  proj4 = "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"
  FACTORY = RGeo::Geographic.projected_factory(:projection_proj4 => proj4, :projection_srid => 2263) …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails geospatial rgeo

2
推荐指数
1
解决办法
1618
查看次数

activerecord_postgis_adapter:nil的未定义方法`point':NilClass

问题

90%肯定这是我的设置错误,但我不能做self.factory并试图访问lonlat给我一个例外"未定义的方法'点'为nil:NilClass"

我可以

设置lonlat使用:

mfactory = RGeo::ActiveRecord::SpatialFactoryStore.instance.factory(:geo_type => 'point')
self.lonlat = mfactory.point(long, lat)
self.save
Run Code Online (Sandbox Code Playgroud)

这给了我像0101000020E610000061C3D32B65965DC03657CD7344F64040数据库中的值.

我不能用:

self.lonlat = "POINT(#{long},#{lat})"
self.save
Run Code Online (Sandbox Code Playgroud)

问题

我是否需要在模型中设置特定的内容?

ruby postgis ruby-on-rails geos rgeo

2
推荐指数
1
解决办法
1198
查看次数

标签 统计

rgeo ×7

ruby-on-rails ×5

ruby ×3

geos ×2

geospatial ×2

geometry ×1

graphics ×1

postgis ×1

r ×1

r-sf ×1

spatial ×1