2013-12-04 3 views
1

Я пытаюсь получить очки от карты Arczis toScreenPoint Api, но ее возвращение мне null. Я не знаю, где я делаю ошибку. Пожалуйста, помогите мне.ArcGIS Map toScreenPoint Api возвращает null

Вот моя карта в формате XML:

<com.esri.android.map.MapView 
    android:id="@+id/map" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_above="@id/footer" 
    initExtent="-19332033.11, -3516.27, -1720941.80, 11737211.28" 
    > 
</com.esri.android.map.MapView> 

А вот как я делаю вызов API:

package com.example.demo; 
public class DemoActivity extends Activity implements OnClickListener { 

private Button mSearch; 
private Button mDirection; 

private MapView mMapView; 
private final String map_url ="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mSearch = (Button)findViewById(R.id.search); 
    mDirection = (Button)findViewById(R.id.directions); 
    /* mMapView = new MapView(this);_PARENT, 
      LinearLayout.Layout 
    mMapView.setLayoutParams(new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.MATCHParams.MATCH_PARENT));*/ 
    mMapView = (MapView)findViewById(R.id.map); 

// Add dynamic layer to MapView 
mMapView.addLayer(new ArcGISTiledMapServiceLayer(map_url)); 


GraphicsLayer gLayer = new GraphicsLayer(); 
    // Add empty GraphicsLayer 
mMapView.addLayer(gLayer,1); 
//----------------------- 

// create a simple marker symbol to be used by our graphic 
PictureMarkerSymbol pms = new PictureMarkerSymbol(getResources().getDrawable(R.drawable.ic_launcher)); 

Point p1 = convertToEsri(-1720941.80,11737211.28); 
Point p2 = new Point(-1720941.80,11737211.28); 


System.out.println("screen point :"+mMapView.toScreenPoint(p2)); // returns null ,why? 
gLayer.removeAll(); 
Graphic g = new Graphic(p1, pms); 
gLayer.addGraphic(g); 

    mSearch.setOnClickListener(this); 
    mDirection.setOnClickListener(this); 
} 
/* 
* Returns the ESRI std point for the given x and y 
*/ 
private Point convertToEsri(double x, double y) { 

    Point wgsPoint = new Point(); 
    Rect rect = new Rect(); 
    mMapView.getDrawingRect(rect); 
    wgsPoint.setX(x); 
    wgsPoint.setY(y); 

    Point projectionPoint = (Point) GeometryEngine.project(wgsPoint, SpatialReference.create(4326), mMapView.getSpatialReference()); 
    return projectionPoint; 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    mMapView.pause(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    mMapView.unpause(); 
} 


@Override 
public void onClick(View arg0) { 
    // TODO Auto-generated method stub 

} 
} 

ответ

1

MapView только завершает инициализацию после onCreate возвращается. Это означает, что когда вы звоните toScreenPoint, mMapView еще не имеет достаточной информации для преобразования точки карты в экранную точку или наоборот.

Таким образом, поставить вызов toScreenPoint внутри OnStatusChangedListener:

final Point p2 = new Point(-1720941.80, 11737211.28); 

mMapView.setOnStatusChangedListener(new OnStatusChangedListener() { 

    @Override 
    public void onStatusChanged(Object source, STATUS status) { 
     if (STATUS.INITIALIZED.equals(status)) { 
      System.out.println("screen point :" 
       + mMapView.toScreenPoint(p2));//no longer null 
     } 
    } 

}); 

Обратите внимание, что вам придется объявить p2 в final.

+0

Спасибо Гэри, я попробую его и посмотрю, работает ли он. – anshul

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