2012-01-10 19 views
6

緯度と経度の値をandroid esri arcGISマップポイントに変換する際に問題があります。今私は、緯度と経度の値を持っている緯度と経度をesri arcGISに変換するMapPoint

LocationManager lm; 
String towers; 
double lat; 
double longi; 
TextView txt; 

      lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
      Criteria crit = new Criteria(); 
      towers = lm.getBestProvider(crit, false); 
      Location location = lm.getLastKnownLocation(towers); 

      if(location != null) 
      { 
       lat = location.getLatitude(); 
       longi = location.getLongitude(); 
      } 

:ここではGPSから緯度と経度の値を取得するための私のコードは座標です。これらの値を有効なesri arcGIS MapPointに変換するだけです。誰でも助けてくれますか?

ありがとうございます。

答えて

4

免責事項:私は専門家ではありませんが、助けてみたいと思っています。 :)

ArcGIS Stack Exchangeサイトが追加されました。より多くの情報が常に追加されており、そこに出てくるものと比較して素敵な統合リソースです。

フレームワークの場合は、Android用にGeoToolsをお勧めします。

脇に、QGIS for Androidは参考になるかもしれないMarco Bernasocchiの興味深いプロジェクトです。

希望しているものが見つかりました。

6

ESRI Android APIを使用しているとしますか?その場合は、マップ上にグラフィックスレイヤーを作成します。

myPoint.setX(longi); 
myPoint.setY(lat); 

次いで、グラフィックオブジェクトにmyPointを追加します。次に、ポイント・オブジェクト

com.esri.core.geometry.Point 
Point myPoint = new Point(); 

を作成し、その後のx/yの値がセット。

http://help.arcgis.com/en/arcgismobile/10.0/apis/android/api/index.html

6

はい、それは可能です。しかし、ArcGISでlocationManagerを使用していません。

ArcGISには、LocationListenerのような事前定義済みのメソッドがあります。つまり、OnStatusChangedListenerです。

位置緯度と経度をesri arcGIS MapPointに変換するコードは、次のコードを参照してください。

 mMapView.setOnStatusChangedListener(new OnStatusChangedListener() { 

      /** 
      * 
      */ 
     private static final long serialVersionUID = 1L; 

     public void onStatusChanged(Object source, STATUS status) { 
     if (source == mMapView && status == STATUS.INITIALIZED) { 
     LocationService ls = mMapView.getLocationService(); 
     ls.setAutoPan(false); 
     ls.setLocationListener(new LocationListener() { 

     boolean locationChanged = false; 

     // Zooms to the current location when first GPS fix 
     // arrives. 
     public void onLocationChanged(Location loc) { 
     if (!locationChanged) { 
     locationChanged = true; 
     double locy = loc.getLatitude(); 
     double locx = loc.getLongitude(); 
     Point wgspoint = new Point(locx, locy); 
     Point mapPoint = (Point) GeometryEngine.project(wgspoint, 

     SpatialReference.create(4326), 

     mMapView.getSpatialReference()); 

     Unit mapUnit = mMapView.getSpatialReference().getUnit(); 
     double zoomWidth = Unit.convertUnits(

     SEARCH_RADIUS, Unit.create(LinearUnit.Code.MILE_US), mapUnit); 
     Envelope zoomExtent = new Envelope(mapPoint, zoomWidth, zoomWidth); 

     mMapView.setExtent(zoomExtent); 

     GraphicsLayer gLayer = new GraphicsLayer(); 
     PictureMarkerSymbol symbol = new  
     PictureMarkerSymbol(getResources().getDrawable(R.drawable.twiz_car_red)); 
     Graphic graphic = new Graphic(mapPoint, symbol); 
     //Graphic point=new Graphic(new Point(x, y),new  
     SimpleMarkerSymbol(Color.CYAN,20,STYLE.CIRCLE)); 
     gLayer.addGraphic(graphic); 
     mMapView .addLayer(gLayer); 

     } 
     } 

     public void onProviderDisabled(String arg0) { 

      } 
     public void onProviderEnabled(String arg0) { 
      } 

     public void onStatusChanged(String arg0, int arg1, 
     Bundle arg2) { 

     } 
     }); 
     ls.start(); 

    } 
    } 
}); 
5

は、私は、効率のない主張をしないhere

private Point ToGeographic(Point pnt) 
{ 
    double mercatorX_lon = pnt.getX(); 
    double mercatorY_lat = pnt.getY(); 
    if (Math.abs(mercatorX_lon) < 180 && Math.abs(mercatorY_lat) < 90) 
     return pnt; 

    if ((Math.abs(mercatorX_lon) > 20037508.3427892) || (Math.abs(mercatorY_lat) > 20037508.3427892)) 
     return pnt; 

    double x = mercatorX_lon; 
    double y = mercatorY_lat; 
    double num3 = x/6378137.0; 
    double num4 = num3 * 57.295779513082323; 
    double num5 = Math.floor((double)((num4 + 180.0)/360.0)); 
    double num6 = num4 - (num5 * 360.0); 
    double num7 = 1.5707963267948966 - (2.0 * Math.atan(Math.exp((-1.0 * y)/6378137.0))); 
    mercatorX_lon = num6; 
    mercatorY_lat = num7 * 57.295779513082323; 
    return new Point(mercatorX_lon, mercatorY_lat); 
} 

private Point ToWebMercator(Point pnt) 
{ 
    double mercatorX_lon = pnt.getX(); 
    double mercatorY_lat = pnt.getY(); 
    if ((Math.abs(mercatorX_lon) > 180 || Math.abs(mercatorY_lat) > 90)) 
     return pnt; 

    double num = mercatorX_lon * 0.017453292519943295; 
    double x = 6378137.0 * num; 
    double a = mercatorY_lat * 0.017453292519943295; 

    mercatorX_lon = x; 
    mercatorY_lat = 3189068.5 * Math.log((1.0 + Math.sin(a))/(1.0 - Math.sin(a))); 
    return new Point(mercatorX_lon, mercatorY_lat); 
} 

からいくつかのコードを借りてきましたが、それは、少なくとも出発点です。

+0

本当にsooooooooooooooooooooo素晴らしいです – ROR

0

//点X Yをマッピングする経度と緯度を変換

- (AGSPoint *)agsPointFromLatitude:(double)latitude longitude:(double)longitude 
    { 
     double mercatorX = longitude * 0.017453292519943295 * 6378137.0; 
    double a = latitude * 0.017453292519943295; 
     double mercatorY = 3189068.5 * log((1.0 + sin(a))/(1.0 - sin(a))); 
     AGSPoint *obj = [AGSPoint pointWithX:mercatorX y:mercatorY spatialReference: [AGSSpatialReference wgs84SpatialReference]]; 


      return obj; 
    } 
4

私は、ArcGIS点に位置するポイントの2つのパラメータを変換する機能を作った:

private Point ConvertMyLocationPoint(final double x, final double y) { 
     Point wgspoint = new Point(x, y); 
     Point mapPoint = (Point) GeometryEngine.project(wgspoint, SpatialReference.create(4326), 
       mMapView.getSpatialReference()); 

     return mapPoint;  
    } 
関連する問題