我有一个Sketchup三维模型,是地理位置。我可以得到模型的地理位置如下:-
latitude = Sketchup.active_model.attribute_dictionaries["GeoReference"]["Latitude"]
longitude = Sketchup.active_model.attribute_dictionaries["GeoReference"]["Longitude"]现在我想在3D地球仪上渲染这个模型。所以我需要三维模型的位置边界。
基本上,我需要在2d地图上的模型包围框。
现在,我正在从模型的角(8个角)中提取同样的内容。
// This will return left-front-bottom corner.
lowerCorner = Sketchup.active_model.bounds.corner(0)
// This will return right-back-top corner.
upperCorner = Skectup.active_model.bounds.corner(6)但它返回简单的几何点,以米为单位,以英寸为单位,取决于模型。
例如,我在sketchup中上传了这模型。下面是 getting 、lowerCorner和upperCorner的值,我通过对上述模型使用上面的代码得到这些值。
geoLocation : 25.141407985864, 55.18563969191 //lat,long
lowerCorner : (-9483.01089", -6412.376053", -162.609524") // In inches
upperCorner : (-9483.01089", 6479.387909", 12882.651999") // In inches所以我的第一个问题是我做的对不对?第二个问题是,如果是的话,第一个问题是如何以lat长格式获得lowerCorner和upperCorner的值。
发布于 2016-07-01 18:02:10
但它返回简单的几何点,以米为单位,以英寸为单位,取决于模型。
Geom::BoundingBox.corner返回一个Geom::Point3d。它的x,y和z成员是一个Length。这总是返回SketchUp的内部值,即英寸。
但是,当您使用Length.to_s时,它将使用当前模型的单元设置,并将值格式化为该值。当您调用Geom::Point3d.to_s时,它将使用Length.to_s。另一方面,如果您调用Geom::Point3d.inspect,它将打印内部单位(英寸)而不进行格式化。
我建议您使用geo-location:Sketchup::Model.georeferenced?的API方法,而不是像这样直接访问模型的属性。
通过它的声音,您可能会发现Sketchup::Model.point_to_latlong有用。
示例-我将一个SketchUp模型定位到挪威特隆赫姆的城镇广场(地理位置:东经63°25‘47“北纬10°23’36”):
model = Sketchup.active_model
bounds = model.bounds
# Get the base of the boundingbox. No need to get the top - as the
# result doesn't contain altiture information.
(0..3).each { |i|
pt = bounds.corner(i)
latlong = model.point_to_latlong(pt)
latitude = latlong.x.to_f
longitude = latlong.y.to_f
puts "#{pt.inspect} => #{longitude}, #{latitude}"
}

https://stackoverflow.com/questions/38121973
复制相似问题