87 lines
3.0 KiB
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);
|
|
}
|
|
}
|