public Airport[] findKNearestAirport(Airport[] airports, int k, Airport origin) {
		if (airports == null || airports.length == 0 || k <= 0) {
			return null;
		}
		
		PriorityQueue<Airport> queue = new PriorityQueue<Airport>(k, new Comparator<Airport>() {
			@Override
			public int compare(Airport a, Airport b) {
				double da = getRawDistance(a, origin);
				double db = getRawDistance(b, origin);
				
				if (da < db) {
					return 1;
				} else if (da > db) {
					return -1;
				} else {
					return 0;
				}
			}
		});
		
		for (Airport airport : airports) {
			queue.offer(airport);
			if (queue.size() > k) {
				queue.poll();
			}
		}
		
		Airport[] res = new Airport[k];
		for (int i = 0; i < k; i++) {
			res[i] = queue.poll();
		}
		
		return res;
	}