2014-10-06 71 views
6

我在Android應用程序中將Google Maps v1升級到v2。Google Maps v2 Projection.toScreenLocation(...)極其緩慢

而v2很好,等等,但一種方法似乎是我生命中最慢的事情。

Projection proj = map.getProjection(); 
Point point = proj.toScreenLocation(example.m_geopoint); 

toScreenLocation(...)速度太慢,所以應用程序變慢,導致無法使用慢動作。 該方法每幀可能更新100次,但在Google Maps v1上效果非常好。

當我在Android的控制檯檢查我看到這一點:

10-06 13:53:04.460: D/dalvikvm(4889): GC_EXPLICIT freed 251K, 14% free 14622K/16839K, paused 3ms+5ms 
10-06 13:53:05.859: D/dalvikvm(4889): GC_EXPLICIT freed 252K, 14% free 14622K/16839K, paused 2ms+5ms 
10-06 13:53:07.222: D/dalvikvm(4889): GC_EXPLICIT freed 251K, 14% free 14622K/16839K, paused 3ms+6ms 
... 

這個消息出來所有的時間,而該方法被調用。

和V2和V1之間的區別是:

pointOut = proj.toScreenLocation(geopointIn); // v2 
projection.toPixels(geopointIn, pointOut); // v1 

而且V1似乎更優化的解決方案。有什麼方法可以讓它更快?這是一個性能錯誤?

+0

這是很長一段時間以前,但我目前遇到一些性能問題非常類似於這裏描述的。你有沒有在某個時候找到解決方案? – saberrider 2017-01-18 13:06:32

回答

0

這個答案可能來得太晚了,但是如果有其他人遇到同樣的問題,像我一樣,解決方案可能是使用Java的Graphics2D在自己的服務器上預先渲染圖像(其工作原理與繪圖畫布)並在應用程序內下載它。您必須將地理點轉換爲笛卡爾座標。 內的應用程序,你只需要在圖像的GroundOverlay用的LatLngBounds的位置:https://developers.google.com/maps/documentation/android/groundoverlay#use_latlngbounds_to_position_an_image

,並把它添加到地圖... https://developers.google.com/maps/documentation/android/groundoverlay#change_an_overlay

對於我來說,這種方法的工作原理相當快。至少與Google Maps V1方法一樣快。