2016-09-25 241 views
0

我一直試圖讓SpatialReference在ArcGIS中工作,無論我嘗試什麼,我都無法使其工作,任何幫助表示讚賞。 這裏是我的代碼無法讓SpatialReference正常工作(ArcGIS)

wgs84 = SpatialReference.create(SpatialReference.WKID_WGS84); 


    SimpleMarkerSymbol simpleMarker = new SimpleMarkerSymbol(Color.RED, 5,SimpleMarkerSymbol.STYLE.CIRCLE); 


    Point pointGeometry = new Point(-35.238019 ,149.083404,0,SpatialReference.WKID_WGS84); 
    /* Point pointGeometry = new Point(16596066.8,-3896170.7);*/ 

    Graphic pointGraphic = new Graphic(pointGeometry, simpleMarker); 


    mGraphicsLayer.addGraphic(pointGraphic); 
+1

經度(x),緯度(y)....你有他們的後向 – NaN

+0

ps。你真的應該在這裏尋找答案https://geonet.esri.com/welcome有部分語言和api – NaN

+0

我的問題是,不使用WKID._WGS84並使用任何默認值 – blackhawkfound

回答

0

兩個問題:

  1. 指定正確的順序座標。無論何時指定座標,都需要檢查ArcGIS Runtime文檔(10.2.xQuartz)以查看要使用的訂單。在創建Point時,首先指定X(經度),然後指定Y(緯度)。 149.083404不是有效的緯度,所以我認爲你的意思是經度。切換它們。
  2. 除非文檔中提到「經度」和「緯度」,否則假定地圖座標。這意味着您需要使用GeometryEngine.project將您的要點投影到地圖的空間參考中,除非您調用參數爲longitudelatitude而不是xy的方法。

我不能告訴你是否使用10.2.x或Quartz Beta - 你使用的是每個元素 - 所以這裏是一個使用每個API的工作示例。

石英(假定您已經聲明在佈局XML一個MapView):

public class MainActivity extends AppCompatActivity { 

    private MapView mMapView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mMapView = (MapView) findViewById(R.id.mapView); 
     // ArcGISMap constructor takes latitude (Y) first 
     ArcGISMap map = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 
       -35.238019, 149.083404, 10); 
     mMapView.setMap(map); 

     GraphicsOverlay graphicsLayer= new GraphicsOverlay(); 
     mMapView.getGraphicsOverlays().add(graphicsLayer); 

     SimpleMarkerSymbol simpleMarker = new SimpleMarkerSymbol(
       SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 5); 
     // Point constructor takes X (longitude) first 
     Point pointGeometry = new Point(
       149.083404, -35.238019, 0, SpatialReference.create(4326)); 
     Graphic pointGraphic = new Graphic(pointGeometry, simpleMarker); 
     graphicsLayer.getGraphics().add(pointGraphic); 
    } 

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

    @Override 
    protected void onResume(){ 
     super.onResume(); 
     mMapView.resume(); 
    } 
} 

10.2.x中(假定您已經聲明的佈局XML文件中MapOptions一個MapView):

public class MainActivity extends AppCompatActivity { 

    private MapView mMapView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mMapView = (MapView) findViewById(R.id.mapView); 

     mMapView.setOnStatusChangedListener(new OnStatusChangedListener() { 
      @Override 
      public void onStatusChanged(Object o, STATUS status) { 
       if (STATUS.INITIALIZED.equals(status)) { 
        // MapOptions constructor takes latitude (Y) first 
        MapOptions mapOptions = new MapOptions(
          MapOptions.MapType.TOPO, -35.238019, 149.083404, 10); 
        mMapView.setMapOptions(mapOptions); 

        GraphicsLayer graphicsLayer = new GraphicsLayer(); 
        mMapView.addLayer(graphicsLayer); 

        SimpleMarkerSymbol simpleMarker = new SimpleMarkerSymbol(
          Color.RED, 5, SimpleMarkerSymbol.STYLE.CIRCLE); 
        // GeometryEngine.project takes X (longitude) first 
        Point pointGeometry = GeometryEngine.project(
          149.083404, -35.238019, mMapView.getSpatialReference()); 
        Graphic pointGraphic = new Graphic(pointGeometry, simpleMarker); 
        graphicsLayer.addGraphic(pointGraphic); 
       } 
      } 
     }); 
    } 

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

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