首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >映射到Forge Viewer

映射到Forge Viewer
EN

Stack Overflow用户
提问于 2021-06-24 20:55:59
回答 2查看 170关注 0票数 1

试图遵循步骤https://forge.autodesk.com/blog/add-mapbox-google-maps-forge-viewer,但我不能正确地将模型放在地图上。

我正在运行下面列出的函数:https://learn.microsoft.com/en-us/bingmaps/articles/bing-maps-tile-system

  1. LatLongToPixelXY(纬度、经度、7度、外pixelX、out pixelY);
  2. PixelXYToTileXY(pixelX,pixelY,out tileX,out tileY);
  3. 结果pixelX = 16225,pixelY = 12249,tileX = 63,tileY = 47。
  4. 我用以前的值来代替: map.position.set(16225,12249,-45);类MapPlaneNode扩展了MapNode {构造函数(parentNode= null,mapView = null,location = MapNode.ROOT,level = 7,x= 63,y= 47)

结果表明,该模型体积小,定位不正确。在图像中,红色箭头是模型插入的位置,绿色箭头是应该在的位置。

结果图像

我做错了什么?

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-09 01:00:09

模型的定位有点棘手。

在我创建的演示中,我最初使用了world坐标,将根块设置为0级,并使用正确的lat/long坐标utils函数将revit模型定位在正确的位置。不幸的是,精度导致渲染后的问题(线边缘丢失,和一些奇怪的z战斗精度问题).所以,我决定破译这个级别,将地图移到我想要的位置,并在原点0,0,0,0为revit模型的中心。

这使得事情变得更加手动和相当棘手,但它绕过了渲染问题,也限制了用户在世界上的一个小区域,这是我喜欢的。

我建议将根块更改为零,并将模型位置全局偏移量调整为lat/long W84实用程序的值。请参阅博客文章和geo-3回购的坐标部分,以获得更多详细信息:https://github.com/tentone/geo-three#coordinates

票数 0
EN

Stack Overflow用户

发布于 2021-08-04 07:55:31

找到了一个调整地图的窍门。它仍然是手动的,但速度相当快:

  1. 计算Tile X和Y(您已经完成了这个步骤,仅供参考):

将TileSystem类复制到https://dotnetfiddle.net/中的必应地图-平铺系统链接(您还需要添加:使用System.Text)

按以下方式更改主

代码语言:javascript
复制
public static void Main()
{
    int pixelX, pixelY, tileX, tileY;

    TileSystem.LatLongToPixelXY(YOUR LAT HERE, YOUR LONG HERE, 7, out pixelX, out pixelY);
    Console.WriteLine("LatLongToPixelXY: " + pixelX.ToString() + ", " + pixelY.ToString());
    TileSystem.PixelXYToTileXY(pixelX, pixelY, out tileX, out tileY);
    Console.WriteLine("PixelXYToTileXY: " + tileX.ToString() + ", " + tileY.ToString());
}

这将为您提供需要在扩展中替换的TileX和Tile Y。

  1. 计算位置

在扩展中,将X,Y位置设置为0,0,并调整Z,使地图低于模型

代码语言:javascript
复制
map.position.set(0, 0, z);

运行扩展并查看项目在地图上的位置。现在,在Google地图中找到这个着陆点(我发现在这个阶段使用两个街道之间的一个拐角处搜索地图是很有用的,比如: Parker & Wilson路)。当你找到它时,点击谷歌地图上的着陆点来放置一个标记,然后右击标记,然后选择度量程。您将必须测量距离您的目的地的垂直和水平(而不是直接到它)。例如,您将得到dH = 43.5km和dV = 17.8km

这就是神奇的结果:如果你的距离是公里,将这两个数字乘以3400 (如果你的距离是英里,则乘以2113 ),然后用这些值设置位置:

dH * 3400 = 147900

dV * 3400 = 60520

如果您的目的地是E或S,则使用正值。如果您的目的地是W或N,则使用负值

代码语言:javascript
复制
map.position.set(147900, -60520, z);

现在它将不是完美的,但它将足够接近完成手动调整值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68122676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档