* [gentoo-commits] dev/xmw:master commit in: games-util/atlas/, games-util/atlas/files/
@ 2014-07-15 12:13 Michael Weber
0 siblings, 0 replies; 2+ messages in thread
From: Michael Weber @ 2014-07-15 12:13 UTC (permalink / raw
To: gentoo-commits
commit: a083db964ee10d0981656e099285c6688fd14de7
Author: Michael Weber <michael <AT> xmw <DOT> de>
AuthorDate: Tue Jul 15 12:12:45 2014 +0000
Commit: Michael Weber <xmw <AT> gentoo <DOT> org>
CommitDate: Tue Jul 15 12:12:45 2014 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=dev/xmw.git;a=commit;h=a083db96
Add patches for version 3 scenery (version 1000)
Package-Manager: portage-2.2.10
Manifest-Sign-Key:
---
games-util/atlas/ChangeLog | 4 +
games-util/atlas/atlas-0.4_p20140519.ebuild | 1 +
.../atlas/files/atlas-0.4_p20140519-fg3.patch | 319 +++++++++++++++++++++
3 files changed, 324 insertions(+)
diff --git a/games-util/atlas/ChangeLog b/games-util/atlas/ChangeLog
index 10e28a5..4b0b033 100644
--- a/games-util/atlas/ChangeLog
+++ b/games-util/atlas/ChangeLog
@@ -1,3 +1,7 @@
+ 15 Jul 2014; Michael Weber <xmw@gentoo.org>
+ +files/atlas-0.4_p20140519-fg3.patch, atlas-0.4_p20140519.ebuild:
+ Add patches for version 3 scenery (version 1000)
+
*atlas-0.4_p20140519 (12 Jul 2014)
*atlas-9999 (12 Jul 2014)
diff --git a/games-util/atlas/atlas-0.4_p20140519.ebuild b/games-util/atlas/atlas-0.4_p20140519.ebuild
index e432a68..13b656e 100644
--- a/games-util/atlas/atlas-0.4_p20140519.ebuild
+++ b/games-util/atlas/atlas-0.4_p20140519.ebuild
@@ -33,6 +33,7 @@ RDEPEND="${COMMON_DEPEND}
"
src_prepare() {
+ epatch "${FILESDIR}"/${P}-fg3.patch
eautoreconf
}
diff --git a/games-util/atlas/files/atlas-0.4_p20140519-fg3.patch b/games-util/atlas/files/atlas-0.4_p20140519-fg3.patch
new file mode 100644
index 0000000..5aa6665
--- /dev/null
+++ b/games-util/atlas/files/atlas-0.4_p20140519-fg3.patch
@@ -0,0 +1,319 @@
+Based on a patch by Frederik Tilmann, posted at http://forum.flightgear.org/viewtopic.php?f=31&t=21972#p202275
+
+--- atlas-0.4_p20140519/src/NavData.hxx
++++ atlas-0.4_p20140519/src/NavData.hxx
+@@ -219,6 +219,7 @@
+ void _loadAirways640(const gzFile& arp);
+ void _checkEnd(AwyLabel &end, bool isLow);
+ void _loadAirports810(const gzFile& arp);
++ void _loadAirports1000(const gzFile& arp);
+
+ Searcher *_searcher;
+
+--- atlas-0.4_p20140519/src/NavData.cxx
++++ atlas-0.4_p20140519/src/NavData.cxx
+@@ -1397,3 +1397,304 @@
+ _frustumCullers[AIRPORTS]->culler().addObject(ap);
+ }
+ }
++
++
++void NavData::_loadAirports1000(const gzFile& arp)
++{
++ char *line;
++ ARP *ap = NULL;
++
++ while (gzGetLine(arp, &line)) {
++ int lineCode, offset;
++
++ if (strcmp(line, "") == 0) {
++ // Blank line.
++ continue;
++ }
++
++ if (strcmp(line, "99") == 0) {
++ // Last line.
++ break;
++ }
++
++ sscanf(line, "%d%n", &lineCode, &offset);
++ line += offset;
++ switch (lineCode) {
++ case 1:
++ case 16:
++ case 17:
++ {
++ // The presence of a 1/16/17 means that we're starting a
++ // new airport/seaport/heliport, and therefore ending an
++ // old one. Deal with the old airport first.
++ if (ap != NULL) {
++ // Calculate the airport's center in lat, lon.
++ __airportLatLon(ap);
++ // Add it to our airports vector.
++ _airports.push_back(ap);
++ // Add our airport text to the searcher object.
++ _searcher->add(ap);
++ // Add to our culler.
++ _frustumCullers[AIRPORTS]->culler().addObject(ap);
++
++ ap = NULL;
++ }
++
++ // EYE - add seaports and heliports! (Note: the
++ // classification of seaports is iffy - Pearl Harbor
++ // is called an airport, even though it's in the
++ // ocean, and Courchevel is called a seaport, even
++ // though it's on top of a mountain).
++ if (lineCode != 1) {
++ // We only handle airports (16 = seaport, 17 = heliport)
++ break;
++ }
++
++ // Create a new airport record.
++ ap = new ARP;
++
++ float elevation;
++ int controlled;
++ char code[5]; // EYE - safe?
++
++ sscanf(line, "%f %d %*d %s %n",
++ &elevation, &controlled, code, &offset);
++ line += offset;
++
++ ap->elev = elevation * SG_FEET_TO_METER;
++ // FJT: according to 1000 spec this parameter is deprecated - still leave it in
++ ap->controlled = (controlled == 1);
++ ap->id = code;
++ ap->name = line;
++ // This will be set to true if we find a runway with
++ // any kind of runway lighting.
++ ap->lighting = false;
++ // If set to true, then beaconLat and beaconLon
++ // contain the location of the beacon.
++ ap->beacon = false;
++ }
++
++ break;
++ case 100:
++ // 100: runway (i.e. ignore water runway 101, helipad 102)
++ {
++ if (ap == NULL) {
++ // If we're not working on an airport (ie, if this is
++ // a heliport), just continue.
++ break;
++ }
++
++ double lat1, lon1,lat2,lon2,latdif,londif;
++ char rwyid1[4],rwyid2[4]; // EYE - safe?
++ float heading, length, width;
++ int centre_light,edge_light,reil_light,tdz_light;
++ // char *lighting;
++
++ // sscanf(line, "%lf %lf %s %n", &lat, &lon, rwyid, &offset);
++ // skipped parameters: surface type, runway should surface type, smoothness, auto-generate distance signs
++ sscanf(line,"%f %*d %*d %*f %d %d %*d %n",&width,¢re_light,&edge_light,&offset);
++ line += offset;
++ if ( edge_light || centre_light)
++ ap->lighting=true;
++
++ // skipped values: displaced threshold, overrun, runway markings, approach lighting, runway touchdown lighting, runway end identifier light
++ sscanf(line,"%4s %lf %lf %*f %*f %*d %*d %d %d %n",rwyid1,&lat1,&lon1,&tdz_light,&reil_light,&offset);
++ line += offset;
++ if ( tdz_light || reil_light)
++ ap->lighting=true;
++ // skipped values: displaced threshold, overrun, runway markings, approach lighting, runway touchdown lighting, runway end identifier light
++ sscanf(line,"%4s %lf %lf %*f %*f %*d %*d %d %d %n",rwyid2,&lat2,&lon2,&tdz_light,&reil_light,&offset);
++ line += offset;
++ if ( tdz_light || reil_light)
++ ap->lighting=true;
++ // We ignore taxiways and helipads.
++ // if (strcmp(rwyid, "xxx") == 0) {
++ // break;
++ //}
++ //if (strncmp(rwyid, "H", 1) == 0) {
++ // break;
++ //}
++
++ // Strip off trailing x's.
++ int firstX = strcspn(rwyid1, "x");
++ if (firstX > 0) {
++ rwyid1[firstX] = '\0';
++ }
++ assert(strlen(rwyid1) <= 3);
++
++ // Runway!
++ RWY *rwy = new RWY;
++
++ // sscanf(line, "%f %f %*f %*f %f %n",
++ // &heading, &length, &width, &offset);
++ // lighting = line + offset;
++
++ rwy->lat = (lat1+lat2)/2.0;
++ rwy->lon = (lon1+lon2)/2.0;
++ latdif=(lat2-lat1)*SGD_DEGREES_TO_RADIANS*SG_EQUATORIAL_RADIUS_M;
++ londif=(lon2-lon1)*SGD_DEGREES_TO_RADIANS*cos(SGD_DEGREES_TO_RADIANS*rwy->lat)*SG_EQUATORIAL_RADIUS_M;
++ rwy->hdg = float(atan2(londif,latdif)*SGD_RADIANS_TO_DEGREES);
++ //fprintf(stderr,"DEBUG: airport: %lf %lf %lf %lf latdif %lf, londif %lf head %f\n",lat1,lon1,lat2,lon2,latdif,londif,rwy->hdg);
++ rwy->length = sqrt(latdif*latdif+londif*londif);
++ // rwy->length = length * SG_FEET_TO_METER;
++ // rwy->width = width * SG_FEET_TO_METER;
++ rwy->width = width;
++ rwy->id = rwyid1;
++ ap->rwys.push_back(rwy);
++
++ __runwayExtents(rwy, ap->elev);
++ ap->_bounds.extend(&(rwy->_bounds));
++
++ // According to the FAA's "VFR Aeronautical Chart
++ // Symbols", lighting codes on VFR maps refer to
++ // runway lights (not approach lights).
++ //
++ // In apt.dat, visual approach, runway, and approach
++ // lighting is given by a six-digit "number" (which we
++ // treat as a string). We're concerned with digits 2
++ // and 5, which concern the runway itself. If the
++ // value is '1', there is no runway lighting.
++ //
++ // Note that the apt.dat database does not tell us
++ // about lighting limitations, nor whether the
++ // lighting is pilot-controlled.
++ // if ((lighting[1] != '1') || (lighting[4] != '1')) {
++ // ap->lighting = true;
++ // }
++ }
++
++ break;
++ case 18:
++ if (ap != NULL) {
++ // Beacon
++ double lat, lon;
++ int beaconType;
++
++ sscanf(line, "%lf %lf %d", &lat, &lon, &beaconType);
++ if (beaconType != 0) {
++ ap->beacon = true;
++ ap->beaconLat = lat;
++ ap->beaconLon = lon;
++ }
++ }
++ break;
++ case WEATHER: // AWOS, ASOS, ATIS
++ case UNICOM: // Unicom/CTAF (US), radio (UK)
++ case DEL: // Clearance delivery
++ case GND: // Ground
++ case TWR: // Tower
++ case APP: // Approach
++ case DEP: // Departure
++ {
++ // ATC frequencies.
++ //
++ // Here's a sample, from LFPG (Paris Charles De
++ // Gaulle), which is a rather extreme case:
++ //
++ // 50 12712 DE GAULLE ATIS
++ // 53 11810 DE GAULLE TRAFFIC
++ // 53 11955 DE GAULLE TRAFFIC
++ // 53 12160 DE GAULLE GND
++ // 53 12167 DE GAULLE TRAFFIC
++ // 53 12177 DE GAULLE GND
++ // 53 12177 DE GAULLE GND
++ // 53 12180 DE GAULLE GND
++ // 53 12192 DE GAULLE TRAFFIC
++ // 53 12192 DE GAULLE TRAFFIC
++ // 53 12197 DE GAULLE GND
++ // 53 12197 DE GAULLE GND
++ // 54 11865 DE GAULLE TWR
++ // 54 11925 DE GAULLE TWR
++ // 54 12090 DE GAULLE TWR
++ // 54 12360 DE GAULLE TWR
++ // 54 12532 DE GAULLE TWR
++ //
++ // [...]
++ //
++ // There are several important things to note:
++ //
++ // (1) There many be several entries for a given
++ // type. For example, there is only one WEATHER
++ // entry (type code 50), but 10 GND entries
++ // (type code 53).
++ //
++ // (2) There may be several frequencies with the
++ // same name in a given type. For example,
++ // there are 4 GND entries labelled "DE GAULLE
++ // TRAFFIC", and 6 labelled "DE GAULLE GND".
++ // They are not guaranteed to be grouped
++ // together.
++ //
++ // When rendering these, we only print the label
++ // once, and all frequencies with that label are
++ // printed after the label. This makes for a
++ // less cluttered display:
++ //
++ // DE GAULLE TRAFFIC 118.1 119.55 121.675 121.925
++ //
++ // (3) There may be duplicates. For example, '53
++ // 12192 DE GAULLE TRAFFIC' is given twice. The
++ // duplicates should presumably be ignored.
++ //
++ // (4) Frequencies are given as integers, and should
++ // be divided by 100.0 to give the true
++ // frequency in MHz. That is, 11810 is 118.1
++ // MHz. In addition, they are missing a
++ // significant digit: 12192 really means 121.925
++ // MHz, not 121.92 MHz (communications
++ // frequencies have a 25 kHz spacing). So, we
++ // need to correct frequencies with end in the
++ // digits '2' and '7'.
++ //
++ // Internally, we also store the frequencies as
++ // integers, but multiplied by 1000.0, not
++ // 100.0. And we add a final '5' when
++ // necessary. So, we store 12192 as 121925, and
++ // 11810 as 118100.
++
++ // EYE - what should I do about multiple frequencies
++ // of one type? A: Check San Jose (KSJC) - it has 2
++ // CT frequencies, and just lists them. However,
++ // the VFR_Chart_Symbols.pdf file says that it lists
++ // the "primary frequency."
++
++ // Note: Unicom frequencies are written in bold
++ // italics, others in bold. CT seems to be written
++ // slightly larger than the others.
++
++ // Note: Some airports, like Reid-Hillview, have
++ // CTAF and UNICOM. CTAF is written with a circled
++ // C in front, the frequency bold and slightly
++ // enlarged (like CT), UNICOM in bold italics.
++
++ if (ap != NULL) {
++ int freq;
++
++ sscanf(line, "%d %n", &freq, &offset);
++ line += offset;
++
++ FrequencyMap& f = ap->freqs[(ATCCodeType)lineCode];
++ set<int>& freqs = f[line];
++ if ((freq % 10 == 2) || (freq % 10 == 7)) {
++ freqs.insert(freq * 10 + 5);
++ } else {
++ freqs.insert(freq * 10);
++ }
++ }
++ }
++ break;
++ }
++ }
++
++ if (ap != NULL) {
++ // Calculate the airport's center in lat, lon.
++ __airportLatLon(ap);
++ // Add it to our airports vector.
++ _airports.push_back(ap);
++ // Add our airport text to the searcher object.
++ _searcher->add(ap);
++ // Add to our culler.
++ _frustumCullers[AIRPORTS]->culler().addObject(ap);
++ }
++}
++
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [gentoo-commits] dev/xmw:master commit in: games-util/atlas/, games-util/atlas/files/
@ 2014-07-15 12:22 Michael Weber
0 siblings, 0 replies; 2+ messages in thread
From: Michael Weber @ 2014-07-15 12:22 UTC (permalink / raw
To: gentoo-commits
commit: 92f7812c9a0e422206b98aaf9a5a71d1e0f1c966
Author: Michael Weber <michael <AT> xmw <DOT> de>
AuthorDate: Tue Jul 15 12:22:04 2014 +0000
Commit: Michael Weber <xmw <AT> gentoo <DOT> org>
CommitDate: Tue Jul 15 12:22:04 2014 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=dev/xmw.git;a=commit;h=92f7812c
Include complete patch.
Package-Manager: portage-2.2.10
Manifest-Sign-Key:
---
games-util/atlas/ChangeLog | 4 ++++
games-util/atlas/files/atlas-0.4_p20140519-fg3.patch | 11 ++++++++++-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/games-util/atlas/ChangeLog b/games-util/atlas/ChangeLog
index 4b0b033..11763ac 100644
--- a/games-util/atlas/ChangeLog
+++ b/games-util/atlas/ChangeLog
@@ -1,4 +1,8 @@
15 Jul 2014; Michael Weber <xmw@gentoo.org>
+ files/atlas-0.4_p20140519-fg3.patch:
+ Include complete patch.
+
+ 15 Jul 2014; Michael Weber <xmw@gentoo.org>
+files/atlas-0.4_p20140519-fg3.patch, atlas-0.4_p20140519.ebuild:
Add patches for version 3 scenery (version 1000)
diff --git a/games-util/atlas/files/atlas-0.4_p20140519-fg3.patch b/games-util/atlas/files/atlas-0.4_p20140519-fg3.patch
index 5aa6665..e367e22 100644
--- a/games-util/atlas/files/atlas-0.4_p20140519-fg3.patch
+++ b/games-util/atlas/files/atlas-0.4_p20140519-fg3.patch
@@ -12,7 +12,16 @@ Based on a patch by Frederik Tilmann, posted at http://forum.flightgear.org/view
--- atlas-0.4_p20140519/src/NavData.cxx
+++ atlas-0.4_p20140519/src/NavData.cxx
-@@ -1397,3 +1397,304 @@
+@@ -1016,6 +1016,8 @@
+ if (version == 810) {
+ // It looks like we have a valid file.
+ _loadAirports810(arp);
++ } else if ( version == 1000 ) {
++ _loadAirports1000(arp);
+ } else {
+ // EYE - throw an error?
+ fprintf(stderr, "AirportsOverlay::load: \"%s\": unknown version %d.\n",
+@@ -1397,3 +1399,304 @@
_frustumCullers[AIRPORTS]->culler().addObject(ap);
}
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-07-15 12:22 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-15 12:22 [gentoo-commits] dev/xmw:master commit in: games-util/atlas/, games-util/atlas/files/ Michael Weber
-- strict thread matches above, loose matches on Subject: below --
2014-07-15 12:13 Michael Weber
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox