试图遵循步骤https://forge.autodesk.com/blog/add-mapbox-google-maps-forge-viewer,但我不能正确地将模型放在地图上。
我正在运行下面列出的函数:https://learn.microsoft.com/en-us/bingmaps/articles/bing-maps-tile-system
结果表明,该模型体积小,定位不正确。在图像中,红色箭头是模型插入的位置,绿色箭头是应该在的位置。
我做错了什么?
非常感谢
发布于 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。
发布于 2021-08-04 07:55:31
找到了一个调整地图的窍门。它仍然是手动的,但速度相当快:
将TileSystem类复制到https://dotnetfiddle.net/中的必应地图-平铺系统链接(您还需要添加:使用System.Text)
按以下方式更改主
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。
在扩展中,将X,Y位置设置为0,0,并调整Z,使地图低于模型
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,则使用负值
map.position.set(147900, -60520, z);现在它将不是完美的,但它将足够接近完成手动调整值。
https://stackoverflow.com/questions/68122676
复制相似问题