osm-focus/src/dk/network42/osmfocus/OsmNode.java

87 lines
3.0 KiB
Java

package dk.network42.osmfocus;
import android.graphics.Canvas;
public class OsmNode extends OsmElement {
private static final String TAG = "OsmNode";
int mLon, mLat; // OSM geopoint, WGS84 times 1e7
float mLatMerc;
public boolean mIsWayNode = false;
OsmNode(final int lon, final int lat) {
super(0, 0);
mLon = lon;
mLat = lat;
mLatMerc = (float) GeoMath.latToMercator(getLat());
}
OsmNode(final long osmId, final long osmVersion, final int lon, final int lat) {
super(osmId, osmVersion);
mLon = lon;
mLat = lat;
mLatMerc = (float) GeoMath.latToMercator(getLat());
}
public double getLon() { return ((double)mLon)/1e7; }
public double getLat() { return ((double)mLat)/1e7; }
public double getLatMerc() { return mLatMerc; }
public int getOsmLon() { return mLon; }
public int getOsmLat() { return mLat; }
// For screen mapping when db translation is not active
public float getX() { return ((float) getLon())*MapView.prescale; }
public float getY() { return mLatMerc*MapView.prescale; }
// For use when db translation is active
public float getX(OsmDB db) { return ((float) ((getLon()-db.mX)*MapView.prescale)); }
public float getY(OsmDB db) { return ((float) ((mLatMerc-db.mYmerc)*MapView.prescale)); }
//static double getLatMercator(final double lat) { return Math.toDegrees(Math.log(Math.tan(Math.PI/4+Math.toRadians(lat)/2))); }
//public double getLambertLat() {
// return ((double)mLat)/1e7;
//}
//public double getLambertLon() { return ((double)mLon)/1e7; }
// Lambert projection
/*public NodePoint convertToXY(String lat, String lon){
float phi = (float) GPS.radians(Float.parseFloat(lat));
float lambda = (float) GPS.radians(Float.parseFloat(lon));
float q = (float) (2*Math.sin( ((Math.PI/2) - phi)/2 ));
float x = (float)(q*Math.sin(lambda));
float y = (float)(q*Math.cos(lambda));
return new NodePoint(x,y);
}*/
public void draw(Canvas canvas, OsmDB db, PaintConfig pcfg) {
if (! mIsWayNode) {
if (pcfg.getLayer()==1) {
//Log.d(TAG, "Node: xy=("+getX(db)+","+getY(db)+
// "), latlon=("+getLat()+","+getLon()+
// "), DBorig="+db.mX+","+db.mYmerc+
// ", scale="+pcfg.scale);
////canvas.drawCircle(getX(db), getY(db), 2.0f/pcfg.scale, pcfg.focus);
//canvas.drawPoint(getX(db), getY(db), pcfg.focus);
}
}
}
public void highlight(Canvas canvas, OsmDB db, PaintConfig pcfg, int style)
{
// Log.d(TAG, "NodeHighlight: xy=("+getX(db)+","+getY(db)+
// "), latlon=("+getLat()+","+getLon()+
// "), DBorig="+db.mX+","+db.mYmerc);
canvas.drawCircle(getX(db), getY(db), 5.0f*pcfg.densityScale/pcfg.mScale, pcfg.focus[style]);
}
public double distTo(double lon, double lat_merc) {
return Math.hypot(getLon()-lon, getLatMerc()-lat_merc);
}
public double angleTo(double lon, double lat_merc) {
return Math.atan2(getLatMerc()-lat_merc, getLon()-lon);
}
}