2014-11-07 4 views
1

Я пытаюсь показать Polygon под Nutiteq должным образом Bounding Box, но я получаю что-то вроде этого. Sight of a field wrong boundedSetBoundings под Nutiteq не работает должным образом

и то, что я хочу

Sight of that field properly bounded

Мой код следующий

private void setClipBounds(Intent intent, MapView mapView) { 
    ArrayList<ArrayList<String>> limits = null; 
    if (intent.hasExtra(Constants._LIMITS)) { 
     limits = (ArrayList<ArrayList<String>>) intent.getSerializableExtra(Constants._LIMITS); 


     ArrayList<String> downLeft = limits.get(0); 
     ArrayList<String> upRight = limits.get(1); 

     double left    = Double.parseDouble((String)(downLeft.get(0))); 
     double top     = Double.parseDouble((String)(upRight.get(1))); 
     double right    = Double.parseDouble((String)(upRight.get(0))); 
     double bottom    = Double.parseDouble((String)(downLeft.get(1))); 

     MapPos downLeftPos   = mapView.worldToScreen(left, bottom, 0); 
     MapPos rightUpPos   = mapView.worldToScreen(right, top, 0);    

     Rect rect     = new Rect(Math.round((float)downLeftPos.x), Math.round((float)rightUpPos.y), Math.round((float)rightUpPos.x), Math.round((float)downLeftPos.y)); 


     Bounds bounds    = new Bounds(left, top, right, bottom); 

     mapView.setBoundingBox(bounds, rect, false, false, false, 1000); 
     //mapView.setBoundingBox(bounds, false); 

    } else { 
     Log.i("TAG", "WmsMapActivity::setClipBounds:: NO limits!!!"); 
    } 

} 

Может кто-нибудь сказать мне, что я делаю не так?

Заранее спасибо.

+0

Возможно, @JaakL может лучше объяснить, как работает 'screenToWorld (...)', потому что я вызываю 'screenToWorld (...)' с 'MapPos' [11.396879,48.264547] и [11.400575,48.268546] и I get [x = -80971.58271822847, y = 289300.71649931633, z = 0.0] и [x = -80971.58252842074, y = 289300.71632176096, z = 0.0] в качестве ассоциированных экранных координат. Я тестирую свое приложение в Nexus 9, поэтому мне нужно получить координаты в Range [0x0,1535x2047], потому что размер экрана для этого устройства составляет 1536 * 2048. –

+0

Конечно, если бы у меня не было ни панели действий, ни панели управления, с ними эффективные координаты MapView составляют 1536 * 1790. –

+0

Предполагая, что вы используете проекцию EPSG3857, это ожидаемый результат - вы конвертируете координаты экрана в координаты карты. В случае EPSG3857 они находятся в диапазоне [-20037508.34, 20037508.34] – MarkT

ответ

1

Вы используете неправильный аргумент rect - в вашем случае он должен, вероятно, содержать ваши размеры вида (вам не нужно вызывать worldToScreen, worldToScreen вычисляет координаты экрана на основе текущих параметров камеры).

+0

Привет @MarkT, я хочу, чтобы он соответствовал этому значению (что я получаю как параметр с именем 'Limits'). Я подумал, что лучшей стратегией для этого является исправление 'upRight' в правом верхнем углу экрана и' downLeft' в левом нижнем углу экрана, а 'Nutiteq' уже имеет эти 2 метода для преобразования координат карты на экран -координаты и координаты экрана в координаты карты. Как бы вы предположили, что я делаю это без этих двух методов? Спасибо. –

+0

Хотя я не понимаю вашего объяснения, я думаю, вам нужно просто заменить 2 строки в вашем коде следующими строками: MapPos downLeftPos = new MapPos (слева, внизу, 0); MapPos rightUpPos = новый MapPos (правый, верхний, 0); – MarkT

+0

downLeftPos и ​​upRightPos являются позициями экрана, если бы я сделал, что вы предлагаете, что мне делать? Rect наследует от Graphics и ссылается в моем случае на экран устройства, и это то, что требуется Calling of setBoundingBox, Коробка координат карты и поле координат экрана. Диапазон для экранных координат: [0,0] - [1535,1789] –

Смежные вопросы