簡體   English   中英

處理每個標記的展開圖

[英]Processing unfolding maps for each marker

我想為展開地圖上的每個標記添加一個圖像

已經嘗試使用 Buffer 但我不確定我現在應該做什么。

我的主課

import de.fhpotsdam.unfolding.*;
import de.fhpotsdam.unfolding.geo.*;
import de.fhpotsdam.unfolding.utils.*;
import de.fhpotsdam.unfolding.marker.*;

UnfoldingMap map;


import java.util.Map;    // import java hashmaps

// declare country hashmaps
// key // value
HashMap<String, Country> countries = new HashMap<String, Country>();
//PGraphics buffer;
int countryNumber;
Button country;
public void setup() {
  size(800, 600, P2D);
  smooth();  

  //buffer = createGraphics(800, 600);
  map = new UnfoldingMap(this);
  map.setTweening(true);
  map.zoomToLevel(3);

  MapUtils.createDefaultEventDispatcher(this, map);

  String[] lines = loadStrings("test.csv");  //read file and save lines in a string array

  countryNumber = lines.length; // how many lines
  println(countryNumber);

  for (int i=0; i<countryNumber; i++) { //all csv lines

    String line = lines[i];   /// get data from line. Ex: "Portugal,10,91"

    String[] elements = split(line, ","); //separate line by ','

    String name = elements[0]; // get country name
    float lat = parseInt(elements[20]); // lat
    float lon = parseInt(elements[21]); // lon
    PImage flagIcon;

    flagIcon = loadImage(elements[22]); //get image flag name

    Country P = new Country(name, lat, lon, flagIcon); 


    Location mapMarker = new Location(lat,lon);
    // Create point markers for locations
    SimplePointMarker eachMapMarker = new 
    SimplePointMarker(mapMarker);

    // Add markers to the map
    map.addMarkers(eachMapMarker);
    paises.put(nome, P );
  }
}



public void draw() {

  background(255);

  map.draw();    // draw map
  //image(buffer, 200, 50);
  for (Map.Entry p : Countries.entrySet() ) {    // get countries hashmap
    Country country = (Country) p.getValue();
    country.drawInfo();
    country.drawCoor();
    country.drawIcon();
  }
}

我的國家課堂

//my country class

class Country { 

  String name;
  float lat;
  float lon;
  int posX, posY;
  PImage flagIcon;

  Pais (String n, float la, float lo, PImage ic) {
    name = n;
    lat = la;
    lon = lo;
    flagIcon = ic;
  }

  void drawIcon() {
    image(flagIcon,lat,lon,16,16);
  }

  void drawInfo() {
    Location mapLocal = new Location(lat, lon);

    ScreenPosition mapPos = map.getScreenPosition(mapLocal);

    float scale = map.getZoom();

    // if pointer is near a country
    boolean onOver = false;
    if (dist(mouseX, mouseY, mapPos.x, mapPos.y)<2*scale) {
      onOver = true;
    }



    if (onOver) {
      noStroke();
      //fill(255,255,255,255);
      //rect(mouseX+18, mouseY-20, 120, 50);
      fill(0);
      text(name + "\nLat: " + lat + "\nLon: " + lon , mouseX+25, mouseY-5);
    }
  }

  void drawCoor() {
   //println(coordinates);

    fill(0);
    text("coordinates: " + mouseX + " " + mouseY, 650,10); 
  }
}

圖像鏈接存儲在我的 CSV 文件中

這就是我得到的,正如我所看到的,我的圖像沒有與我的經緯度同步。 誰能幫我一把?

當您在地圖上繪制國家圖標時,對於 drawIcon() 方法中的 image(PImage image, float x, float y) 函數中 x 和 y 的輸入,您應該使用標記在地圖上的位置而不是緯度和經度屬性。

具體方法稱為AbstractMarker的getScreenPosition(UnfoldingMap map)。 有關詳細信息,請參閱 javadoc。 http://unfoldingmaps.org/javadoc/de/fhpotsdam/unfolding/marker/AbstractMarker.html#getScreenPosition(de.fhpotsdam.unfolding.UnfoldingMap)

其背后的原因是(我認為)使用 map.addMarker 方法將標記添加到地圖,然后與 map.draw() 方法一起渲染,其中經緯度在后台傳輸到它們的屏幕位置.

因為您嘗試在 map.draw() 方法之后在國家標記頂部添加國家圖標,所以您應該嘗試將圖標的位置與標記的屏幕位置相關聯。

    public void draw() {
        background(200);
        map.draw();
        
        for (Marker m: countryMarkers) {
            
            image(countryIcon, (((AbstractMarker) m).getScreenPosition(map).x,
 ((AbstractMarker) m).getScreenPosition(map).y);
        }
    }

如果您使 CountryMarker 類擴展 SimplePointMarker 類(可在展開的地圖庫中使用),它還會幫助代碼看起來更有條理和干凈。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM