【问题标题】:Centering Map around multiple points (annotations) on the map - Titanium mobile围绕地图上的多个点(注释)居中地图 - Titanium mobile
【发布时间】:2012-05-27 19:04:58
【问题描述】:

我在地图上有多个注释 - 尽管用户可能需要滚动才能看到它们。我希望用户能够选择一个按钮以将它们全部放在地图上 - 无需滚动/手动调整大小。

我已经确定了最小值。和最大。我想在地图上显示的点的纬度和经度(例如 minLat、maxLat、minLong、maxLong)。

但是,我正在努力使用特定公式来获取传递给 mapview.setLocation 的经度和纬度属性。关于我可以使用什么公式的任何指针?

【问题讨论】:

    标签: titanium region


    【解决方案1】:

    我为同样的要求做了一个函数。您可以测试并告诉我是否出现错误:

    function setMarkersWithCenter(map,latiarray,longiarray)
    {
        if(latiarray.length != longiarray.length)
            return;
        var total_locations = latiarray.length;
        var minLongi = null, minLati = null, maxLongi = null, maxLati = null;
        var totalLongi = 0.0, totalLati = 0.0;
    
        for(var i = 0; i < total_locations; i++) 
        {
            if(minLati == null || minLati > latiarray[i]) {
                minLati = latiarray[i];
            }
            if(minLongi == null || minLongi > longiarray[i]) {
                minLongi = longiarray[i];
            }
            if(maxLati == null || maxLati < latiarray[i]) {
                maxLati = latiarray[i];
            }
            if(maxLongi == null || maxLongi < longiarray[i]) {
                maxLongi = longiarray[i];
            }
        }
    
        var ltDiff = maxLati-minLati;
        var lgDiff = maxLongi-minLongi;
        var delta = ltDiff>lgDiff ? ltDiff : lgDiff;
        if(total_locations>0 && delta>0)
        {
            map.setLocation({
                animate : true,
                latitude:((maxLati+minLati)/2),
                longitude:((maxLongi+minLongi)/2),
                latitudeDelta:delta,
                longitudeDelta:delta,
            }); 
        }
    
    }
    

    希望对你有帮助。

    【讨论】:

    • @DhairyaVora 你的代码真的很好用。我打算在我的应用程序中使用它。但是,当注释以更大的距离分开时(例如,在不同的大陆上,它会引发错误。类似:“Invalid Region
    • @kernelpanic,这是个好主意。我们可以把这段代码放在 try catch 中,如果发生错误,catch 可以显示第一个注释。顺便问一下,您能告诉我发生此错误的示例位置吗?
    • @DhairyaVora 很高兴您愿意接受一些改进。在我的示例中,当我有两个注释时抛出错误 - 一个在美国亚特兰大,另一个在瑞士
    • 我找不到任何错误。根据您提供的位置,我已采取:33.749,-84.387982 AND 47.051411,8.315826。上面的代码对我来说运行良好。函数将中心点设置在 40.4002055,-38.0360779
    • 这是一个绝妙的问题和绝妙的答案。您是否设法解决/重复 kernelpanic 描述的问题?以目前的形式,它的功能好吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2016-04-30
    相关资源
    最近更新 更多