jlmcgraw / georeferenceplates Goto Github PK
View Code? Open in Web Editor NEWA utility for automatically georeferencing FAA / AeroNav Instrument Approach Plates and Airport Diagrams
License: GNU General Public License v3.0
A utility for automatically georeferencing FAA / AeroNav Instrument Approach Plates and Airport Diagrams
License: GNU General Public License v3.0
Hi again :)
I'm trying to build the geo pdfs for the airports. It seems tough that the DTPP does not download automatically.
Calling /load_dtpp_metadata.pl . 1801
explicitly exits because this:
GeoReferencePlates/load_dtpp_metadata.pl
Lines 88 to 114 in c89f1ca
The commented code seems to download the catalog though so I wonder why is it commented.
After that I try to generate the airport diagram for one airport using
./georeferenceAirportDiagramsViaDb.pl -p -s -aSBP ./dtpp-1801/
Supplied airport ID: SBP
Processing 1 charts
SW-3, SBP, 70000, APD, AIRPORT DIAGRAM, , 00989AD.PDF, , N, , CA
./dtpp-1801/00989AD.PDF
DBD::SQLite::db prepare failed: no such table: airports at ./georeferenceAirportDiagramsViaDb.pl line 557.
DBD::SQLite::db prepare failed: no such table: airports at ./georeferenceAirportDiagramsViaDb.pl line 557.
The file can be found but not locationinfo.db
is empty.
GeoReferencePlates/georeferenceAirportDiagramsViaDb.pl
Lines 137 to 139 in c89f1ca
Where is the locationinfo.db
supposed to come from?
cheers
Hi Jesse,
Sorry to bother you with this, but my regex skills are almost nonexistent, my limited perl experience is 20 years out of date, and I seem to have run into a change in the format of the text in the airport diagram PDF documents that has broken the georeference system.
Both findLatitudeTextBoxes2
and findLongitudeTextBoxes2
are failing to find the required text. My assumption is that the FAA made some slight change in how it encodes the values which has broken the regexs that do the hard work here. I've included the debug output for one chart (it's for KGTU - Georgetown Municipal in Georgetown Texas). Any idea what need to be changed to find the text and the lines?
Here are the lines that should work:
<word xMin="274.595200" yMin="55.246143" xMax="303.050420" yMax="59.457243">97°40.5'W</word>
<word xMin="274.595200" yMin="55.246143" xMax="303.050420" yMax="59.457243">97°40.5'W</word>
<word xMin="328.761700" yMin="201.531943" xMax="357.215829" yMax="205.743043">30°41.0'N</word>
<word xMin="331.713100" yMin="420.710343" xMax="360.167229" yMax="424.921443">30°40.5'N</word>
I'm not sure when the FAA changed things up - I'm just now starting to add charts and plates to my stuff. I greatly appreciate any pointers to get this working.
Best Regards,
Steve
ssokol@charter:~/GeoReferencePlates$ ./georeference_airport_diagrams_via_db.pl -v -c 2201 plates/
Supplied cycle: 2201
Processing 1 charts
SC-3, GTU, 70000, APD, AIRPORT DIAGRAM, , 05724AD.PDF, , N, , TX
plates/05724AD.PDF
Directory: plates/
File: 05724AD
Suffix: .PDF
TargetPdf: plates/05724AD.PDF
OutputPdf: plates/marked-05724AD.pdf
TargetPng: plates/05724AD.png
TargetTif: plates/05724AD.tif
TargetVrt: plates/TX-GTU-05724AD-PDF-AIRPORT-DIAGRAM.vrt
targetStatistics: ./statistics.csv
Airport ID: GTU
Airport Latitude: 30.6788055555556
Airport Longitude: -97.6793888888889
Airport Name: GEORGETOWN MUNI
30 N, 98 W
PDF Mediabox size: 387.36x594
PDF Mediabox center: 193.68x297
PDF X/Y Ratio: 0.652121212121212
plates/05724AD.png already exists
PNG size: 1614x2475
Scalefactor PDF->PNG X: 4.16666666666667
Scalefactor PDF->PNG Y: 4.16666666666667
PNG X/Y Ratio: 0.652121212121212
Use of uninitialized value $_objectstreams in concatenation (.) or string at ./georeference_airport_diagrams_via_db.pl line 693.
Object streams:
:findAllIcons
Use of uninitialized value $objectstreams in subtraction (-) at ./georeference_airport_diagrams_via_db.pl line 772.
:findAllTextboxes
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>05724AD</title>
<meta name="Subject" content=""/>
<meta name="Keywords" content=""/>
<meta name="Author" content=""/>
<meta name="Creator" content="Aspose Ltd."/>
<meta name="Producer" content="Aspose.PDF for .NET 19.11"/>
<meta name="CreationDate" content=""/>
</head>
<body>
<doc>
<page width="387.360000" height="594.000000">
<word xMin="18.214200" yMin="27.459543" xMax="37.051854" yMax="31.670643">21224</word>
<word xMin="258.129900" yMin="29.469543" xMax="320.687983" yMax="35.300643">GEORGETOWN</word>
<word xMin="322.905097" yMin="29.469543" xMax="373.152746" yMax="35.300643">MUNI(GTU)</word>
<word xMin="18.214200" yMin="36.076642" xMax="63.754141" yMax="44.110042">AIRPORT</word>
<word xMin="66.415428" yMin="36.076642" xMax="117.267298" yMax="44.110042">DIAGRAM</word>
<word xMin="173.995800" yMin="38.977343" xMax="197.723841" yMax="43.188443">AL-5724</word>
<word xMin="199.341956" yMin="38.977343" xMax="216.597536" yMax="43.188443">(FAA)</word>
<word xMin="305.577400" yMin="38.977343" xMax="349.844816" yMax="43.188443">GEORGETOWN,</word>
<word xMin="351.359994" yMin="38.977343" xMax="370.887597" yMax="43.188443">TEXAS</word>
<word xMin="21.813500" yMin="50.234143" xMax="35.010080" yMax="54.445243">ATIS</word>
<word xMin="85.172700" yMin="55.174143" xMax="113.627920" yMax="59.385243">97°41.0'W</word>
<word xMin="21.813500" yMin="57.432643" xMax="38.880036" yMax="61.643743">118.6</word>
<word xMin="274.595200" yMin="55.246143" xMax="303.050420" yMax="59.457243">97°40.5'W</word>
<word xMin="21.813500" yMin="64.631043" xMax="65.387580" yMax="68.842143">GEORGETOWN</word>
<word xMin="66.931884" yMin="64.631043" xMax="88.891886" yMax="68.842143">TOWER</word>
<word xMin="258.143400" yMin="67.322003" xMax="272.615479" yMax="72.505103">820</word>
<word xMin="21.813500" yMin="71.829543" xMax="45.960298" yMax="76.040643">120.225</word>
<word xMin="21.813500" yMin="79.027943" xMax="35.796365" yMax="83.239043">GND</word>
<word xMin="37.410269" yMin="79.027943" xMax="51.038075" yMax="83.239043">CON</word>
<word xMin="21.813500" yMin="86.226343" xMax="42.420401" yMax="90.437443">119.12</word>
<word xMin="41.280400" yMin="86.226343" xMax="45.959400" yMax="90.437443">5</word>
<word xMin="163.878259" yMin="117.018855" xMax="168.001991" yMax="123.341700">VA</word>
<word xMin="165.734459" yMin="113.853216" xMax="168.973591" yMax="117.293900">R</word>
<word xMin="167.283759" yMin="108.805556" xMax="170.522891" yMax="112.246200">3</word>
<word xMin="168.082659" yMin="106.202846" xMax="171.321791" yMax="109.643400">.</word>
<word xMin="168.482059" yMin="102.298756" xMax="172.520091" yMax="108.342200">6°</word>
<word xMin="170.669359" yMin="97.775262" xMax="173.908491" yMax="101.215800">E</word>
<word xMin="21.813500" yMin="93.424843" xMax="37.709114" yMax="97.635943">CLNC</word>
<word xMin="39.199141" yMin="93.424843" xMax="50.785596" yMax="97.635943">DEL</word>
<word xMin="21.813500" yMin="100.623343" xMax="45.960298" yMax="104.834443">119.125</word>
<word xMin="21.813500" yMin="107.821743" xMax="36.852391" yMax="112.032843">121.1</word>
<word xMin="38.523379" yMin="107.821743" xMax="56.710411" yMax="112.032843">(When</word>
<word xMin="58.381399" yMin="107.821743" xMax="75.826512" yMax="112.032843">Tower</word>
<word xMin="77.497500" yMin="107.821743" xMax="98.291273" yMax="112.032843">Closed)</word>
<word xMin="220.538525" yMin="127.097852" xMax="227.130300" yMax="131.308974">1</word>
<word xMin="217.005725" yMin="126.879352" xMax="223.597500" yMax="131.090474">8</word>
<word xMin="203.290100" yMin="135.150543" xMax="216.708218" yMax="139.361643">ELEV</word>
<word xMin="133.478800" yMin="139.908043" xMax="162.915174" yMax="144.119143">JANUARY</word>
<word xMin="164.492348" yMin="139.908043" xMax="177.109739" yMax="144.119143">2020</word>
<word xMin="231.049200" yMin="136.713226" xMax="241.936339" yMax="141.194717">A1</word>
<word xMin="204.441900" yMin="142.349143" xMax="216.199993" yMax="146.560243">786</word>
<word xMin="232.301100" yMin="146.376926" xMax="238.892114" yMax="150.587917">B</word>
<word xMin="116.328600" yMin="147.394543" xMax="141.709401" yMax="151.605643">ANNUAL</word>
<word xMin="143.212647" yMin="147.394543" xMax="158.912545" yMax="151.605643">RATE</word>
<word xMin="160.415791" yMin="147.394543" xMax="168.100383" yMax="151.605643">OF</word>
<word xMin="169.603628" yMin="147.394543" xMax="194.653715" yMax="151.605643">CHANGE</word>
<word xMin="228.456926" yMin="163.751141" xMax="233.335317" yMax="179.018400">179.</word>
<word xMin="229.235506" yMin="158.452671" xMax="233.668917" yMax="166.655000">9°</word>
<word xMin="144.809300" yMin="154.881143" xMax="155.200119" yMax="159.092243">0.1°</word>
<word xMin="156.774486" yMin="154.881143" xMax="162.719294" yMax="159.092243">W</word>
<word xMin="250.298816" yMin="181.670100" xMax="254.510087" yMax="190.634640">A1</word>
<word xMin="238.358420" yMin="192.117500" xMax="242.569672" yMax="196.788252">A</word>
<word xMin="328.761700" yMin="201.531943" xMax="357.215829" yMax="205.743043">30°41.0'N</word>
<word xMin="252.699016" yMin="241.795100" xMax="256.910287" yMax="250.759640">A1</word>
<word xMin="28.158300" yMin="241.921943" xMax="39.916393" yMax="246.133043">789</word>
<word xMin="28.508575" yMin="247.872800" xMax="34.519299" yMax="254.949787">11</word>
<word xMin="226.737600" yMin="252.812926" xMax="233.328542" yMax="257.023917">D</word>
<word xMin="203.981726" yMin="274.033758" xMax="208.860017" yMax="289.300900">5004</word>
<word xMin="204.982726" yMin="268.735262" xMax="209.193717" yMax="273.405000">X</word>
<word xMin="205.314826" yMin="256.396458" xMax="209.970717" yMax="268.131100">100</word>
<word xMin="39.810000" yMin="264.797075" xMax="47.767005" yMax="270.806996">11</word>
<word xMin="45.906900" yMin="268.394538" xMax="53.863688" yMax="274.404296">7.</word>
<word xMin="50.479300" yMin="271.092075" xMax="58.436158" yMax="277.101996">0°</word>
<word xMin="119.525300" yMin="270.998524" xMax="124.422908" yMax="275.209649">J</word>
<word xMin="242.462600" yMin="266.451843" xMax="267.043662" yMax="270.662943">TENANT</word>
<word xMin="238.959400" yMin="272.746543" xMax="268.507159" yMax="276.957643">TIE-DOWN</word>
<word xMin="311.032800" yMin="278.979643" xMax="322.844540" yMax="283.190743">FBO</word>
<word xMin="324.362759" yMin="278.979643" xMax="341.573284" yMax="283.190743">RAMP</word>
<word xMin="255.758116" yMin="280.020600" xMax="259.969387" yMax="288.985240">A1</word>
<word xMin="27.212600" yMin="279.200883" xMax="44.002324" yMax="284.059983">FIELD</word>
<word xMin="28.209100" yMin="286.464383" xMax="43.691985" yMax="291.323483">ELEV</word>
<word xMin="29.363400" yMin="293.727783" xMax="42.930817" yMax="298.586883">790</word>
<word xMin="232.896020" yMin="275.139300" xMax="237.107272" yMax="279.810052">A</word>
<word xMin="238.644400" yMin="289.280506" xMax="245.235237" yMax="293.491523">E</word>
<word xMin="266.475600" yMin="292.080743" xMax="298.637909" yMax="296.291843">TRANSIENT</word>
<word xMin="300.085358" yMin="292.080743" xMax="316.493636" yMax="296.291843">RAMP</word>
<word xMin="271.028900" yMin="300.142343" xMax="300.760108" yMax="304.353443">TERMINAL</word>
<word xMin="189.180900" yMin="304.677526" xMax="195.771958" yMax="308.888517">J</word>
<word xMin="224.915500" yMin="306.860106" xMax="231.506558" yMax="311.071123">J</word>
<word xMin="164.155200" yMin="308.972485" xMax="169.715104" yMax="313.183793">K</word>
<word xMin="279.316900" yMin="307.907743" xMax="293.076983" yMax="312.118843">TWR</word>
<word xMin="230.155520" yMin="324.312000" xMax="234.366772" yMax="328.982752">A</word>
<word xMin="140.878300" yMin="325.697175" xMax="148.835205" yMax="331.707196">40</word>
<word xMin="146.975239" yMin="329.294544" xMax="154.932105" yMax="335.304396">99</word>
<word xMin="154.596000" yMin="333.790775" xMax="159.504580" yMax="338.002096">X</word>
<word xMin="159.147200" yMin="336.476075" xMax="167.104205" yMax="342.485996">75</word>
<word xMin="243.978100" yMin="324.868643" xMax="253.127136" yMax="329.079743">HS</word>
<word xMin="254.916853" yMin="324.868643" xMax="258.496288" yMax="329.079743">1</word>
<word xMin="235.200400" yMin="341.535926" xMax="241.791361" yMax="345.746917">F</word>
<word xMin="216.646900" yMin="351.736043" xMax="228.458640" yMax="355.947143">FBO</word>
<word xMin="229.976859" yMin="351.736043" xMax="247.187384" yMax="355.947143">RAMP</word>
<word xMin="291.362930" yMin="393.634555" xMax="295.574047" yMax="397.677300">M</word>
<word xMin="291.630801" yMin="403.604113" xMax="297.641525" yMax="410.681100">29</word>
<word xMin="247.312906" yMin="361.408943" xMax="251.523923" yMax="365.785300">L</word>
<word xMin="271.336200" yMin="360.639445" xMax="276.116500" yMax="364.850806">F</word>
<word xMin="265.131000" yMin="381.468575" xMax="273.087788" yMax="387.478496">0.</word>
<word xMin="269.703400" yMin="384.166375" xMax="277.660056" yMax="390.176296">7%</word>
<word xMin="278.009900" yMin="389.067375" xMax="286.446795" yMax="395.360596">UP</word>
<word xMin="263.326400" yMin="396.027475" xMax="271.283305" yMax="402.037396">29</word>
<word xMin="269.423300" yMin="399.624675" xMax="277.380088" yMax="405.634596">7.</word>
<word xMin="273.995700" yMin="402.322475" xMax="281.952558" yMax="408.332396">0°</word>
<word xMin="300.399200" yMin="404.450043" xMax="313.817318" yMax="408.661143">ELEV</word>
<word xMin="301.550900" yMin="411.648643" xMax="313.308993" yMax="415.859743">759</word>
<word xMin="331.713100" yMin="420.710343" xMax="360.167229" yMax="424.921443">30°40.5'N</word>
<word xMin="43.215733" yMin="456.315943" xMax="61.985747" yMax="460.527043">S-12.5</word>
<word xMin="27.212500" yMin="464.234243" xMax="42.504874" yMax="468.445343">RWY</word>
<word xMin="44.143577" yMin="464.234243" xMax="59.435951" yMax="468.445343">18-36</word>
<word xMin="42.737773" yMin="472.152543" xMax="57.497132" yMax="476.363643">S-30,</word>
<word xMin="59.222163" yMin="472.152543" xMax="73.401912" yMax="476.363643">D-60</word>
<word xMin="209.092726" yMin="469.331541" xMax="213.971017" yMax="484.598800">359.</word>
<word xMin="209.871206" yMin="464.033071" xMax="214.304717" yMax="472.235400">9°</word>
<word xMin="27.212500" yMin="448.397543" xMax="42.504874" yMax="452.608643">RWY</word>
<word xMin="44.143577" yMin="448.397543" xMax="59.435951" yMax="452.608643">11-29</word>
<word xMin="231.100134" yMin="450.726054" xMax="235.311378" yMax="455.392300">L</word>
<word xMin="217.255400" yMin="426.549826" xMax="223.846342" yMax="430.760817">G</word>
<word xMin="192.319926" yMin="464.446841" xMax="196.753417" yMax="472.649100">0.</word>
<word xMin="192.653606" yMin="459.148477" xMax="197.087117" yMax="467.350700">8%</word>
<word xMin="193.259806" yMin="448.966564" xMax="197.728217" yMax="457.725100">UP</word>
<word xMin="5.000000" yMin="238.266113" xMax="12.812000" yMax="256.159180">SC-3,</word>
<word xMin="5.000000" yMin="260.048828" xMax="12.812000" yMax="267.834961">27</word>
<word xMin="5.000000" yMin="269.779785" xMax="12.812000" yMax="283.003906">JAN</word>
<word xMin="5.000000" yMin="284.948730" xMax="12.812000" yMax="300.520996">2022</word>
<word xMin="5.000000" yMin="304.410645" xMax="12.812000" yMax="310.248535">to</word>
<word xMin="5.000000" yMin="314.138184" xMax="12.812000" yMax="321.924316">24</word>
<word xMin="5.000000" yMin="323.869141" xMax="12.812000" yMax="337.482910">FEB</word>
<word xMin="5.000000" yMin="339.427734" xMax="12.812000" yMax="355.000000">2022</word>
<word xMin="232.332700" yMin="234.319143" xMax="241.481736" yMax="238.530243">HS</word>
<word xMin="243.271453" yMin="234.319143" xMax="246.850888" yMax="238.530243">2</word>
<word xMin="27.243000" yMin="234.723443" xMax="40.661118" yMax="238.934543">ELEV</word>
<word xMin="180.470600" yMin="486.657943" xMax="193.888718" yMax="490.869043">ELEV</word>
<word xMin="181.694300" yMin="493.856543" xMax="193.452393" yMax="498.067643">748</word>
<word xMin="197.213200" yMin="499.521226" xMax="203.804975" yMax="503.732348">3</word>
<word xMin="200.746000" yMin="499.739726" xMax="207.337775" yMax="503.950848">6</word>
<word xMin="25.484800" yMin="524.708663" xMax="55.802606" yMax="529.243763">CAUTION:</word>
<word xMin="57.389261" yMin="524.708663" xMax="65.500242" yMax="529.243763">BE</word>
<word xMin="67.086897" yMin="524.708663" xMax="87.535709" yMax="529.243763">ALERT</word>
<word xMin="89.122364" yMin="524.708663" xMax="97.582409" yMax="529.243763">TO</word>
<word xMin="99.169064" yMin="524.708663" xMax="127.722510" yMax="529.243763">RUNWAY</word>
<word xMin="129.309165" yMin="524.708663" xMax="160.693203" yMax="529.243763">CROSSING</word>
<word xMin="162.279858" yMin="524.708663" xMax="205.474957" yMax="529.243763">CLEARANCES.</word>
<word xMin="58.382500" yMin="532.339163" xMax="92.687508" yMax="536.874263">READBACK</word>
<word xMin="94.246827" yMin="532.339163" xMax="102.218063" yMax="536.874263">OF</word>
<word xMin="103.777382" yMin="532.339163" xMax="115.902643" yMax="536.874263">ALL</word>
<word xMin="117.461961" yMin="532.339163" xMax="145.523458" yMax="536.874263">RUNWAY</word>
<word xMin="147.082776" yMin="532.339163" xMax="175.487323" yMax="536.874263">HOLDING</word>
<word xMin="177.046642" yMin="532.339163" xMax="222.092236" yMax="536.874263">INSTRUCTIONS</word>
<word xMin="223.651554" yMin="532.339163" xMax="229.196491" yMax="536.874263">IS</word>
<word xMin="230.755810" yMin="532.339163" xMax="263.844549" yMax="536.874263">REQUIRED.</word>
<word xMin="18.214200" yMin="554.663542" xMax="63.754141" yMax="562.696942">AIRPORT</word>
<word xMin="66.415428" yMin="554.663542" xMax="117.267298" yMax="562.696942">DIAGRAM</word>
<word xMin="18.214200" yMin="564.834543" xMax="37.051854" yMax="569.045643">21224</word>
<word xMin="305.577400" yMin="553.316843" xMax="349.844816" yMax="557.527943">GEORGETOWN,</word>
<word xMin="351.359994" yMin="553.316843" xMax="370.887597" yMax="557.527943">TEXAS</word>
<word xMin="258.129900" yMin="562.165643" xMax="320.687983" yMax="567.996743">GEORGETOWN</word>
<word xMin="322.905097" yMin="562.165643" xMax="373.152746" yMax="567.996743">MUNI(GTU)</word>
<word xMin="374.247985" yMin="337.106934" xMax="382.059985" yMax="355.000000">SC-3,</word>
<word xMin="374.247985" yMin="325.431152" xMax="382.059985" yMax="333.217285">27</word>
<word xMin="374.247985" yMin="310.262207" xMax="382.059985" yMax="323.486328">JAN</word>
<word xMin="374.247985" yMin="292.745117" xMax="382.059985" yMax="308.317383">2022</word>
<word xMin="374.247985" yMin="283.017578" xMax="382.059985" yMax="288.855469">to</word>
<word xMin="374.247985" yMin="271.341797" xMax="382.059985" yMax="279.127930">24</word>
<word xMin="374.247985" yMin="255.783203" xMax="382.059985" yMax="269.396973">FEB</word>
<word xMin="374.247985" yMin="238.266113" xMax="382.059985" yMax="253.838379">2022</word>
<word xMin="289.865900" yMin="218.240043" xMax="301.677640" yMax="222.451143">FBO</word>
<word xMin="303.195859" yMin="218.240043" xMax="320.406384" yMax="222.451143">RAMP</word>
<word xMin="245.639600" yMin="218.769806" xMax="252.230614" yMax="222.980823">C</word>
</page>
</doc>
</body>
</html>
:findLatitudeTextBoxes2
$VAR1 = {};
Found 0 Potential latitude text boxes
:findLongitudeTextBoxes2
LonRegex3: Degrees: ., minutes: 6, declination: E && 98, airportLongitudeDeclination, W
Argument "." isn't numeric in abs at ./georeference_airport_diagrams_via_db.pl line 1680.
$VAR1 = {};
Found 0 Potential longitude text boxes
:findClosestLineToTextBox
latitudeTextBoxes
$VAR1 = {};
:findClosestLineToTextBox
longitudeTextBoxes
$VAR1 = {};
findIntersectionOfLatLonLines
$VAR1 = {};
Ground Control Points command line string
Found 0 potential Ground Control Points
Only found 0 ground control points in plates/05724AD.PDF, can't georeference
Touching plates/noPoints-TX-GTU-05724AD-PDF-AIRPORT-DIAGRAM.vrt
Success: 0, Fail: 0, No Text: 0, No Points: 1, Chart: 1/1
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.