Java 在处理过程中使用map()时出错
我在尝试从CSV文件绘制坐标时遇到了一些问题。我获取纬度和经度,然后使用WebMercator()转换它们,然后获取最小值和最大值,并使用map()函数将它们映射到0到500之间的值。但是,我得到以下错误: 总行数:6606 maxLat=198987.05;minLat=198986.94;maxLong=110837.664;minLong=110836.695 制图前的纬度和经度:198986.27;110840.68 地图()之后的横向和纵向(&L):-6142.857;4112.9033 标准之后的横向和纵向时间():-6.142857;4.112903 调用map(NaN,198986.94198987.05,0500),返回NaN(不是数字) 调用map(NaN,110836.695110837.664,0500),返回NaN(不是数字) 如果您能给我一些关于如何修复错误或改进代码的建议,我将不胜感激。 先谢谢你。 守则本身:Java 在处理过程中使用map()时出错,java,mapping,coordinates,processing,Java,Mapping,Coordinates,Processing,我在尝试从CSV文件绘制坐标时遇到了一些问题。我获取纬度和经度,然后使用WebMercator()转换它们,然后获取最小值和最大值,并使用map()函数将它们映射到0到500之间的值。但是,我得到以下错误: 总行数:6606 maxLat=198987.05;minLat=198986.94;maxLong=110837.664;minLong=110836.695 制图前的纬度和经度:198986.27;110840.68 地图()之后的横向和纵向(&L):-6142.857;4112.903
import java.util.Collections;
Table csvFile;
ArrayList<Float>times = new ArrayList<Float>();
ArrayList<Float>latitude = new ArrayList<Float>();
ArrayList<Float>longitude = new ArrayList<Float>();
ArrayList<Float>lap = new ArrayList<Float>();
ArrayList<Float>latitudeCal = new ArrayList<Float>();
ArrayList<Float>longitudeCal = new ArrayList<Float>();
float maxLat = 0;
float maxLong = 0;
float minLat = 0;
float minLong = 0;
void setup() {
size(600, 800);
csvFile = loadTable("RRData.csv", "header");
int totalRows = csvFile.getRowCount();
println("total number of rows: " + totalRows);
for (TableRow row : csvFile.rows()) {
times.add(row.getFloat("Time"));
latitude.add(normLat(row.getFloat("Latitude")));
longitude.add(normLon(row.getFloat("Longitude")));
}
maxLat = latitude.get(0);
maxLong = longitude.get(0);
maxLat = latitude.get(0);
maxLong = longitude.get(0);
// Finding Max Values
for (int i = 1; i < latitude.size() - 1; i++) {
maxLat = max(maxLat, latitude.get(i));
maxLong = max(maxLong, longitude.get(i));
minLat = min(minLat, latitude.get(i));
minLong = min(minLong, longitude.get(i));
}
println("maxLat = " + maxLat + "; minLat = " + minLat + " ; maxLong = " + maxLong + "; minLong = " + minLong);
println("lat & long before mapping: " + latitude.get(0) + " ; " + longitude.get(0));
println("lat & long after map(): " + map(latitude.get(0), minLat, maxLat, 0, 1000) + " ; " + map(longitude.get(0), minLong, maxLong, 0, 1000)); // map() doesn't worked as intended
//Try Normalising
println("lat & long after norm(): " + norm(latitude.get(0), minLat, maxLat) + " ; " + norm(longitude.get(0), minLong, maxLong));
// Mapping
for (int i = 0; i < latitude.size() - 1; i++) {
float num = latitude.get(i);
float num2 = longitude.get(i);
//println(num);
//println(num2);
latitudeCal.add(map(num, minLat, maxLat, 0, 500));
longitudeCal.add(map(num2, minLong, maxLong, 0, 500));
}
}
float normLon(float lon) {
lon = radians(lon);
float a = (256 / PI) * pow(2, 10);
float b = lon + PI;
return a * b;
}
float normLat(float lat) {
lat = radians(lat);
float a = (256 / PI) * pow(2, 10);
float b = tan(PI / 4 + lat / 2);
float c = PI - log(b);
return a * c;
}
void draw() {
background(51);
for (int i = 0; i < times.size() - 1; i++) {
noFill();
ellipse(latitude.get(i), longitude.get(i), 20, 20);
}
}
import java.util.Collections;
表csvFile;
ArrayListtimes=新的ArrayList();
ArrayListAtude=新的ArrayList();
ArrayListLongitute=新的ArrayList();
ArrayListAP=新的ArrayList();
ArrayListAtudeCal=新的ArrayList();
ArrayListLongitalCal=新的ArrayList();
float maxLat=0;
float maxLong=0;
float minLat=0;
float minLong=0;
无效设置(){
大小(600800);
csvFile=loadTable(“RRData.csv”,“header”);
int totalRows=csvFile.getRowCount();
println(“总行数:“+totalRows”);
对于(TableRow行:csvFile.rows()){
添加(row.getFloat(“时间”);
添加(normLat(row.getFloat(“纬度”));
add(normLon(row.getFloat(“经度”));
}
maxLat=纬度。获取(0);
maxLong=经度。获取(0);
maxLat=纬度。获取(0);
maxLong=经度。获取(0);
//查找最大值
对于(inti=1;i
请将您的问题缩小到一个范围,而不是发布整个项目。哪一行代码的行为与您预期的不同?那一行的值是多少?创建一个新程序,只测试带有硬编码值的那一行,然后编辑您的帖子,以包含我们可以运行的这个小示例。似乎您没有正确初始化minLat和minLong,而是设置了两次maxXXX。i
您可能需要删除-1
normLon代码比它需要的更复杂。例如,256==2^8
因此,a=(1在我看来,输入Csv包含NaN,或者normXXX或弧度操作存在问题,导致NaN