- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个代表学区的多边形,它是我从 NYC Open Data 导入的.我相信坐标在 epsg projection 2263 - nad83 / new york long island 中
我无法将坐标转换为 Google map 可用的格式。
这是我从原始 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
在我的模型中:
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)
set_rgeo_factory_for_column(:geometry, FACTORY.projection_factory)
end
在我的 Controller 中:
def index
polygons = format_polygon(ES_Zone.first)
gon.polygons = JSON.parse(polygons.to_json)
end
private
def format_polygon(zone)
array = Array.new
zone.geometry.each do |polygon|
polygon.exterior_ring.points.each do |point|
x = point.x
y = point.y
array << { "lng" => x, "lat" => y }
end
end
[array]
end
我知道我遗漏了一些关于如何转换坐标的信息,但我不确定从这里到哪里去,即使在阅读 Daniel Azuma 的 excellent guide 之后也是如此.有人知道怎么做吗?
最佳答案
我通常不使用 rgeo 转换数据,但我了解坐标系,所以 dazuma 的指南对我来说非常清楚。
您首先定义 WGS84(它将在 Google map 上呈现得很好,它使用的坐标系略有不同,但它们映射完美)
wgs84_proj4 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'
wgs84_factory = RGeo::Geographic.spherical_factory(:srid => 4326, :proj4 => wgs84_proj4)
现在您有一个可以创建 WGS84 点/几何的工厂。现在使用该工厂来转换您的几何图形。
假设您已经使用您指定的工厂为您的 ES_Zone
创建了几何体,那么您可以简单地做
some_es_zone_wgs84 = RGeo::Feature.cast(some_es_zone, :factory => wgs84_factory, :project => true)
但是如果您从数据库中获取它们,工厂将具有正确的 srid,但没有正确的 proj4
信息来执行此转换。但是,这很容易修复:
some_es_zone = ES_Zone.find(params[:id])
some_es_zone_2263 = RGeo::Feature.cast(some_es_zone, :factory => 2263_factory, :project => false)
some_es_zone_wgs84 = RGeo::Feature.cast(some_es_zone, :factory => wgs84_factory, :project => true)
简而言之:在不投影几何体的情况下使用正确的工厂进行转换,然后将其转换到所需的坐标系和项目。因为我们现在指定了 from 和 to,所以它会起作用。
现在您可以使用 rgeo-geojson gem 将其转换为 geoJson 并将其发送到您的浏览器。
如果您像我一样使用 postgis,我通常只使用 postgis 功能来创建 geoJson,然后将其包含在我的页面中并使用传单呈现。
因此,我将以下方法添加到我的模型中:
def as_geojson
sql = "SELECT ST_asgeojson(ST_Transform(ST_SetSRID(geom,31370),4326)) FROM samples where id = #{self.id};"
cursor = Sample.connection.execute(sql)
cursor.first["st_asgeojson"]
end
请注意,我将我的几何图形从比利时坐标系 (EPRS 31370) 转换为 wgs84 (EPRS 4326)并一次性将其转换为 geojson。 postgis 也知道所有的投影,并且它们得到维护,所以我不必摆弄 proj4
定义。
我使用的另一种选择(取决于空间数据量)是我使用地理服务器来提供空间数据。因此,当我使用 rails 来存储和维护它时,我使用 geoserver 来有效地托管和查询它(以及前端的 openlayers)。但它确实涉及设置一个额外的组件。所以这取决于您的需求。
关于ruby-on-rails - RGeo:将多边形投影到具有不同 SRID 的谷歌地图上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918272/
每当我设置 Border.Effect属性的投影效果 控件中包含的每个控件都有一个投影。 有没有办法将阴影设置到边框而不是边框中包含的每个控件? 这是我的代码的一个简短示例:
我正在尝试创建一个带有阴影的对象。我相信您需要 CSS3 来执行此操作,到目前为止我已经有了类似的东西。 div { width:300px; height:100px; background
我希望能够为我的 drawables 文件夹中的矢量添加阴影。目前,当我将具有阴影的 svg 导入 Android Studio 时,转换为 xml 会删除阴影。 我将如何在 Android Stud
使用 NHibernate 2.1,我试图将一个实体及其子集合投影到 DTO 中。我的实体看起来像这样.. public class Application { public int Id {ge
我有问题还是好,我不知道如何将x,y,z值的3d点转换为2d点, 我必须绘制投影,其中的点确实有x,y,z值,但是我不知道如何将它们转换为2d,所以我可以将它们移动到我的轴上。 我一直在寻找Wiki和
我有域类位置 public abstract class BaseEntity where T: struct { public virtual T Id { get; set
我有一个使用 Android Material 图标作为背景的 ImageView 。我尝试添加标高以创建投影效果,但仅显示图标。是否可以将标高添加到矢量资源可绘制对象中? 矢量代码:
我正在尝试连接并以逗号分隔(或空格)列表并将其投影。我在下面有一些示例代码。 public class Friend { public string Name { get; set; } }
是否有任何库可以轻松地允许 Java bean 投影? 我有一个按照 Javabean 约定用 getter 和 setter 编写的 bean,并且在运行时在不同的地方我想要获取一个完全填充的 be
我可以成功地做到: point.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:
我对 OpenLayers 3 有点问题。我有以下脚本: var map = new ol.Map({ view : new ol.View({ center : [5.611
我正在尝试向 ImageView 添加阴影。 Stackoverflow 的另一个答案似乎是使用 Canvas 和位图等,比需要的复杂得多。 在 iOS 上我会做这样的事情: myImageView.
我有一个 JPanel 元素,我想给它添加一个阴影,我怎样才能给元素添加一个漂亮的褪色阴影?我需要使用外部库还是可以使用内置的东西? 例子: 最佳答案 所以我查看了 swingx它扩展了 JPanel
如何使用 MongoDB 查询预测作者的名字 { name: "Wings Of Fire", author: { first: "Abdul", last: "Kalam" } }
我有一个集合“帐户”,其中包含类似于此结构的文档: { "email" : "john.doe@acme.com", "groups" : [ {
我试图弄清楚如何使用枚举列表(@ElementCollection)对实体进行 DTO 投影。不幸的是,缺少 QueryDsl 文档,在这里我只能找到版本 3 的结果 不是 适用于版本 4。 @Ent
我想要悬停 div 时出现的箭头 here也投下影子。箭头是从 CSS 绘制的: .arrow { position:absolute; margin-top:-50px; left:80px; bo
如何使用 QueryOver 和 AliasToBean 将枚举值转换为字符串值?我有以下但在尝试转换 Enum 时出错: SomeDTO someDTO = null;
我有这个外部 GeoJSON 文件: {"type": "FeatureCollection", "features": [ {"type":"Feature", "id":382, "propert
我对 Hibernate 的预测和标准有点困惑。何时使用预测以及何时使用标准? 最佳答案 它们并不相互排斥,您可以同时使用两者。预测通常在某些标准的背景下使用。 简单地说,Hibernate Proj
我是一名优秀的程序员,十分优秀!