2010-05-08 30 views
2

J'utilise OpenMap et je lis un ShapeFile en utilisant com.bbn.openmap.layer.shape.ShapeFile. La boîte englobante est lue en tant que points lat/longs, par exemple 39.583642, -104.895486. La boîte de délimitation est un point en bas à gauche et un point en haut à droite qui représente où les points sont contenus. Les "points", qui sont nommés "radians" dans OpenMap, sont dans un format différent, qui ressemble à ceci: [0.69086486, -1.8307719, 0.6908546, -1.8307716, 0.6908518, -1.8307717, 0.69085056, -1.8307722, 0.69084936, -1.8307728 0,6908477, -1,8307738, 0,69084626, -1,8307749, 0,69084185, -1,8307792]. Comment puis-je convertir les points comme "0,69086486, -1,8307719" en coordonnées x, y qui sont utilisables dans les graphiques normaux?Comment puis-je dessiner les points dans une polyligne ESRI, étant donné que la zone de délimitation est lat/long et que les "points" sont des radians?

Je crois que tout ce qui est nécessaire ici est une sorte de conversion, parce qu'apporter les points dans Excel et les représenter graphiquement crée une ligne dont la courbe correspond à la courbe de la route à l'emplacement donné. Cependant, les axis ont besoin d'être ajustés manuellement et je n'ai aucune référence sur la façon d'ajuster les axis, car la boîte de délimitation donnée semble être dans un format différent des points donnés.

La description technique ESRI Shapefile ne semble pas le mentionner (http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf).

+0

OpenMap peut effectuer des conversions en degrés pour vous. Vous devez effectuer une exploration en profondeur des classes et méthodes suivantes. * com.bbn.openmap.layer.shape.ESRIPolygonRecord (voir « polygones » variables de type ESRIFloatPoly []) * com.bbn.openmap.layer.shape.ESRIPoly.ESRIFloatPoly * getDecimalDegrees(); (méthode) – Aaron

Répondre

1

0.69086486, -1.8307719 est une latitude et une longitude en radians. D'abord, convertir en degrés (multiplier par (180/pi)), alors vous aurez des unités communes entre votre boîte englobante et vos coordonnées.

Ensuite, vous pouvez tracer tout cela dans un cadre local avec les éléments suivants:

x = (longitude-longitude0)*(6378137*pi/180)*cos(latitude0*pi/180) 
y = (latitude-latitude0)*(6378137*pi/180) 

(latitude0, longitude0) sont les coordonnées d'un point de référence (par exemple le coin inférieur gauche de la zone de délimitation) unités sont degrés pour les angles et mètres pour des distances

Edition - explication: Ceci est une projection orthogonale de la Terre considérée comme une sphère dont le rayon est 6.378.137,0 m (demi -Major axe de l'ellipsoïde WGS84), centrée sur le point (lat0, lon0)

+0

On dirait que vous avez raison sur les radians et les équations. Que diriez-vous d'une explication de ce que font les équations? ... – Aaron

+0

Aaron voudriez-vous partager votre code ColdFusion pour lire le Shapefile? Merci de me trouver sur twitter même nom – cfEngineers

0

En OpenMap, il y a plusieurs façons de convertir de radians en degrés décimaux:

Length.DECIMAL_DEGREE.fromRadians(radVal); 
Math.toDegrees(radVal) // Standard java library 

Pour un tableau, vous pouvez utiliser ProjMath.arrayDegToRad (double [] radvals);

Soyez prudent avec ce dernier, il fait la conversion en place. Donc, si vous prenez un tableau lat/lon d'un OMPoly, faites-en une copie avant de le convertir. Sinon, vous allez gâcher les coordonnées internes de l'OMPoly, qui devrait être en radians.