Full Code of BengbuGuards/StarLocator for AI

main c77b13043946 cached
126 files
677.5 KB
282.8k tokens
326 symbols
1 requests
Download .txt
Showing preview only (848K chars total). Download the full file or copy to clipboard to get everything.
Repository: BengbuGuards/StarLocator
Branch: main
Commit: c77b13043946
Files: 126
Total size: 677.5 KB

Directory structure:
gitextract__0euzy7k/

├── .gitattributes
├── .github/
│   └── workflows/
│       └── format-check.yml
├── .gitignore
├── .prettierignore
├── .prettierrc
├── .python-version
├── LICENSE
├── NOTICE.md
├── README.md
├── docs/
│   ├── CONTRIBUTING.md
│   └── INSTALLATION.md
├── eslint.config.mjs
├── examples/
│   └── image_coords.csv
├── package.json
├── pnpm-workspace.yaml
├── prototype/
│   ├── README.md
│   ├── config.py
│   ├── core/
│   │   ├── __init__.py
│   │   ├── astro_coord/
│   │   │   ├── calc.py
│   │   │   ├── data.py
│   │   │   ├── remote.py
│   │   │   ├── stellarium.COPYING
│   │   │   └── utils.py
│   │   ├── astrometry/
│   │   │   ├── client.py
│   │   │   ├── extract.py
│   │   │   └── solve.py
│   │   ├── moon_time/
│   │   │   ├── calc.py
│   │   │   └── utils.py
│   │   ├── positioning/
│   │   │   ├── __init__.py
│   │   │   ├── calc.py
│   │   │   ├── find_z/
│   │   │   │   ├── README.md
│   │   │   │   ├── benchmark.py
│   │   │   │   ├── methods/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── bi_mean.py
│   │   │   │   │   ├── fix_refraction.py
│   │   │   │   │   ├── north_len.py
│   │   │   │   │   └── trisect.py
│   │   │   │   └── utils/
│   │   │   │       └── math.py
│   │   │   ├── latitude/
│   │   │   │   ├── benchmark.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── method/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── bisect_formular.py
│   │   │   │   │   ├── bisect_tabular.py
│   │   │   │   │   ├── naive.py
│   │   │   │   │   ├── series.py
│   │   │   │   │   └── series2.py
│   │   │   │   ├── readme.md
│   │   │   │   └── series_model.py
│   │   │   ├── locator/
│   │   │   │   ├── README.md
│   │   │   │   ├── benchmark.py
│   │   │   │   ├── methods/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── bi_median.py
│   │   │   │   │   └── matrix_inverse.py
│   │   │   │   └── utils/
│   │   │   │       └── math.py
│   │   │   └── top_point/
│   │   │       ├── README.md
│   │   │       ├── __init__.py
│   │   │       ├── benchmark.py
│   │   │       ├── experiment.py
│   │   │       ├── methods/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── least_square.py
│   │   │       │   ├── matrix_inverse.py
│   │   │       │   ├── matrix_inverse_normalized.py
│   │   │       │   ├── median.py
│   │   │       │   ├── median2.py
│   │   │       │   ├── nearest_l2.py
│   │   │       │   ├── optim.py
│   │   │       │   ├── sphere.py
│   │   │       │   └── square_weight.py
│   │   │       └── utils/
│   │   │           └── plane.py
│   │   └── stellarium/
│   │       ├── readme.md
│   │       └── screenshot.py
│   ├── main.py
│   ├── requirements-dev.txt
│   ├── requirements.txt
│   ├── routers/
│   │   ├── __init__.py
│   │   ├── astro_coord.py
│   │   ├── astrometry.py
│   │   ├── bmap.py
│   │   ├── limiter.py
│   │   ├── moon_time.py
│   │   └── positioning.py
│   ├── schemas/
│   │   ├── __init__.py
│   │   ├── astro_coord.py
│   │   ├── astrometry/
│   │   │   ├── extract_stars.py
│   │   │   ├── recognize.py
│   │   │   └── submit.py
│   │   ├── base.py
│   │   ├── moon_time.py
│   │   └── positioning.py
│   └── tests/
│       ├── __init__.py
│       ├── test_astro_coord.py
│       ├── test_astrometry/
│       │   ├── test_extract_stars.py
│       │   ├── test_recognize.py
│       │   └── test_submit.py
│       ├── test_moon_time.py
│       ├── test_positioning.py
│       └── test_utils.py
├── pyproject.toml
├── src/
│   ├── config.js
│   ├── css/
│   │   └── site.css
│   ├── help.html
│   ├── index.html
│   ├── index.js
│   └── interface/
│       ├── classes/
│       │   ├── EventManager.js
│       │   ├── TouchEventAdapter.js
│       │   └── interact.js
│       ├── elements/
│       │   ├── Baseclass.js
│       │   ├── CelestialBody.js
│       │   ├── PlumbLine.js
│       │   └── Rectangle.js
│       ├── functions/
│       │   ├── AutoComplete.js
│       │   ├── Calc.js
│       │   ├── CeleCoord.js
│       │   ├── CeleRecognition.js
│       │   ├── Default.js
│       │   ├── ImageChange.js
│       │   ├── MoonTime.js
│       │   ├── PickCele.js
│       │   ├── PickPL.js
│       │   └── SelectStars.js
│       ├── init.js
│       ├── starZH2EN.js
│       └── utils.js
├── webpack.common.js
├── webpack.dev.js
└── webpack.prod.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto


================================================
FILE: .github/workflows/format-check.yml
================================================
name: Format Check

on:
  pull_request: # 在每次提交 PR 时运行
    branches:
      - main # 针对 main 分支运行
      - dev # 针对 dev 分支运行

jobs:
  format-check:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install pnpm 📦
        uses: pnpm/action-setup@v4
        with:
          version: "10"
          run_install: false

      - name: Install and Build 🔧
        run: pnpm install --frozen-lockfile

      - name: lint
        run: pnpm run lintfix

      - name: format
        run: pnpm run format

      - name: Ensure no format changes
        run: |
          git diff --exit-code || (echo "Code formatting issues detected" && exit 1)


================================================
FILE: .gitignore
================================================
*.code-workspace
.idea/
.vscode/
.DS_Store
node_modules/
dist/
package-lock.json
.pytest_cache/
__pycache__/


================================================
FILE: .prettierignore
================================================
*.md
*.json
*.yml
*.yaml
*.html
*.css
node_modules/


================================================
FILE: .prettierrc
================================================
{
    "semi": true,
    "trailingComma": "es5",
    "singleQuote": true,
    "printWidth": 120,
    "tabWidth": 4,
    "useTabs": false
}


================================================
FILE: .python-version
================================================
3.12


================================================
FILE: LICENSE
================================================
                    GNU AFFERO GENERAL PUBLIC LICENSE
                       Version 3, 19 November 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.

  A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate.  Many developers of free software are heartened and
encouraged by the resulting cooperation.  However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.

  The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community.  It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server.  Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.

  An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals.  This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU Affero General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Remote Network Interaction; Use with the GNU General Public License.

  Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software.  This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time.  Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    StarLocator - A web program for photo positioning based on stars
    Copyright (C) 2024  BengbuGuards, Hiroshi1993, cheanus, zhdbk3, 薛定谔的按钮, hanran, Charmian

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source.  For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code.  There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.


================================================
FILE: NOTICE.md
================================================
This project uses the following open source projects and follows their respective license terms:

frontend:
- [Fabric](https://github.com/fabric/fabric):Custom License
- [fuzzysort](https://github.com/farzher/fuzzysort): MIT License

backend:
- [numpy](https://numpy.org/): Custom License
- [scipy](https://scipy.org/): BSD 3-Clause License
- [fastapi](https://fastapi.tiangolo.com/): MIT License
- [uvicorn](https://www.uvicorn.org/): BSD 3-Clause license
- [python-multipart](https://github.com/Kludex/python-multipart): Apache-2.0 License
- [astronomy-engine](https://github.com/astronomy/astronomy):MIT License
- [httpx](https://github.com/projectdiscovery/httpx): MIT License
- [async-lru](https://github.com/aio-libs/async-lru): MIT License
- [slowapi](https://github.com/laurents/slowapi): MIT License
- [sep](http://github.com/kbarbary/sep): LGPL-3.0 License
- [astropy](https://www.astropy.org/): BSD 3-Clause License
- [astrometry.net](https://astrometry.net): Custom License. The [client.py](./prototype/core/star_recognition/client.py) file of this project contains some content from astrometry and has been modified based on it, mainly integrating the star recognition function.

data:
- [SIMBAD](https://simbad.u-strasbg.fr/simbad/): This project has made use of the SIMBAD database, operated at CDS, Strasbourg, France
- [stellarium](https://github.com/Stellarium/stellarium): GPL-2.0 license. The [data.py](./prototype/core/astro_coord/data.py) and [starZH2EN.js](./src/interface/starZH2EN.js) files of this project contains some content from stellarium and has been modified based on it, mainly integrating the Chinese and English star name tables.

================================================
FILE: README.md
================================================
# StarLocator

💬<a href="https://qm.qq.com/q/lmRhILlX0e">加入StarLocator交流群</a> | 🌎<a href="https://caveallegory.cn/StarLocator/">最新版链接</a> | ℹ️<a href="https://bengbuguards.github.io/StarLocator/help.html">使用帮助</a>

> StarLocator 是什么 | WHAT IS STARLOCATOR

StarLocator是一款天文定位应用,主要基于一种已经应用了数个世纪的航海导航技术。该应用使用夜空照片及其精确拍摄时间为源数据,计算照片拍摄地在地球上的大致位置。该过程类似以相机对图中的天体高度角进行测量代替17世纪以来的水手使用六分仪的测量,与占星术、玄学和心灵感应无关。

StarLocator is a celestial positioning application mainly based on a maritime navigation technique that has been applied
for centuries. In this app, a photo of night sky and the exact time when it was taken were used as source information to
calculate the rough position of the photo taker was on the earth. The process is quite like using the camera as a
sextant to measure the elevation of celestial bodies in the image just as sailors did since 17th century, and there is
NOTHING to do with astrology, metaphysics and telepathy.

[![Star History Chart](https://api.star-history.com/svg?repos=BengbuGuards/StarLocator&type=Timeline)](https://star-history.com/#BengbuGuards/StarLocator&Timeline)

## 特点 | FEATURES

- ✨**自动识星**:通过拍摄的星空照片,自动识别照片中的星星,无需手动辨识。
- 😀**交互简单**:标星、标铅垂线、设置拍摄时间,然后就是点击按钮的事了,熟练掌握后整个过程不到**5分钟**。原本的耗时步骤,如查询天体天文数据,已被API和按钮所实现。
- 🔒**隐私友好**:项目采用前后端分离架构,服务器后端只在核心计算时获取必要信息,并在结束计算后删除。
- 🎯**精度良好**:我们在各个模块中采用了强稳健性的算法,对环境噪声、标记误差有良好的抗噪能力,误差通常可稳定在**30km**以下。
- ✅**完全开源**:我们使用AGPL v3开源,目的是为尽可能地使该方法透明,同时欢迎社区共建。
- ✨**Automatic star recognition**: By capturing starry sky photos, stars in the photos can be automatically recognized without the need for manual recognition.
- 😀**Simple interaction**: Marking stars and plumblines, setting the time and then simply click a button. Can finish within **5 minutes** when familiar. All time-consuming steps, like searching for data of celestial bodies, have been achieved with API and buttons.
- 🔒**Privacy friendly**: The project adopts a front-end and back-end separation architecture, where the server backend only retrieves necessary information during core computing and deletes it after the computation is completed.
- 🎯**Good accuracy**: We applied robust algorithms in modules, making it resilient to environmental noises and marking errors. The error can usually be limited to **30km**.
- ✅**Fully open sourced**: AGPL v3 open source protocol adopted. Aiming to make the approach as transparent as possible and to welcome community contributions.

## 安装 | INSTALLATION

见[INSTALLATION.md](./docs/INSTALLATION.md)

## 使用方法 | HOW TO USE

见<a href="https://caveallegory.cn/StarLocator/help.html">使用帮助</a>

## 贡献 | CONTRIBUTING

见[CONTRIBUTING.md](./docs/CONTRIBUTING.md)

## 致谢 | CREDITS

### 开源项目 | OPEN SOURCE PROJECTS

见[NOTICE.md](./NOTICE.md)

### 开发团队 | DEVELOPERS

按加入时间排序

- 小流汗黄豆 | BengbuGuards
- 鬼蝉 | Hiroshi1993
- 无限远点的辩证法 | cheanus
- 着火的冰块nya | zhdbk3
- 薛定谔的按钮
- hanran
- Charmian
- Yisan5772156


================================================
FILE: docs/CONTRIBUTING.md
================================================
# 如何贡献本项目

## 实时交流、闲聊 or 长期贡献

建议加入我们的QQ群:[**StarLocator交流群**](https://qm.qq.com/q/nlFqV4jVfO),在群里你可以得到关于本项目的**最新消息**,参与**长期贡献**,或者让我们帮你解决本项目相关的任何**问题**,包括和群友们**闲聊**!

*你甚至可以让我们帮你认识照片上的星星⭐*

## 发现bug?

1. 请先在 [Issues](https://github.com/BengbuGuards/StarLocator/issues) 中搜索是否有人已经提出了相同的问题。
2. 如果没有,请新建一个 Issue,描述清楚你遇到的问题,我们非常希望你能提供尽可能详细的信息,例如:
    - 详细的问题描述
    - 操作系统(Windows/Linux/MacOS/Android/iOS)
    - 你的浏览器类型及其版本(Chrome/Firefox/Safari/Edge)
    - 按下F12,打开DevTools,显示Console中的报错信息
    - 复现步骤

## 提交代码

如果你想为本项目贡献代码,你可以按照以下步骤进行:
1. Fork 本项目,切换到dev分支(我们的主要开发分支)。
2. 为你的提交创建一个新的分支。
3. 在新分支上进行你的修改。
4. 提交你的修改,并新建一个 Pull Request。
5. 等待我们的 Review。

请尽可能规范你的代码,例如:
- 使用`pnpm format`格式化你的代码
- 使用eslint检查并修复你的代码,例如使用命令`pnpm lintfix`
- 尽可能添加详细注释,因为你的代码可能会被其他人阅读和修改
- 为变量名、函数名等添加有意义的名字

## 最后

我们诚挚地欢迎你的贡献!

================================================
FILE: docs/INSTALLATION.md
================================================
# 安装
1. 克隆仓库,安装Node.js、pnpm和Python(版本尽量较新)。
2. 前端构建

    自定义前端配置文件[config.js](../src/config.js)。其中,百度地图API key申请见[百度地图开放平台](https://lbsyun.baidu.com/),Astrometry.net API key申请见[Astrometry.net](https://nova.astrometry.net/api_help)。

    安装依赖:
    ```bash
    pnpm install
    ```

    构建前端:
    ```bash
    pnpm build
    ```

    运行前端:
    ```bash
    pnpm serve
    ```

    前端已在`http://localhost:6974`运行。

    (Optional)如果你想在开发模式下运行项目,可以使用
    ```bash
    pnpm dev
    ```

3. 后端构建

    进入`prototype`目录:
    ```bash
    cd prototype
    ```

    自定义后端配置文件[config.py](../prototype/config.py)。

    **注意:** 本项目的地图显示功能由百度地图API提供,在`config.py`中填写百度地图API的AK后可正常使用,使用时请注意百度地图API的使用条款。此外也可不填写AK,最终计算结果将以文本形式显示。

    新建虚拟环境:
    ```bash
    conda create -n starlocator
    conda activate starlocator
    ```

    安装依赖:
    ```bash
    pip install -r requirements.txt
    ```

    (Optional)安装开发依赖:
    ```bash
    pip install -r requirements-dev.txt
    ```

    运行后端:
    ```bash
    python main.py
    ```

    后端已在`http://localhost:6975`运行。


================================================
FILE: eslint.config.mjs
================================================
import globals from 'globals';
import pluginJs from '@eslint/js';
import prettierPlugin from 'eslint-plugin-prettier';
import prettierConfig from 'eslint-config-prettier';

export default [
    {
        ignores: ['dist/'],
    },
    {
        languageOptions: {
            globals: globals.browser,
        },
        plugins: {
            prettier: prettierPlugin,
        },
        rules: {
            ...prettierConfig.rules,
            'prettier/prettier': 'error',
        },
    },
    pluginJs.configs.recommended,
    prettierConfig,
];


================================================
FILE: examples/image_coords.csv
================================================
478.34,269.082
2346.32,608.375
2585.44,661.47
2115.17,1160.88
1956.64,1741.5
2926.1,352.348
1641.82,1688.24
2656.49,1047.16
1857.68,1642.87
1944.03,1771.55
2548.21,811.345
1800.26,1588.15
2384.24,1172.82
2349.49,1368.01
1273,1719.53
962.393,1750.06
2480.19,509.987
1969.51,1564.65
1983.36,1251.26
915.162,1744.99
1466.91,1203.06
1258.82,1413.02
672.213,1685.7
2940.92,1222.72
2933.61,549.482
1653.75,511.518
2096.31,1518.75
2882.1,447.267
1848.01,643.511
1293.78,1205.3
2466.59,1333.23
2355.67,1837.05
2713.29,1809.44
35.3399,701.494
2023.67,925.331
1875.74,1705.86
432.494,1580.5
2494.76,1593.51
2399.22,1375.47
1802.91,1560.76
1300.96,1645.96
1764,660
511.52,1130.51
1659.53,1109.51
2553.93,1195.34
2750.29,1430.13
1485,1779
2269.42,1572.67
1622.3,782.654
1480.82,1357.61
2357.8,1450.6
2872,1655

================================================
FILE: package.json
================================================
{
	"name": "starlocator",
	"version": "2.1.0",
	"description": "",
	"private": true,
	"scripts": {
		"test": "echo \"Error: no test specified\" && exit 1",
		"build": "webpack --config webpack.prod.js",
		"dev": "webpack-dev-server --config webpack.dev.js",
		"serve": "http-server ./dist -p 6974 -s",
		"lintfix": "eslint . --fix",
		"format": "prettier --write '**/*.js'"
	},
	"keywords": [],
	"author": "",
	"license": "AGPL-3.0-only",
	"dependencies": {
		"fabric": "^6.4.3",
		"fuzzysort": "^3.1.0"
	},
	"devDependencies": {
		"@eslint/js": "^9.13.0",
		"css-loader": "^7.1.2",
		"css-minimizer-webpack-plugin": "^7.0.0",
		"eslint": "^9.13.0",
		"eslint-config-prettier": "^9.1.0",
		"eslint-plugin-prettier": "^5.2.1",
		"globals": "^15.11.0",
		"handlebars": "^4.7.8",
		"html-loader": "^5.1.0",
		"html-webpack-plugin": "^5.6.3",
		"http-server": "^14.1.1",
		"mini-css-extract-plugin": "^2.9.2",
		"prettier": "^3.3.3",
		"style-loader": "^4.0.0",
		"webpack": "^5.95.0",
		"webpack-cli": "^5.1.4",
		"webpack-dev-server": "^5.1.0"
	}
}


================================================
FILE: pnpm-workspace.yaml
================================================
onlyBuiltDependencies:
  - canvas


================================================
FILE: prototype/README.md
================================================
# 后端

## 安装
1. 命令行进入本文件夹
2. 安装依赖
    ```bash
    pip install -r requirements.txt
    ```

## 后端

### 运行
1. 进入本文件夹
2. 自定义config.py中的配置
3. 运行
    ```bash
    python main.py
    ```
    开发时可使用reload模式
    ```bash
    uvicorn main:app --port 6975 --reload
    ```

## 单元测试

### 结构
- core
    - Find_z: 焦距计算
    - stellarium: 生成星图以供算法测试
    - top_point: 灭点计算
- routers: FastAPI的路由
- schemas: FastAPI的数据模型
- tests: 单元测试
- main.py: FastAPI的入口
- config.py: 配置文件
- requirements.txt: 依赖

### 运行
尽量写好单元测试。单元测试的运行方式是进入本文件夹,运行

```bash
pytest tests
```

注意需先启动后端。


================================================
FILE: prototype/config.py
================================================
# 前端服务的基础URL
FRONTEND_BASEURL = "http://localhost:6974"
# 后端服务的基础URL
BACKEND_BASEURL = "http://localhost:6975"
BACKEND_API_BASEURL = BACKEND_BASEURL + "/api"

# 缓存天体坐标的数量
CACHE_SIZE = 1000

# 远程异步请求最大并发数
MAX_CONNECTIONS = 5

# 一次请求最多处理的天体数量
MAX_NUM_OF_STARS = 20

# 一次请求最多处理的直线数量
MAX_NUM_OF_LINES = 20

# 标月定时的最大时间搜索范围(天)
MAX_MOON_SEARCH_RANGE = 365

### 限制上传图片的大小
MAX_UPLOAD_SIZE = 10 * 1024 * 1024

# 日志等级:debug, info, warning, error, critical
LOG_LEVEL = "info"

# API_KEY
## 百度地图 JS API KEY
BMAP_API_KEY = "******"
## astrometry API_KEY
ASTROMETRY_API_KEY = "******"

# 网络请求是否限流
RATE_LIMIT = False
## 只提供代理的,没有较大的并发需求,不限流
## 轻量:存在少量的计算资源消耗
LIGHT_RATE_LIMIT = "5/second"
## 中等:存在一定的计算资源消耗,且有一定的并发需求
MEDIUM_RATE_LIMIT = "1/3second"
## 重度:存在较大的计算资源消耗,或且有较大的并发需求
HEAVY_RATE_LIMIT = "1/6second"

# CORS
CORS_ALLOW_ORIGIN = [
    FRONTEND_BASEURL,
    BACKEND_BASEURL,
    "https://api.map.baidu.com",
]


================================================
FILE: prototype/core/__init__.py
================================================


================================================
FILE: prototype/core/astro_coord/calc.py
================================================
import asyncio
import astronomy as ast
from .data import starZH2EN, solar_bodies
from .remote import get_RaDecs_by_names
from .utils import stamp2ast_time


def get_HaDec_by_RaDec(
    raDec: tuple[float | None, float | None],
    date: ast.Time,
    observer: ast.Observer = ast.Observer(0, 0, 0),
) -> tuple[float | None, float | None]:
    """
    根据J2000赤经赤纬获取时角和赤纬

    Params:
        raDec: 赤经赤纬J2000
        date: 日期
        observer: 观测者地理坐标

    Returns:
        haDec: 时角和赤纬(角度)
    """

    if raDec[0] is None or raDec[1] is None:
        return (None, None)
    ast.DefineStar(ast.Body.Star1, raDec[0], raDec[1], 1000)
    equ_ofdate = ast.Equator(ast.Body.Star1, date, observer, True, True)
    hour_angle = ast.HourAngle(ast.Body.Star1, date, observer)
    return (hour_angle, equ_ofdate.dec)


def get_HaDec_in_solar(
    star_name: str, date: ast.Time, observer: ast.Observer = ast.Observer(0, 0, 0)
) -> tuple[float | None, float | None]:
    """
    根据太阳系天体名称和日期获取其时角和赤纬

    Params:
        starName: 天体名称
        date: 日期
        observer: 观察者地理坐标

    Returns:
        haDec: 时角和赤纬(角度)
    """

    # 将name第一个字母大写,其他字母小写
    star_name = star_name.capitalize()
    star_body = getattr(ast.Body, star_name)
    equ_ofdate = ast.Equator(star_body, date, observer, True, True)
    hour_angle = ast.HourAngle(star_body, date, observer)
    return (hour_angle, equ_ofdate.dec)


def get_HaDecs_by_names(
    star_names: list[str],
    timestamp: float,
    observer: ast.Observer = ast.Observer(0, 0, 0),
) -> tuple[dict[str, tuple[float | None, float | None]], str]:
    """
    根据恒星名称数组获取其时角和赤纬

    Params:
        star_names: 恒星名称数组
        timestamp: 时间戳
        observer: 观察者地理坐标

    Returns:
        haDec: 时角和赤纬字典(角度)
        is_success: 是否成功获取恒星赤经赤纬
    """

    ha_desc = dict()  # 时角和赤纬数组(角度)
    fixed_star_names = dict()  # 太阳系外要查询的恒星名(查询名: 操作名)
    solar_star_names = dict()  # 太阳系内要查询的天体名(查询名: 操作名)
    detail = "success"  # 是否成功获取恒星赤经赤纬
    ast_time = stamp2ast_time(timestamp)

    for star_name in star_names:
        operate_name = star_name
        # 如果匹配到汉英对照星表,则转换为英文名
        if operate_name in starZH2EN:
            operate_name = starZH2EN[operate_name]
        operate_name = operate_name.lower()
        if operate_name in solar_bodies:
            solar_star_names[star_name] = operate_name
        else:
            fixed_star_names[star_name] = operate_name

    # 异步获取恒星的赤经和赤纬
    ra_decs = asyncio.run(get_RaDecs_by_names(list(fixed_star_names.values())))
    # 同步计算天体的时角和赤纬
    # 计算太阳系外天体的时角和赤纬
    for star_name in fixed_star_names.keys():
        ha_desc[star_name] = get_HaDec_by_RaDec(
            ra_decs[fixed_star_names[star_name]], ast_time, observer
        )

    # 计算太阳系内天体的时角和赤纬
    for star_name, operate_name in solar_star_names.items():
        ha_desc[star_name] = get_HaDec_in_solar(operate_name, ast_time, observer)

    # 检查是否成功获取恒星赤经赤纬
    for star_name in star_names:
        if ha_desc[star_name][0] is None or ha_desc[star_name][1] is None:
            detail = "fail"
            break

    return ha_desc, detail


================================================
FILE: prototype/core/astro_coord/data.py
================================================
solar_bodies = [
    "sun",
    "moon",
    "mercury",
    "venus",
    "mars",
    "jupiter",
    "saturn",
    "uranus",
    "neptune",
    "pluto",
]

solar_body_mags = {
    "sun": -26.74,
    "moon": -3.27,
    "mercury": -1.62,
    "venus": -3.91,
    "mars": 0.44,
    "jupiter": -2.47,
    "saturn": 0.66,
    "uranus": 5.69,
    "neptune": 7.69,
    "pluto": 14.42,
}

starZH2EN = {
    "太阳": "sun",
    "日": "sun",
    "月球": "moon",
    "月": "moon",
    "月亮": "moon",
    "水星": "mercury",
    "金星": "venus",
    "火星": "mars",
    "木星": "jupiter",
    "土星": "saturn",
    "天王星": "uranus",
    "海王星": "neptune",
    "冥王星": "pluto",
    "垒壁阵十": "29 psc",
    "垒壁阵十二": "30 psc",
    "壁宿增五": "85 peg",
    "土公增一": "31 psc",
    "土公一": "c psc",
    "八魁二": "2 cet",
    "王良增三": "9 cas",
    "八魁四": "3 cet",
    "垒壁阵十一": "33 psc",
    "壁宿增十": "86 peg",
    "王良增二": "10 cas",
    "垒壁阵增六": "4 cet",
    "垒壁阵增七": "5 cet",
    "壁宿二": "alf and",
    "壁宿增十八": "87 peg",
    "王良一": "bet cas",
    "火鸟四": "eps phe",
    "土公增二": "34 psc",
    "螣蛇增十九": "22 and",
    "螣蛇增十一": "22 and",
    "八魁一": "6 cet",
    "壁宿一": "gam peg",
    "天厩增一": "23 and",
    "壁宿增十九": "chi peg",
    "八魁六": "7 cet",
    "土公增三": "35 psc",
    "土公增四": "36 psc",
    "壁宿增十一": "37 psc",
    "天厩一": "tet and",
    "壁宿增十七": "39 psc",
    "天厩三": "sig and",
    "天仓一": "iot cet",
    "壁宿增十六": "40 psc",
    "鸟喙六": "zet tuc",
    "土公增五": "d psc",
    "天厩二": "rho and",
    "壁宿增十二": "42 psc",
    "八魁五": "9 cet",
    "壁宿增十三": "43 psc",
    "王良增四": "12 cas",
    "土公增七": "44 psc",
    "蛇尾一": "bet hyi",
    "土公二": "45 psc",
    "火鸟五": "kap phe",
    "火鸟六": "alf phe",
    "土公增八": "10 cet",
    "壁宿增廿一": "46 psc",
    "壁宿增廿": "47 psc",
    "壁宿增十五": "48 psc",
    "土公增九": "11 cet",
    "天溷增一": "12 cet",
    "奎宿增一": "28 and",
    "壁宿增十四": "49 psc",
    "火鸟八": "lam1 phe",
    "传舍增一": "13 cas",
    "鸟喙四": "bet1 tuc",
    "王良五": "lam cas",
    "土公增六": "51 psc",
    "壁宿增廿二": "52 psc",
    "壁宿增廿三": "52 psc",
    "王良二": "kap cas",
    "传舍二": "16 cas",
    "天溷增二": "13 cet",
    "土公增十": "14 cet",
    "奎宿六": "pi. and",
    "附路": "zet cas",
    "土公增十一": "15 cet",
    "奎宿四": "eps and",
    "奎宿五": "del and",
    "奎宿增三": "54 psc",
    "奎宿增二": "55 psc",
    "王良四": "alf cas",
    "奎宿增廿二": "32 and",
    "火鸟七": "mu. phe",
    "阁道增二": "ksi cas",
    "鸟喙五": "rho tuc",
    "水委三": "eta phe",
    "阁道增一": "pi. cas",
    "土司空": "bet cet",
    "天溷四": "phi1 cet",
    "阁道六": "omi cas",
    "天溷三": "18 cet",
    "少丞增一": "21 cas",
    "奎宿增四": "59 psc",
    "奎宿二": "zet and",
    "外屏增九": "60 psc",
    "少丞": "23 cas",
    "紫微左垣八": "23 cas",
    "外屏增八": "62 psc",
    "外屏一": "del psc",
    "阁道五": "nu. cas",
    "奎宿增五": "64 psc",
    "王良三": "eta cas",
    "奎宿七": "nu. and",
    "奎宿三": "i psc",
    "天溷增六": "phi2 cet",
    "天溷增三": "20 cet",
    "天溷一": "21 cet",
    "奎宿增六": "66 psc",
    "奎宿增九": "36 and",
    "奎宿增十": "k psc",
    "天溷二": "phi3 cet",
    "王良增五": "ups2 cas",
    "策": "gam cas",
    "奎宿八": "mu. and",
    "奎宿一": "eta and",
    "奎宿增十一": "h psc",
    "天溷增五": "phi4 cet",
    "外屏增七": "70 psc",
    "奎宿增十五": "sig psc",
    "奎宿增廿": "39 and",
    "外屏二": "eps psc",
    "天溷增四": "25 cet",
    "外屏增十": "26 cet",
    "外屏增六": "73 psc",
    "外屏增一": "72 psc",
    "天仓增十四": "27 cet",
    "奎宿十六": "psi1 psc",
    "外屏增五": "77 psc",
    "天仓增十三": "28 cet",
    "火鸟九": "bet phe",
    "奎宿十": "76 psc",
    "外屏增二": "75 psc",
    "天仓增十二": "30 cet",
    "奎宿增八": "psi2 psc",
    "外屏增十一": "29 cet",
    "奎宿增十九": "41 and",
    "奎宿增十四": "78 psc",
    "外屏增四": "e psc",
    "水委二": "zet phe",
    "天仓二": "eta cet",
    "勾陈五": "2 umi",
    "军南门": "phi and",
    "奎宿九": "bet and",
    "奎宿增七": "psi3 psc",
    "天仓增十一": "32 cet",
    "奎宿增十八": "44 and",
    "外屏增十二": "33 cet",
    "华盖四": "31 cas",
    "阁道四": "tet cas",
    "奎宿增十三": "g psc",
    "奎宿增十六": "45 and",
    "奎宿十五": "chi psc",
    "奎宿十一": "tau psc",
    "传舍四": "32 cas",
    "天仓增四": "34 cet",
    "外屏增十三": "35 cet",
    "天仓增十": "36 cet",
    "外屏三": "zet psc",
    "奎宿十四": "phi psc",
    "天仓增九": "37 cet",
    "外屏增三": "88 psc",
    "天仓增三": "38 cet",
    "华盖三": "hip 5926",
    "天仓增六": "39 cet",
    "天仓增五": "40 cet",
    "天仓增八": "41 cet",
    "外屏增十四": "f psc",
    "奎宿十三": "ups psc",
    "奎宿增廿三": "ups psc",
    "天仓增二": "42 cet",
    "阁道增三": "phi cas",
    "奎宿十二": "l psc",
    "天大将军增二": "ksi and",
    "天大将军增一": "ksi and",
    "天仓增一": "43 cet",
    "奎宿增十七": "47 and",
    "天仓三": "tet cet",
    "天仓增七": "44 cet",
    "天仓增十五": "46 cet",
    "阁道三": "del cas",
    "华盖五": "psi cas",
    "右更一": "rho psc",
    "右更增一": "94 psc",
    "天仓增十六": "47 cet",
    "天大将军增三": "ome and",
    "火鸟十": "gam phe",
    "𫓧锧一": "48 cet",
    "天大将军四": "49 and",
    "外屏四": "mu. psc",
    "杠九": "38 cas",
    "天园一": "del phe",
    "右更二": "eta psc",
    "阁道增四": "chi cas",
    "天仓增十八": "49 cet",
    "右更增四": "100 psc",
    "右更增二": "101 psc",
    "天仓增十七": "50 cet",
    "天大将军六": "ups and",
    "右更三": "pi. psc",
    "水委一": "alf eri",
    "天大将军三": "51 and",
    "华盖二": "40 cas",
    "右更五": "104 psc",
    "天大将军五": "chi and",
    "天大将军七": "tau and",
    "天大将军增四": "tau and",
    "外屏五": "nu. psc",
    "奎宿增十二": "1 tri",
    "华盖六": "43 cas",
    "娄宿增三": "107 psc",
    "杠八": "42 cas",
    "阁道增五": "44 cas",
    "天大将军二": "phi per",
    "天仓五": "tau cet",
    "右更四": "omi psc",
    "娄宿增二": "3 ari",
    "天仓增廿一": "chi cet",
    "右更增三": "54 cet",
    "天仓四": "zet cet",
    "大陵增四": "1 per",
    "天大将军增十六": "2 per",
    "娄宿增六": "alf tri",
    "天大将军增十一": "55 and",
    "娄宿二": "gam1 ari",
    "外屏六": "ksi psc",
    "阁道二": "eps cas",
    "娄宿一": "bet ari",
    "蛇腹四": "eta2 hyi",
    "天园二": "chi eri",
    "华盖七": "ome cas",
    "天大将军八": "56 and",
    "𫓧锧五": "56 cet",
    "娄宿增一": "iot ari",
    "娄宿增五": "lam ari",
    "天囷增二": "58 cet",
    "天大将军增十五": "3 per",
    "蛇首一": "alf hyi",
    "天仓六": "57 cet",
    "𫓧锧四": "ups cet",
    "外屏增十五": "112 psc",
    "杠七": "a cas",
    "外屏七": "alf psc",
    "大陵增五": "g per",
    "天大将军增五": "eps tri",
    "天囷增四": "60 cet",
    "杠五": "50 cas",
    "娄宿增七": "10 ari",
    "天囷增三": "61 cet",
    "天大将军一": "gam1 and",
    "天庾一": "nu. for",
    "五帝内座二": "47 cas",
    "五帝内座增一": "47 cas",
    "杠三": "49 cas",
    "杠四": "51 cas",
    "娄宿增十一": "kap ari",
    "娄宿增八": "11 ari",
    "娄宿三": "alf ari",
    "天大将军增九": "58 and",
    "杠六": "54 cas",
    "天囷增一": "62 cet",
    "娄宿增九": "14 ari",
    "天大将军九": "bet tri",
    "娄宿增十四": "15 ari",
    "天大将军增十": "59 and",
    "天囷增六": "64 cet",
    "大陵增三": "h per",
    "天囷十二": "63 cet",
    "天大将军增六": "iot tri",
    "天囷十三": "66 cet",
    "娄宿增十二": "eta ari",
    "天囷五": "ksi1 cet",
    "娄宿增十五": "19 ari",
    "天大将军增十二": "b and",
    "大陵增六": "6 per",
    "传舍五": "55 cas",
    "娄宿增十": "20 ari",
    "天大将军增七": "7 tri",
    "天园三": "phi eri",
    "刍藁三": "67 cet",
    "天大将军十一": "del tri",
    "天大将军十": "gam tri",
    "大陵增二": "8 per",
    "大陵增一": "chi per",
    "娄宿增十三": "tet ari",
    "胃宿增一": "10 tri",
    "天大将军增十三": "c and",
    "刍藁增二": "omi cet",
    "大陵增七": "63 and",
    "蛇腹三": "del hyi",
    "天囷增五": "69 cet",
    "天囷十一": "70 cet",
    "大陵一": "i per",
    "大陵增八": "64 and",
    "天囷增七": "ksi ari",
    "刍藁四": "71 cet",
    "大陵增九": "65 and",
    "刍藁一": "rho cet",
    "天园四": "kap eri",
    "大陵增十": "66 and",
    "天囷六": "ksi2 cet",
    "胃宿增二": "12 tri",
    "阁道一": "iot cas",
    "左更增一": "26 ari",
    "北极星": "alf umi",
    "勾陈一": "alf umi",
    "天苑增九": "sig cet",
    "天大将军增八": "14 tri",
    "天大将军增十七": "14 tri",
    "天囷十": "75 cet",
    "天庾二": "ome for",
    "刍藁二": "77 cet",
    "刍藁增三": "79 cet",
    "天囷七": "nu. cet",
    "刍藁增五": "80 cet",
    "天囷增八": "31 ari",
    "刍藁增四": "81 cet",
    "左更一": "nu. ari",
    "天囷九": "del cet",
    "刍藁六": "eps cet",
    "蛇腹二": "eps hyi",
    "天园五": "s eri",
    "天园增一": "iot eri",
    "胃宿增五": "33 ari",
    "天囷增廿": "84 cet",
    "大陵八": "12 per",
    "左更二": "mu. ari",
    "天囷增九": "85 cet",
    "天囷八": "gam cet",
    "胃宿一": "35 ari",
    "大陵增十四": "14 per",
    "天苑七": "pi. cet",
    "大陵增十三": "tet per",
    "左更三": "omi ari",
    "天囷四": "mu. cet",
    "天苑八": "tau1 eri",
    "天苑增八": "tau1 eri",
    "蛇腹一": "zet hyi",
    "胃宿二": "39 ari",
    "左更增二": "40 ari",
    "天庾三": "bet for",
    "左更五": "pi. ari",
    "胃宿三": "c ari",
    "附白二": "nu. hyi",
    "大陵七": "16 per",
    "天船一": "eta per",
    "天苑九": "tau2 eri",
    "左更四": "sig ari",
    "大陵增十六": "17 per",
    "大陵增十五": "20 per",
    "大陵二": "tau per",
    "大陵增十一": "tau per",
    "左更增三": "rho1 ari",
    "左更增五": "rho2 ari",
    "传舍六": "hd 223274",
    "天苑六": "eta eri",
    "左更增四": "rho ari",
    "胃宿增三": "21 per",
    "天苑增六": "4 eri",
    "左更增六": "47 ari",
    "天苑增五": "6 eri",
    "天园六": "tet1 eri",
    "左更增七": "eps ari",
    "天囷增十九": "5 eri",
    "天囷三": "lam cet",
    "天囷增十八": "7 eri",
    "天苑增十": "rho1 eri",
    "天囷一": "alf cet",
    "天囷增十": "93 cet",
    "天苑十": "tau3 eri",
    "天苑增十一": "rho2 eri",
    "天苑增十二": "rho3 eri",
    "天船二": "gam per",
    "大陵六": "rho per",
    "胃宿增四": "52 ari",
    "五帝内座一": "hip 14417",
    "大陵五": "bet per",
    "天阴增一": "54 ari",
    "大陵三": "iot per",
    "大陵四": "kap per",
    "大陵增廿一": "ome per",
    "大陵增十八": "ome per",
    "天阴四": "del ari",
    "天阴增六": "del ari",
    "天苑增三": "alf for",
    "天苑增十七": "alf for",
    "天苑增四": "alf for",
    "天囷增十七": "94 cet",
    "天阴二": "zet ari",
    "天苑五": "zet eri",
    "天苑增十三": "14 eri",
    "大陵增廿": "30 per",
    "天苑增二": "15 eri",
    "天囷增十六": "95 cet",
    "天船增一": "29 per",
    "天船增二": "31 per",
    "天囷增十一": "kap1 cet",
    "天苑十一": "tau4 eri",
    "天园增三": "e eri",
    "紫微右垣七": "bk cam",
    "五帝内座四": "47 cas",
    "天囷二": "kap2 cet",
    "大陵增十九": "l per",
    "天阿": "62 ari",
    "天阴三": "tau2 ari",
    "天阴增二": "64 ari",
    "天船三": "alf per",
    "天廪四": "omi tau",
    "天廪三": "ksi tau",
    "天阴五": "66 ari",
    "传舍七": "cs cam",
    "天船增三": "34 per",
    "传舍九": "ce cam",
    "天廪二": "s tau",
    "天廪增三": "s tau",
    "天船增四": "sig per",
    "天苑增十四": "v eri",
    "天廪一": "f tau",
    "天船增五": "36 per",
    "天廪增一": "t tau",
    "天苑四": "eps eri",
    "天苑十二": "tau5 eri",
    "昴宿增二": "7 tau",
    "卷舌增一": "ix per",
    "天苑增一": "20 eri",
    "天船四": "psi per",
    "天囷增廿一": "v711 tau",
    "天囷增十五": "10 tau",
    "昴宿增三": "9 tau",
    "天园增四": "y eri",
    "天苑增十五": "21 eri",
    "天囷增十二": "12 tau",
    "天苑增十六": "22 eri",
    "昴宿增一": "11 tau",
    "天阴增三": "13 tau",
    "卷舌六": "o per",
    "天园七": "h eri",
    "天船五": "del per",
    "天苑三": "del eri",
    "天阴增四": "14 tau",
    "蛇首二": "bet ret",
    "卷舌五": "omi per",
    "卷舌增七": "omi per",
    "天囷增十四": "24 eri",
    "昴宿增九": "16 tau",
    "昴宿一": "17 tau",
    "天囷增十三": "25 eri",
    "昴宿增八": "18 tau",
    "卷舌一": "nu. per",
    "昴宿二": "q tau",
    "天廪增二": "u tau",
    "昴宿四": "20 tau",
    "昴宿三": "21 tau",
    "上丞增二": "hip 17587",
    "天苑二": "pi. eri",
    "昴宿五": "23 tau",
    "天苑十三": "tau6 eri",
    "附白一": "gam hyi",
    "昴宿六": "eta tau",
    "天苑十四": "tau7 eri",
    "毕宿增一": "e tau",
    "天园八": "f eri",
    "昴宿增十一": "26 tau",
    "昴宿七": "27 tau",
    "昴宿增十二": "28 tau",
    "天园九": "g eri",
    "天谗": "n per",
    "杠一": "gam cam",
    "毕宿增二": "31 tau",
    "九州殊口增三": "29 eri",
    "九州殊口增四": "30 eri",
    "九州殊口增五": "30 eri",
    "天园增五": "i eri",
    "天苑十五": "tau8 eri",
    "卷舌四": "zet per",
    "九州殊口增二": "w eri",
    "昴宿增五": "32 tau",
    "传舍增二": "16 cas",
    "卷舌二": "eps per",
    "天苑一": "gam eri",
    "卷舌三": "ksi per",
    "天苑十六": "tau9 eri",
    "毕宿八": "lam tau",
    "九州殊口增一": "35 eri",
    "毕宿增三": "nu. tau",
    "毕宿增四": "40 tau",
    "月(室宿)": "a1 tau",
    "月增一": "a2 tau",
    "砺石一": "psi tau",
    "卷舌增四": "49 per",
    "卷舌增五": "50 per",
    "天船六": "c per",
    "天街增一": "ome1 tau",
    "五帝内座五": "hip 19461",
    "九州殊口增六": "37 eri",
    "砺石二": "p tau",
    "毕宿增五": "45 tau",
    "九州殊口二": "omi1 eri",
    "毕宿增六": "46 tau",
    "毕宿增十四": "46 tau",
    "毕宿增八": "47 tau",
    "天园增六": "alf hor",
    "九州殊口一": "a eri",
    "夹白二": "alf ret a",
    "卷舌增六": "f per",
    "天船七": "mu. per",
    "九州殊口增七": "omi2 eri",
    "九州殊口增十一": "omi2 eri",
    "毕宿增七": "mu. tau",
    "毕宿增九": "48 tau",
    "金鱼一": "gam dor",
    "天船九": "hip 19949",
    "天街二": "ome tau",
    "天园十": "ups4 eri",
    "天船增十": "b per",
    "毕宿四": "gam tau",
    "天节三": "h tau",
    "砺石四": "phi tau",
    "卷舌增三": "54 per",
    "毕宿增十": "58 tau",
    "少卫增一": "79 dra",
    "天船增六": "d per",
    "砺石三": "chi tau",
    "毕宿三": "del1 tau",
    "毕宿增十一": "63 tau",
    "九州殊口三": "ksi eri",
    "天节八": "r tau",
    "天园十一": "ups3 eri",
    "毕宿增十二": "del2 tau",
    "卷舌增二": "55 per",
    "天街增二": "kap1 tau",
    "天街一": "kap2 tau",
    "毕宿二": "del3 tau",
    "天街增三": "ups tau",
    "毕宿七": "71 tau",
    "天节一": "pi. tau",
    "天街增四": "72 tau",
    "九斿增一": "44 eri",
    "毕宿六": "tet1 tau",
    "毕宿一": "eps tau",
    "毕宿增十三": "tet2 tau",
    "天节四": "b tau",
    "毕宿增十五": "hip 21029",
    "毕宿增十六": "hip 21053",
    "毕宿增十七": "85 tau",
    "九斿增二": "45 eri",
    "天船增九": "1 cam",
    "五车增二": "m per",
    "天园十三": "ups1 eri",
    "天节二": "rho tau",
    "九州殊口增九": "46 eri",
    "金鱼二": "alf dor",
    "九州殊口增八": "47 eri",
    "天园十二": "ups2 eri",
    "天节七": "d tau",
    "毕宿五": "alf tau",
    "九州殊口四": "nu. eri",
    "五车增三": "e per",
    "九斿一": "49 eri",
    "九州殊口增十": "c eri",
    "附耳增二": "89 tau",
    "附耳增三": "89 tau",
    "天节五": "c tau",
    "九斿增四": "l eri",
    "附耳增一": "sig1 tau",
    "附耳": "sig2 tau",
    "附耳增四": "sig2 tau",
    "天船增七": "3 cam",
    "天船增八": "2 cam",
    "天节六": "93 tau a",
    "九斿八": "54 eri",
    "诸王六": "tau tau",
    "五车增一": "59 per",
    "诸王增一": "95 tau",
    "九州殊口六": "55 eri",
    "九州殊口五": "56 eri",
    "九斿二": "mu. eri",
    "九斿七": "58 eri",
    "八谷增一": "4 cam",
    "九斿增五": "59 eri",
    "参旗增一": "96 tau",
    "参旗六": "pi.3 ori",
    "五车增七": "1 aur",
    "九斿六": "60 eri",
    "参旗五": "pi.2 ori",
    "参旗七": "pi.4 ori",
    "天高二": "i tau",
    "参旗一": "omi1 ori",
    "五车增八": "2 aur",
    "九斿三": "ome eri",
    "参旗增十一": "5 ori",
    "紫微右垣六": "alf cam",
    "参旗八": "pi.5 ori",
    "参旗增十二": "pi.5 ori",
    "参旗三": "g ori",
    "参旗四": "pi.1 ori",
    "八谷增三": "5 cam",
    "参旗二": "omi2 ori",
    "九斿增三": "b eri",
    "八谷增二": "6 cam",
    "五车一": "iot aur",
    "八谷五": "7 cam",
    "诸王五": "99 tau",
    "诸王增二": "k tau",
    "参旗九": "pi.6 ori",
    "五车增六": "ome aur",
    "参旗增三": "101 tau",
    "九斿四": "63 eri",
    "九斿五": "64 eri",
    "五车增五": "5 aur",
    "五车增四": "6 aur",
    "玉井二": "psi eri",
    "九斿九": "1 lep",
    "天高一": "iot tau",
    "八谷增十四": "bet cam",
    "九斿增七": "hip 23554",
    "参旗增四": "11 ori",
    "屏二": "eps lep",
    "八谷七": "11 cam",
    "八谷增十三": "12 cam",
    "八谷六": "9 aur",
    "八谷增四": "9 aur",
    "玉井增一": "66 eri",
    "天高增一": "m tau",
    "参旗增八": "13 ori",
    "参旗增九": "13 ori",
    "天高增二": "l tau a",
    "玉井三": "bet eri",
    "参旗增十": "i ori",
    "天高增三": "105 tau",
    "诸王四": "103 tau",
    "玉井增二": "68 eri",
    "天高三": "107 tau",
    "玉井一": "lam eri",
    "参旗增七": "h ori",
    "参旗增五": "15 ori",
    "军井一": "iot lep",
    "屏一": "mu. lep",
    "军井二": "kap lep",
    "参宿增九": "rho ori",
    "天潢五": "mu. aur",
    "八谷四": "14 cam",
    "夹白一": "tet dor",
    "参宿七": "bet ori",
    "天潢三": "14 aur",
    "参旗增六": "18 ori",
    "五车二": "alf aur",
    "参宿增卅八": "tau ori",
    "玉井四": "tau ori",
    "天潢增一": "16 aur",
    "天潢增二": "17 aur",
    "咸池三": "lam aur",
    "参宿增八": "21 ori",
    "天高四": "n tau",
    "八谷增十二": "15 cam",
    "军井三": "lam lep",
    "军井四": "nu. lep",
    "天潢一": "19 aur",
    "参宿增卅九": "hip 25028",
    "参宿增五": "o ori",
    "咸池一": "rho aur",
    "六甲六": "k cam",
    "参宿增十": "m ori",
    "八谷增十一": "16 cam",
    "军井增一": "8 lep",
    "参宿增卅七": "e ori",
    "参宿增三": "eta ori",
    "参宿增四": "p ori",
    "天潢四": "sig aur",
    "参宿增六": "psi1 ori",
    "参宿增七": "psi1 ori",
    "参宿五": "gam ori",
    "天关增一": "113 tau",
    "五车五": "bet tau",
    "参宿增十一": "psi ori",
    "天高增四": "o tau",
    "天潢二": "phi aur",
    "厕二": "bet lep",
    "诸王三": "118 tau",
    "参宿增二": "31 ori",
    "咸池二": "hip 25810",
    "参宿增十三": "a ori",
    "厕增一": "10 lep",
    "丈人二": "eps col",
    "参宿增十二": "n1 ori",
    "参宿增卅六": "ups ori",
    "参宿三": "del ori",
    "八谷增十": "18 cam",
    "厕一": "alf lep",
    "金鱼三": "bet dor",
    "参宿增十四": "n2 ori",
    "觜宿二": "phi1 ori",
    "觜宿一": "lam ori",
    "伐增二": "tet1 ori",
    "伐二": "tet2 ori",
    "伐一": "c ori",
    "伐三": "iot ori",
    "诸王增三": "121 tau",
    "伐增一": "45 ori",
    "参宿二": "eps ori",
    "觜宿三": "phi2 ori",
    "八谷增十五": "19 cam",
    "天关": "zet tau",
    "参宿增一": "sig ori",
    "参宿增卅五": "d ori",
    "参宿增十五": "ome ori",
    "丈人一": "alf col",
    "诸王二": "125 tau",
    "八谷增十六": "21 cam",
    "参宿一": "zet ori",
    "天关增二": "126 tau",
    "厕增八": "12 lep",
    "厕增二": "12 lep",
    "参宿增十六": "b ori",
    "天关增六": "127 tau",
    "八谷增九": "24 cam",
    "八谷增十七": "23 cam",
    "厕三": "gam lep",
    "金鱼四": "del dor",
    "天关增三": "128 tau",
    "五车增十七": "omi aur",
    "屎": "mu. col",
    "八谷三": "26 cam",
    "天关增四": "129 tau",
    "八谷增八": "28 cam",
    "厕增七": "zet lep",
    "水府增二": "131 tau",
    "老人增四": "bet pic",
    "天关增五": "130 tau",
    "水府增一": "133 tau",
    "参宿六": "kap ori",
    "参宿增十七": "52 ori",
    "诸王增四": "132 tau",
    "水府增三": "135 tau",
    "八谷增七": "29 cam",
    "子二": "bet col",
    "厕四": "del lep",
    "参宿增卅四": "55 ori",
    "八谷增十八": "30 cam",
    "水府增四": "137 tau",
    "水府增五": "137 tau",
    "参宿增廿二": "56 ori",
    "子一": "lam col",
    "诸王一": "136 tau",
    "司怪四": "chi1 ori",
    "八谷二": "ksi aur",
    "八谷增六": "ksi aur",
    "司怪增三": "57 ori",
    "八谷八": "31 cam",
    "参宿四": "alf ori",
    "厕增六": "eta lep",
    "子增一": "gam col",
    "司怪一": "139 tau",
    "参宿增廿一": "59 ori",
    "参宿增卅三": "1 mon",
    "参宿增卅二": "2 mon",
    "老人增三": "eta col",
    "八谷一": "del aur",
    "五车三": "bet aur",
    "五车四": "tet aur",
    "八谷增五": "34 cam",
    "五车增十六": "pi. aur",
    "司怪增一": "140 tau",
    "五车增十五": "36 aur",
    "司怪增二": "141 tau",
    "参宿增卅一": "3 mon",
    "参宿增十八": "mu. ori",
    "五车增十": "38 aur",
    "司怪增四": "64 ori",
    "司怪三": "chi2 ori",
    "司怪二": "1 gem",
    "参宿增十九": "63 ori",
    "参宿增廿": "66 ori",
    "厕增四": "17 lep",
    "五车增十一": "39 aur",
    "厕增五": "tet lep",
    "五车增九": "40 aur",
    "孙二": "tet col",
    "水府一": "nu. ori",
    "厕增三": "19 lep",
    "参宿增卅": "4 mon",
    "金鱼五": "nu. dor",
    "八谷增十九": "37 cam",
    "五车增十四": "41 aur",
    "水府二": "ksi ori",
    "司怪增五": "68 ori",
    "水府四": "f1 ori",
    "司怪增六": "71 ori",
    "参宿增廿八": "gam mon",
    "钺": "eta gem",
    "井宿增一": "kap aur",
    "水府三": "f2 ori",
    "八谷增廿": "40 cam",
    "水府增六": "73 ori",
    "水府增七": "k ori",
    "孙一": "kap col",
    "钺增一": "9 gem",
    "水府增八": "l ori",
    "五车增十三": "42 aur",
    "参宿增廿九": "6 mon",
    "八谷增廿一": "1 lyn",
    "五车增十二": "43 aur",
    "上卫增二": "11 cep",
    "八谷增廿六": "2 lyn",
    "参宿增廿七": "7 mon",
    "孙增一": "zet cma",
    "八谷增卅四": "45 aur",
    "八谷增廿五": "4 lyn",
    "孙增三": "del col",
    "孙增四": "del col",
    "八谷增廿二": "3 lyn",
    "军市一": "bet cma",
    "井宿一": "mu. gem",
    "四渎四": "eps mon",
    "老人": "alf car",
    "座旗增一": "psi1 aur",
    "八谷增廿七": "5 lyn",
    "参宿增廿四": "9 mon",
    "四渎增五": "77 ori",
    "四渎增六": "78 ori",
    "参宿增廿五": "10 mon",
    "孙增二": "lam cma",
    "井宿增二": "48 aur",
    "参宿增廿六": "bet mon",
    "井宿二": "nu. gem",
    "座旗增二": "47 aur",
    "八谷增廿八": "6 lyn",
    "军市六": "ksi1 cma",
    "四渎增三": "12 mon",
    "四渎三": "13 mon",
    "四渎增八": "14 mon",
    "井宿增九": "w gem",
    "军市增二": "ksi2 cma",
    "井宿增六": "49 aur",
    "井宿增八": "23 gem",
    "八谷增卅三": "9 lyn",
    "军市增一": "nu.1 cma",
    "野鸡": "nu.2 cma",
    "八谷增卅二": "11 lyn",
    "八谷增廿三": "8 lyn",
    "井宿三": "gam gem",
    "老人增二": "nu. pup",
    "军市二": "nu.3 cma",
    "井宿增三": "53 aur",
    "八谷增廿四": "10 lyn",
    "座旗八": "51 aur",
    "座旗七": "psi3 aur",
    "座旗五": "psi2 aur",
    "井宿增五": "54 aur",
    "四渎增一": "15 mon",
    "井宿增七": "26 gem",
    "座旗三": "psi4 aur",
    "井宿五": "eps gem",
    "井宿增十": "30 gem",
    "井宿增十八": "30 gem",
    "弧矢增一": "10 cma",
    "井宿增四": "28 gem",
    "天狼": "alf cma",
    "井宿四": "ksi gem",
    "井宿增十九": "ksi gem",
    "井宿增十一": "32 gem",
    "六甲一": "hip 32439",
    "四渎增二": "16 mon",
    "座旗四": "psi5 aur",
    "八谷增卅一": "13 lyn",
    "天狼增一": "11 cma",
    "军市增三": "12 cma",
    "四渎二": "17 mon",
    "座旗一": "psi6 aur",
    "阙丘一": "18 mon",
    "金鱼增一": "alf pic",
    "弧矢八": "kap cma",
    "老人增一": "tau pup",
    "井宿增十二": "35 gem",
    "座旗六": "psi7 aur",
    "井宿六": "d gem",
    "座旗九": "59 aur",
    "八谷增廿九": "14 lyn",
    "座旗增三": "60 aur",
    "军市三": "15 cma",
    "紫微右垣五": "43 cam",
    "座旗增四": "psi8 aur",
    "军市五": "omi1 cma",
    "天狼增二": "tet cma",
    "天狼增六": "tet cma",
    "井宿增十三": "e gem",
    "军市四": "17 cma",
    "天樽增一": "37 gem",
    "军市增六": "pi. cma",
    "军市增七": "pi. cma",
    "军市增四": "pi. cma",
    "天狼增三": "mu. cma",
    "天狼增五": "iot cma",
    "八谷增卅": "15 lyn",
    "座旗二": "psi10 aur",
    "弧矢七": "eps cma",
    "座旗增五": "62 aur",
    "天樽增二": "40 gem",
    "井宿增十四": "41 gem",
    "弧矢增二": "sig cma",
    "天樽三": "ome gem",
    "阙丘增四": "19 mon",
    "军市增五": "omi2 cma",
    "天狼增四": "gam cma",
    "井宿七": "zet gem",
    "天樽增六": "44 gem",
    "弧矢增廿五": "fv cma",
    "井宿增十五": "45 gem",
    "弧矢一": "del cma",
    "飞鱼二": "gam2 vol",
    "阙丘增五": "20 mon",
    "天樽增三": "47 gem",
    "阙丘二": "21 mon",
    "座旗增六": "63 aur",
    "阙丘增三": "del mon",
    "弧矢增五": "26 cma",
    "天樽增五": "48 gem",
    "井宿增十六": "hip 34858",
    "阙丘增二": "23 mon",
    "井宿增十七": "51 gem",
    "弧矢增四": "27 cma",
    "天樽增四": "52 gem",
    "弧矢增三": "ome cma",
    "阙丘增一": "24 mon",
    "内阶增二": "18 lyn",
    "飞鱼五": "del vol",
    "弧矢九": "pi. pup",
    "座旗增七": "64 aur",
    "井宿八": "lam gem",
    "弧矢增七": "29 cma",
    "弧矢增六": "tau cma",
    "天樽二": "del gem",
    "天樽增七": "56 gem",
    "座旗增十一": "20 lyn",
    "内阶增一": "19 lyn",
    "天樽一": "a gem",
    "弧矢二": "eta cma",
    "座旗增八": "66 aur",
    "水位增一": "1 cmi",
    "南河一": "eps cmi",
    "座旗增九": "21 lyn",
    "天樽增八": "61 gem",
    "南河二": "bet cmi",
    "天樽增九": "63 gem",
    "南河增二": "eta cmi",
    "南河增一": "gam cmi",
    "北河一": "rho gem",
    "弧矢增廿四": "sig pup",
    "水位一": "6 cmi",
    "座旗增十": "22 lyn",
    "南河增五": "del1 cmi",
    "南河增四": "del2 cmi",
    "水位增二": "68 gem",
    "南河增三": "del3 cmi",
    "北河二": "alf gem",
    "阙丘增六": "25 mon",
    "北河增一": "70 gem",
    "弧矢六": "k pup",
    "北河增二": "omi gem",
    "南河三": "alf cmi",
    "弧矢增廿": "d1 pup",
    "水位增三": "f gem",
    "阙丘增七": "alf mon",
    "飞鱼六": "zet vol",
    "内阶增三": "24 lyn",
    "北河增四": "sig gem",
    "弧矢增十九": "l pup",
    "积薪增一": "c gem",
    "积薪": "kap gem",
    "弧矢三": "c pup",
    "北河三": "bet gem",
    "弧矢增八": "2 pup",
    "弧矢增九": "4 pup",
    "水位增四": "g gem",
    "水位二": "11 cmi",
    "北河增三": "pi. gem",
    "弧矢增十": "5 pup",
    "弧矢五": "omi pup",
    "积薪增二": "82 gem",
    "弧矢增十七": "ksi pup",
    "弧矢增十二": "6 pup",
    "南河增六": "zet cmi",
    "弧矢增廿三": "a pup",
    "弧矢增十一": "10 pup",
    "弧矢增廿一": "b pup",
    "积薪增三": "84 gem",
    "上台增三": "25 lyn",
    "上台增二": "26 lyn",
    "水位增五": "85 gem",
    "天社增一": "chi car",
    "弧矢增十五": "j pup",
    "水位增九": "1 cnc",
    "弧矢四": "chi pup",
    "南河增七": "14 cmi",
    "弧矢增卅一": "12 pup",
    "弧矢增十六": "12 pup",
    "南河增十": "27 mon",
    "水位增七": "3 cnc",
    "爟增二": "ome1 cnc",
    "南河增九": "28 mon",
    "水位增八": "5 cnc",
    "爟增一": "ome2 cnc",
    "南河增八": "13 pup",
    "爟增三": "chi gem",
    "弧矢增廿二": "zet pup",
    "弧矢增十四": "14 pup",
    "六甲三": "vz cam",
    "水位三": "8 cnc",
    "弧矢增卅二": "rho pup",
    "水位增六": "mu. cnc",
    "上台增一": "27 lyn",
    "外厨增一": "zet mon",
    "水位增十一": "12 cnc",
    "爟增四": "11 cnc",
    "弧矢增十三": "16 pup",
    "天社一": "gam vel",
    "爟增五": "psi1 cnc",
    "爟一": "psi cnc",
    "外厨增十四": "18 pup",
    "外厨增十六": "19 pup",
    "水位四": "zet1 cnc",
    "爟四": "15 cnc",
    "外厨增十三": "20 pup",
    "柳宿增十": "bet cnc",
    "外厨增十一": "21 pup",
    "内阶增五": "29 lyn",
    "小斗增一": "alf cha",
    "飞鱼四": "kap1 vol",
    "爟增六": "chi cnc",
    "内阶增四": "30 lyn",
    "爟二": "lam cnc",
    "小斗八": "tet cha",
    "海石一": "eps car",
    "外厨增十七": "22 pup d",
    "上台增四": "31 lyn",
    "鬼宿增二": "d1 cnc",
    "柳宿增九": "21 cnc",
    "外厨增二": "1 hya",
    "外厨增三": "c hya",
    "飞鱼三": "bet vol",
    "鬼宿增三": "d2 cnc",
    "鬼宿增十九": "d2 cnc",
    "外厨一": "2 hya",
    "爟三": "phi1 cnc",
    "爟增七": "phi1 cnc",
    "爟增九": "24 cnc",
    "鬼宿增五": "27 cnc",
    "爟增八": "phi2 cnc",
    "爟增十": "28 cnc",
    "鬼宿增四": "29 cnc",
    "内阶一": "omi uma",
    "爟增十一": "ups1 cnc",
    "鬼宿一": "tet cnc",
    "柳宿增八": "34 cnc",
    "鬼宿二": "eta cnc",
    "内阶增八": "a uma",
    "轩辕增八": "33 lyn",
    "鬼宿增一": "35 cnc",
    "外厨增四": "3 hya",
    "柳宿增七": "c cnc",
    "天狗一": "e vel",
    "柳宿一": "del hya",
    "柳宿增六": "37 cnc",
    "柳宿二": "sig hya",
    "内阶增九": "pi.1 uma",
    "轩辕增十": "2 lmi",
    "轩辕增九": "3 lmi",
    "外厨增八": "a hya a",
    "天狗四": "bet pyx",
    "内阶增七": "pi.2 uma",
    "天社二": "b vel",
    "外厨增十": "9 hya",
    "鬼宿增六": "a1 cnc",
    "柳宿三": "eta hya",
    "鬼宿三": "gam cnc",
    "天狗五": "alf pyx",
    "外厨二": "f hya",
    "天狗二": "d vel",
    "鬼宿四": "del cnc",
    "天社三": "del vel",
    "柳宿增五": "b cnc",
    "柳宿增一": "10 hya",
    "轩辕增十一": "46 cnc",
    "天社增二": "a vel",
    "外厨增九": "d hya",
    "轩辕增廿二": "iot cnc",
    "柳宿五": "eps hya",
    "鬼宿增七": "a2 cnc",
    "柳宿四": "rho hya",
    "外厨三": "14 hya",
    "天狗六": "gam pyx",
    "鬼宿增八": "54 cnc",
    "鬼宿增九": "52 cnc",
    "外厨增六": "15 hya",
    "上台增五": "35 lyn",
    "轩辕增廿一": "53 cnc",
    "轩辕增七": "sig1 cnc",
    "轩辕增廿": "rho1 cnc",
    "轩辕增十九": "rho1 cnc",
    "内阶五": "b uma",
    "轩辕增十二": "57 cnc",
    "海石增二": "c car",
    "柳宿六": "zet hya",
    "外厨增七": "17 hya",
    "天狗七": "del pyx",
    "轩辕增十八": "rho2 cnc",
    "柳宿增十二": "60 cnc",
    "柳宿增四": "60 cnc",
    "内阶三": "6 uma",
    "轩辕增六": "sig2 cnc",
    "鬼宿增十": "omi1 cnc",
    "鬼宿增十一": "omi2 cnc",
    "轩辕增十三": "61 cnc",
    "柳宿增三": "alf cnc",
    "柳宿增十三": "alf cnc",
    "三台一": "iot uma",
    "上台一": "iot uma",
    "轩辕增五": "sig3 cnc",
    "轩辕一": "10 uma",
    "轩辕增四": "66 cnc",
    "鬼宿增十二": "68 cnc",
    "轩辕增十七": "67 cnc",
    "飞鱼一": "alf vol",
    "三师一": "rho uma",
    "轩辕增廿三": "nu. cnc",
    "三台二": "kap uma",
    "上台二": "kap uma",
    "天社增三": "c vel",
    "轩辕增十六": "70 cnc",
    "鬼宿增十三": "71 cnc",
    "柳宿七": "ome hya",
    "柳宿增二": "kap cnc",
    "天记": "lam vel",
    "轩辕增十四": "tau cnc",
    "三师三": "sig1 uma",
    "星宿增四": "19 hya",
    "轩辕增十五": "75 cnc",
    "文昌五": "f uma",
    "鬼宿增十四": "78 cnc",
    "轩辕增廿四": "ksi cnc",
    "星宿增三": "20 hya",
    "轩辕增五八": "79 cnc",
    "三师增一": "sig2 uma",
    "内阶增十": "tau uma",
    "海石增一": "a car",
    "海石增三": "i car",
    "鬼宿增十八": "pi.1 cnc",
    "星宿增五": "21 hya",
    "南船五": "bet car",
    "上台增六": "36 lyn",
    "内阶二": "c uma",
    "柳宿八": "tet hya",
    "鬼宿增十六": "pi. cnc",
    "轩辕增三": "19 uma",
    "内阶六": "17 uma",
    "文昌六": "e uma",
    "星宿增二": "24 hya",
    "星宿增六": "23 hya",
    "海石二": "iot car",
    "轩辕三": "38 lyn",
    "鬼宿增十五": "83 cnc",
    "星宿六": "26 hya",
    "星宿五": "p hya",
    "文昌增五": "37 ly",
    "轩辕四": "alf lyn",
    "天社五": "kap vel",
    "文昌增六": "39 lyn",
    "轩辕增廿五": "6 lmi",
    "小斗六": "iot cha",
    "轩辕七": "kap leo",
    "星宿增七": "28 hya",
    "文昌增三": "21 uma",
    "星宿增一": "29 hya",
    "星宿一": "alf hya",
    "酒旗三": "ome leo",
    "酒旗增五": "3 leo",
    "上台增七": "41 lyn",
    "星宿二": "tau1 hya",
    "天记增一": "psi vel",
    "轩辕增二": "7 lmi",
    "天社六": "n vel",
    "内阶四": "h uma",
    "轩辕增一": "8 lmi",
    "轩辕八": "lam leo",
    "酒旗二": "ksi leo",
    "酒旗增四": "6 leo",
    "星宿三": "tau2 hya",
    "文昌四": "tet uma",
    "内平增五": "9 lmi",
    "小斗五": "zet cha",
    "内平增六": "10 lmi",
    "海石三": "h car",
    "少辅": "d uma",
    "紫微右垣四": "d uma",
    "星宿增八": "a hya",
    "文昌增四": "26 uma",
    "内平增七": "11 lmi",
    "酒旗增二": "7 leo",
    "酒旗增一": "8 leo",
    "轩辕增四五": "10 leo",
    "轩辕增廿六": "9 leo",
    "星宿增十五": "34 hya",
    "酒旗增三": "11 leo",
    "内平增四": "42 lyn",
    "轩辕增四六": "2 sex",
    "星宿增十三": "37 hya",
    "星宿四": "iot hya",
    "张宿五": "kap hya",
    "轩辕十五": "omi leo",
    "轩辕增五九": "omi leo",
    "轩辕增廿七": "13 leo",
    "内平增三": "43 lyn",
    "内平三": "13 lmi",
    "少辅增一": "27 uma",
    "轩辕六": "f leo",
    "酒旗一": "psi leo",
    "海石四": "l car",
    "轩辕九": "eps leo",
    "文昌增一": "28 uma",
    "轩辕增四四": "18 leo",
    "文昌增二": "44 lyn",
    "海石五": "ups car",
    "星宿增十": "3 sex",
    "轩辕增廿九": "20 leo",
    "内平增二": "16 lmi",
    "轩辕增四八": "4 sex",
    "星宿增十一": "5 sex",
    "文昌二": "ups uma",
    "轩辕增四三": "23 leo",
    "星宿增九": "6 sex",
    "张宿一": "ups1 hya",
    "轩辕增廿八": "g leo",
    "文昌三": "phi uma",
    "轩辕增四七": "7 sex",
    "内平增一": "17 lmi",
    "星宿增十二": "gam sex",
    "轩辕十": "mu. leo",
    "轩辕增四九": "9 sex",
    "文昌增七": "31 uma",
    "轩辕增四十": "10 sex",
    "内平四": "18 lmi",
    "中台增二": "19 lmi",
    "轩辕增卅九": "11 sex",
    "轩辕增四二": "nu. leo",
    "轩辕增五十": "12 sex",
    "轩辕增卅八": "pi. leo",
    "内平增九": "20 lmi",
    "张宿四": "hip 49321",
    "轩辕增五一": "13 sex",
    "张宿增一": "ups2 hya",
    "轩辕增五二": "14 sex",
    "轩辕十三": "eta leo",
    "内平二": "21 lmi",
    "轩辕十七": "31 leo",
    "御女": "31 leo",
    "轩辕十四": "alf leo",
    "天相一": "17 sex",
    "张宿二": "lam hya",
    "轩辕增卅四": "33 leo",
    "天相增一": "18 sex",
    "轩辕增卅七": "34 leo",
    "轩辕增五三": "19 sex",
    "轩辕增五四": "19 sex",
    "南船四": "ome car",
    "天相增三": "20 sex",
    "天相增二": "21 sex",
    "天记增二": "q vel",
    "内平一": "22 lmi",
    "内平增十": "23 lmi",
    "内平增十一": "24 lmi",
    "轩辕增卅": "35 leo",
    "轩辕增卅六": "37 leo",
    "轩辕十一": "zet leo",
    "南船一": "q car",
    "三台三": "lam uma",
    "中台一": "lam uma",
    "轩辕增卅一": "39 leo",
    "天相三": "eps sex",
    "天枢增一": "32 uma",
    "轩辕增卅二": "40 leo",
    "轩辕增卅三": "40 leo",
    "轩辕十二": "gam1 leo",
    "长垣增四": "23 sex",
    "中台增三": "25 lmi",
    "轩辕增卅五": "42 leo",
    "三台四": "mu. uma",
    "中台二": "mu. uma",
    "轩辕增五五": "43 leo",
    "势增六": "26 lmi",
    "势增七": "27 lmi",
    "势增十七": "27 lmi",
    "天相增四": "25 sex",
    "天相增八": "24 sex",
    "势增八": "28 lmi",
    "势增十八": "28 lmi",
    "南船增一": "i car",
    "轩辕增五六": "44 leo",
    "势增五": "29 lmi",
    "势增九": "30 lmi",
    "势增十九": "30 lmi",
    "张宿三": "mu. hya",
    "天相增九": "26 sex",
    "天相增五": "27 sex",
    "轩辕增五七": "45 leo",
    "海山一": "s car",
    "势增四": "bet lmi",
    "天相增六": "del sex",
    "四辅二": "hip 51384",
    "天枢增二": "35 uma",
    "势增三": "32 lmi",
    "天相增十": "bet sex",
    "长垣增五": "31 sex",
    "天璇增一": "36 uma",
    "四辅三": "hip 51502",
    "势二": "h lmi",
    "南船二": "p car",
    "长垣一": "46 leo",
    "长垣增三": "32 sex",
    "张宿增二": "phi1 hya",
    "轩辕十六": "rho leo",
    "势一": "34 lmi",
    "张宿增四": "44 hya",
    "阴德二": "hd 91114",
    "长垣四": "48 leo",
    "长垣增二": "49 leo",
    "天璇增二": "37 uma",
    "小斗三": "gam cha",
    "张宿增三": "phi2 hya",
    "势增一": "35 lmi",
    "海山增一": "p vel",
    "势增十": "36 lmi",
    "张宿六": "phi hya",
    "势增十一": "37 lmi",
    "长垣增一": "50 leo",
    "势增二": "38 lmi",
    "少微增一": "39 lmi",
    "天相增十一": "33 sex",
    "天枢增三": "38 uma",
    "长垣增六": "34 sex",
    "南船三": "tet car",
    "少微增二": "40 lmi",
    "长垣增七": "35 sex",
    "少微三": "41 lmi",
    "天璇增五": "39 uma",
    "灵台增二": "36 sex",
    "小斗四": "del2 cha",
    "势三": "42 lmi",
    "天璇增六": "40 uma",
    "长垣增八": "37 sex",
    "天璇增四": "41 uma",
    "少微四": "m leo",
    "长垣二": "k leo",
    "海山增二": "mu. vel",
    "翼宿增三": "b1 hya",
    "长垣增九": "38 sex",
    "势增十四": "43 lmi",
    "翼宿增二": "39 sex",
    "长垣三": "l leo",
    "天相增十二": "40 sex",
    "翼宿五": "nu. hya",
    "势增十六": "44 lmi",
    "势增十五": "44 lmi",
    "翼宿增一": "41 sex",
    "翼宿增四": "5 crt",
    "天璇增七": "43 uma",
    "天璇增三": "42 uma",
    "势四": "o lmi",
    "翼宿增五": "b3 hya",
    "天璇增八": "44 uma",
    "天牢一": "ome uma",
    "少微增三": "48 lmi",
    "势增十二": "47 lmi",
    "少微二": "54 leo",
    "少微增九": "54 leo",
    "灵台增三": "55 leo",
    "势增十三": "46 uma",
    "少微增八": "49 lmi",
    "灵台增一": "56 leo",
    "灵台增四": "57 leo",
    "少微增四": "50 lmi",
    "天牢三": "47 uma",
    "翼宿一": "alf crt",
    "灵台三": "d leo",
    "灵台二": "c leo",
    "天牢五": "49 uma",
    "灵台增五": "p2 leo",
    "北斗二": "bet uma",
    "天璇": "bet uma",
    "西上相增一": "b leo",
    "翼宿增六": "8 crt",
    "灵台增七": "p3 leo",
    "北斗一": "alf uma",
    "天枢": "alf uma",
    "灵台一": "chi leo",
    "少微增五": "51 lmi",
    "翼宿廿": "chi1 hya",
    "灵台增八": "p4 leo",
    "少微一": "52 lmi",
    "少微增七": "64 leo",
    "翼宿增七": "10 crt",
    "少微增六": "67 leo",
    "灵台增六": "66 leo",
    "太尊": "psi uma",
    "翼宿十六": "bet crt",
    "明堂增五": "p5 leo",
    "太微右垣五": "del leo",
    "西上相": "del leo",
    "太微右垣四": "tet leo",
    "西次相": "tet leo",
    "虎贲": "72 leo",
    "西次相增三": "n leo",
    "明堂增六": "phi leo",
    "明堂增四": "75 leo",
    "三台六": "ksi uma",
    "下台二": "ksi uma",
    "三台五": "nu. uma",
    "下台一": "nu. uma",
    "天牢增二": "55 uma",
    "翼宿七": "del crt",
    "太微右垣二": "sig leo",
    "西上将": "sig leo",
    "天牢六": "56 uma",
    "翼宿四": "lam crt",
    "太微右垣三": "iot leo",
    "西次将": "iot leo",
    "明堂增三": "79 leo",
    "翼宿十": "eps crt",
    "翼宿二": "gam crt",
    "西次相增二": "81 leo",
    "明堂增二": "80 leo",
    "翼宿九": "kap crt",
    "明堂一": "tau leo",
    "天牢二": "57 uma",
    "五帝座增二": "85 leo",
    "明堂三": "e leo",
    "明堂增七": "e leo",
    "西上相增二": "86 leo",
    "天牢四": "58 uma",
    "上辅": "lam dra",
    "紫微右垣三": "lam dra",
    "五帝座增三": "88 leo",
    "青丘三": "n hya",
    "青丘四": "18 crt",
    "青丘五": "ksi hya",
    "明堂增一": "89 leo",
    "青丘六": "20 crt",
    "五帝座增一": "90 leo",
    "海山五": "lam cen",
    "上辅增一": "2 dra",
    "青丘增三": "22 crt",
    "翼宿十三": "tet crt",
    "明堂二": "ups leo",
    "青丘增二": "23 crt",
    "天牢增一": "59 uma",
    "内屏增一": "ome vir",
    "太阳守增一": "60 uma",
    "翼宿八": "iot crt",
    "青丘七": "omi hya",
    "下台增一": "61 uma",
    "下台增二": "62 uma",
    "青丘增一": "26 crt",
    "上辅增二": "3 dra",
    "翼宿三": "zet crt",
    "五帝座三": "hip 57320",
    "内屏一": "ksi vir",
    "海山六": "lam mus",
    "内屏二": "nu. vir",
    "太阳守": "chi uma",
    "内屏增二": "a1 vir",
    "太子": "gam umi",
    "翼宿十四": "hip 57587",
    "五帝座一": "bet leo",
    "太微右垣一": "bet vir",
    "右执法": "bet vir",
    "五帝座五": "hip 57779",
    "青丘一": "bet hya",
    "北斗三": "gam uma",
    "天玑": "gam uma",
    "内屏增三": "a2 vir",
    "青丘二": "29 crt",
    "五帝座四": "o leo",
    "天理三": "66 uma",
    "翼宿六": "eta crt",
    "小斗二": "eps cha",
    "内屏增六": "b vir",
    "轸宿增三": "31 crt",
    "内屏三": "pi. vir",
    "常陈七": "67 uma",
    "郎位十五": "2 com",
    "内屏四": "omi vir",
    "马尾三": "del cen",
    "右辖": "alf crv",
    "谒者增一": "10 vir",
    "内屏增五": "11 vir",
    "轸宿二": "eps crv",
    "轸宿增四": "3 crv",
    "马尾二": "rho cen",
    "郎位增三": "4 com",
    "郎位十四": "5 com",
    "内屏增四": "12 vir",
    "相增一": "1 cvn",
    "十字架四": "del cru",
    "北斗四": "del uma",
    "天权": "del uma",
    "轸宿一": "gam crv",
    "常陈六": "2 cvn",
    "郎位十": "7 com",
    "小斗一": "bet cha",
    "左执法增一": "13 vir",
    "轸宿增二": "14 vir",
    "郎位增二": "9 com",
    "相增二": "3 cvn",
    "郎位增一": "10 com",
    "太微左垣一": "eta vir",
    "左执法": "eta vir",
    "谒者": "c vir",
    "长沙": "zet crv",
    "天权增二": "70 uma",
    "郎位七": "12 com",
    "谒者增二": "17 vir",
    "轸宿增五": "6 crv",
    "常陈增一": "4 cvn",
    "相": "5 cvn",
    "郎位六": "13 com",
    "常陈五": "6 cvn",
    "郎位三": "14 com",
    "马尾一": "g cen",
    "十字架二": "alf1 cru",
    "郎位一": "gam com",
    "郎位四": "16 com",
    "天权增三": "73 uma",
    "库楼十": "sig cen",
    "郎位五": "17 com",
    "郎位九": "18 com",
    "郎位十三": "20 com",
    "轸宿三": "del crv",
    "天权增一": "74 uma",
    "少尉增二": "4 dra",
    "郎位八": "21 com",
    "十字架一": "gam cru",
    "左辖": "eta crv",
    "蜜蜂二": "gam mus",
    "九卿增八": "20 vir",
    "九卿增九": "20 vir",
    "少尉": "kap dra",
    "紫微右垣二": "kap dra",
    "常陈四": "bet cvn",
    "轸宿增一": "q vir",
    "轸宿四": "bet crv",
    "少尉增一": "6 dra",
    "郎位十一": "23 com",
    "进贤增九": "f vir",
    "蜜蜂三": "alf mus",
    "库楼八": "tau cen",
    "常陈三": "9 cvn",
    "郎位十二": "26 com",
    "进贤增八": "chi vir",
    "库楼七": "gam cen",
    "内厨增二": "76 uma",
    "九卿增五": "27 vir",
    "东上相": "gam vir",
    "太微左垣二": "gam vir",
    "九卿一": "rho vir",
    "进贤增七": "28 vir",
    "常陈二": "10 cvn",
    "九卿二": "d2 vir",
    "蜜蜂一": "bet mus",
    "九卿增六": "33 vir",
    "九卿增四": "34 vir",
    "内厨一": "7 dra",
    "十字架三": "bet cru",
    "九卿增三": "28 com",
    "相增三": "11 cvn",
    "九卿增二": "29 com",
    "九卿增一": "29 com",
    "北极五": "hip 62561",
    "郎将增一": "30 com",
    "东次相增一": "37 vir",
    "郎将": "31 com",
    "进贤增一": "38 vir",
    "东次将增一": "41 vir",
    "北斗五": "eps uma",
    "玉衡": "eps uma",
    "进贤增五": "psi vir",
    "内厨二": "8 dra",
    "东次相": "del vir",
    "太微左垣三": "del vir",
    "常陈一": "alf2 cvn",
    "进贤": "k vir",
    "进贤增二": "k vir",
    "内厨增一": "9 dra",
    "周鼎二": "37 com",
    "进贤增三": "46 vir",
    "东次将": "eps vir",
    "太微左垣四": "eps vir",
    "蜜蜂四": "del mus",
    "进贤增四": "48 vir",
    "库楼六": "f cen",
    "周鼎三": "41 com",
    "角宿增十五": "49 vir",
    "平增一": "psi hya",
    "常陈增五": "15 cvn",
    "角宿增十四": "50 vir",
    "平道一": "tet vir",
    "东上将": "alf com",
    "太微左垣五": "alf com",
    "常陈增四": "16 cvn",
    "常陈增六": "17 cvn",
    "常陈增二": "18 cvn",
    "周鼎一": "bet com",
    "天门一": "53 vir",
    "天门增三": "54 vir",
    "天门增二": "55 vir",
    "角宿增十二": "56 vir",
    "角宿增十三": "56 vir",
    "天门增一": "57 vir",
    "东次将增三": "e vir",
    "角宿增十一": "58 vir",
    "常陈增三": "20 cvn",
    "三公三": "21 cvn",
    "天门增四": "61 vir",
    "平一": "gam hya",
    "角宿增十": "62 vir",
    "天门增五": "63 vir",
    "角宿增一": "65 vir",
    "北斗六": "zet uma",
    "开阳": "zet uma",
    "角宿增十六": "66 vir",
    "角宿一": "alf vir",
    "辅": "g uma",
    "开阳增一": "g uma",
    "角宿增九": "i vir",
    "天门二": "69 vir",
    "东上将增一": "70 vir",
    "东上将增二": "71 vir",
    "角宿增二": "72 vir",
    "库楼五": "d cen",
    "角宿增三": "l vir",
    "天门增十一": "73 vir",
    "天门增六": "75 vir",
    "角宿增八": "h vir",
    "三公二": "24 cvn",
    "角宿二": "zet vir",
    "角宿增四": "80 vir",
    "角宿增五": "81 vir",
    "开阳增二": "82 uma",
    "东上将增四": "hip 66640",
    "南门一": "eps cen",
    "右摄提增三": "1 boo",
    "辅增一": "83 uma",
    "右摄提增二": "2 boo",
    "平道二": "m vir",
    "天门增七": "83 vir",
    "天门增八": "85 vir",
    "角宿增七": "86 vir",
    "辅增二": "84 uma",
    "帝席增一": "3 boo",
    "右摄提二": "tau boo",
    "右摄提增五": "tau boo",
    "天门增十": "87 vir",
    "北斗七": "eta uma",
    "摇光": "eta uma",
    "角宿增六": "88 vir",
    "库楼四": "g cen",
    "右摄提三": "ups boo",
    "衡一": "nu. cen",
    "衡二": "mu. cen",
    "右摄提增一": "e boo",
    "天门增九": "89 vir",
    "天乙": "i dra",
    "右摄提增六": "7 boo",
    "辅增三": "86 uma",
    "右摄提一": "eta boo",
    "库楼一": "zet cen",
    "帝席三": "9 boo",
    "衡三": "phi cen",
    "平增二": "47 hya",
    "平增四": "47 hya",
    "平增三": "48 hya",
    "帝席二": "11 boo",
    "马腹一": "bet cen",
    "右枢": "alf dra",
    "紫微右垣一": "alf dra",
    "衡四": "chi cen",
    "亢宿增一": "94 vir",
    "平二": "pi. hya",
    "库楼三": "tet cen",
    "亢宿增二": "95 vir",
    "庶子增二": "3 umi",
    "天枪增一": "13 boo",
    "北极四": "4 umi",
    "后宫": "4 umi",
    "亢宿增三": "96 vir",
    "帝席一": "d boo",
    "亢宿增四": "97 vir",
    "折威一": "50 hya",
    "折威增一": "50 hya",
    "亢宿一": "kap vir",
    "天枪一": "kap1 boo",
    "亢池三": "14 boo",
    "大角": "alf boo",
    "亢宿二": "iot vir",
    "天枪二": "iot boo",
    "玄戈": "lam boo",
    "异雀七": "eta aps",
    "亢宿四": "lam vir",
    "亢池四": "18 boo",
    "亢宿增十二": "ups vir",
    "亢池一": "20 boo",
    "亢宿增十一": "103 vir",
    "异雀九": "eps aps",
    "折威增二": "k hya",
    "天枪三": "tet boo",
    "大角增一": "f boo",
    "异雀五": "del oct",
    "亢宿增六": "104 vir",
    "北极三": "5 umi",
    "庶子": "5 umi",
    "亢宿三": "phi vir",
    "天枪增二": "g boo",
    "亢宿增五": "106 vir",
    "梗河三": "rho boo",
    "招摇": "gam boo",
    "车骑三": "sig lup",
    "梗河二": "sig boo",
    "库楼二": "eta cen",
    "车骑二": "rho lup",
    "玄戈增一": "33 boo",
    "折威三": "3 lib",
    "南门二": "alf1 cen",
    "左摄提二": "pi.1 boo",
    "左摄提三": "zet boo",
    "左摄提增三": "31 boo",
    "左摄提增二": "32 boo",
    "骑官十": "alf lup",
    "阳门一": "b cen",
    "南门增二": "alf cir",
    "亢宿增七": "mu. vir",
    "折威四": "4 lib",
    "折威五": "4 lib",
    "梗河增五": "34 boo",
    "阳门二": "c1 cen",
    "梗河一": "eps boo",
    "左摄提一": "omi boo",
    "亢宿增九": "108 vir",
    "天床六": "6 umi",
    "氐宿增六": "5 lib",
    "折威增三": "m hya",
    "亢宿增十": "109 vir",
    "折威增四": "55 hya",
    "折威增五": "56 hya",
    "异雀八": "alf aps",
    "折威增七": "57 hya",
    "玄戈增二": "h boo",
    "氐宿增五": "mu. lib",
    "天枪增三": "39 boo",
    "阵车一": "e hya",
    "阵车增一": "e hya",
    "氐宿增七": "alf1 lib",
    "北极二": "bet umi",
    "帝": "bet umi",
    "氐宿一": "alf2 lib",
    "亢宿增八": "11 lib",
    "左摄提增一": "ksi boo",
    "骑官九": "omi lup",
    "氐宿增八": "10 lib",
    "折威六": "12 lib",
    "氐宿增四": "ksi1 lib",
    "氐宿增三": "ksi2 lib",
    "氐宿增廿九": "16 lib",
    "折威增六": "14 lib",
    "氐宿增卅": "17 lib",
    "骑官四": "bet lup",
    "阵车增二": "59 hya",
    "氐宿增二": "18 lib",
    "骑官三": "kap cen",
    "七公增六": "40 boo",
    "天床增一": "9 umi",
    "氐宿增一": "del lib",
    "氐宿增廿八": "2 ser",
    "七公增五": "bet boo",
    "阵车二": "60 hya",
    "梗河增四": "ome boo",
    "氐宿增廿七": "110 vir",
    "天枪增四": "i boo",
    "折威七": "sig lib",
    "梗河增一": "psi boo",
    "骑官八": "pi. lup",
    "庶子增三": "10 umi",
    "氐宿增十": "nu. lib",
    "氐宿增九": "22 lib",
    "梗河增三": "c boo",
    "梗河增二": "b boo",
    "骑官五": "lam lup",
    "骑阵将军": "kap1 lup",
    "氐宿二": "iot1 lib",
    "车骑一": "zet lup",
    "氐宿增十一": "iot2 lib",
    "贯索增一": "chi boo",
    "氐宿增十二": "26 lib",
    "顿顽二": "i lup",
    "蜀增二": "3 ser",
    "七公七": "del boo",
    "氐宿增廿六": "4 ser",
    "氐宿四": "bet lib",
    "天床增二": "11 umi",
    "阵车三": "f lup",
    "骑官七": "mu. lup",
    "三角形一": "gam tra",
    "氐宿增廿四": "5 ser",
    "贯索增二": "omi crb",
    "北极一": "gam umi",
    "氐宿增十三": "28 lib",
    "氐宿增十七": "omi lib",
    "氐宿增廿五": "6 ser",
    "骑官二": "del lup",
    "顿顽一": "phi1 lup",
    "骑官六": "eps lup",
    "氐宿增十八": "30 lib",
    "顿顽增一": "phi2 lup",
    "贯索增三": "eta crb",
    "氐宿增廿": "eps lib",
    "七公六": "mu.1 boo",
    "紫微左垣一": "iot dra",
    "左枢": "iot dra",
    "周增一": "tau1 ser",
    "贯索三": "bet crb",
    "氐宿增十六": "zet1 lib",
    "氐宿增廿三": "10 ser",
    "氐宿增十五": "zet3 lib",
    "七公五": "nu.1 boo",
    "勾陈增七": "tet umi",
    "三角形增三": "kap1 aps",
    "七公增九": "nu.2 boo",
    "氐宿增十四": "zet lib",
    "贯索二": "tet crb",
    "氐宿增廿一": "a1 ser",
    "氐宿增十九": "37 lib",
    "天辐增一": "36 lib",
    "贯索四": "alf crb",
    "秦": "del ser",
    "天市右垣六": "del ser",
    "骑官一": "gam lup",
    "七公增八": "mu. crb",
    "氐宿三": "gam lib",
    "周增五": "tau3 ser",
    "周增二": "tau4 ser",
    "周增三": "tau5 ser",
    "秦增二": "16 ser",
    "氐宿增廿二": "14 ser",
    "三角形增二": "eps tra",
    "天辐一": "ups lib",
    "七公增十": "phi boo",
    "天辐二": "tau lib",
    "日增一": "41 lib",
    "七公增七": "zet1 crb",
    "从官增一": "psi1 lup",
    "房宿增三": "42 lib",
    "三角形增四": "kap2 aps",
    "周增四": "tau6 ser",
    "周增七": "iot ser",
    "周增十四": "chi ser",
    "周增六": "tau7 ser",
    "日(室宿)": "kap lib",
    "从官一": "psi2 lup",
    "贯索五": "gam crb",
    "贯索一": "pi. crb",
    "巴增一": "psi ser",
    "勾陈四": "zet umi",
    "西咸四": "eta lib",
    "蜀": "alf ser",
    "天市右垣七": "alf ser",
    "周增九": "tau8 ser",
    "天乳增一": "a2 ser",
    "天市右垣五": "bet ser",
    "周": "bet ser",
    "周增十一": "29 ser",
    "蜀增一": "lam ser",
    "周增十二": "ups ser",
    "周增十五": "ups ser",
    "周增八": "kap ser",
    "天乳增三": "30 ser",
    "天乳增四": "30 ser",
    "贯索六": "del crb",
    "天乳": "mu. ser",
    "巴增二": "ome ser",
    "巴": "eps ser",
    "天市右垣八": "eps ser",
    "从官二": "chi lup",
    "房宿增四": "b sco",
    "贯索增四": "kap crb",
    "巴增五": "b ser",
    "天乳增二": "b ser",
    "贯索增十三": "rho ser",
    "七公四": "chi her",
    "周增十三": "39 ser",
    "房宿增二": "lam lib",
    "房宿增一": "lam lib",
    "房宿增五": "a sco",
    "西咸三": "tet lib",
    "七公增十二": "2 her",
    "三角形二": "bet tra",
    "房宿增六": "4 sco",
    "七公增十一": "4 her",
    "贯索增五": "lam crb",
    "天市右垣四": "gam ser",
    "房宿二": "rho sco",
    "贯索七": "eps crb",
    "西咸二": "48 lib",
    "房宿一": "pi. sco",
    "积卒二": "eta lup",
    "积卒增一": "eta lup",
    "罚三": "49 lib",
    "房宿三": "del sco",
    "西咸增一": "50 lib",
    "巴增三": "3 her",
    "贯索九": "rho crb",
    "晋增一": "r her",
    "贯索八": "iot crb",
    "上宰": "tet dra",
    "紫微左垣二": "tet dra",
    "贯索增十二": "pi. ser",
    "七公增四": "ups her",
    "巴增四": "43 ser",
    "西咸一": "ksi sco",
    "房宿四": "bet1 sco",
    "积卒一": "tet lup",
    "钩钤一": "ome1 sco",
    "积卒增二": "hip 18970",
    "钩钤二": "ome2 sco",
    "罚二": "11 sco",
    "斗增四": "45 ser",
    "天市右垣三": "kap her",
    "晋增五": "7 her",
    "斗增三": "46 ser",
    "斗增五": "47 ser",
    "七公三": "phi her",
    "晋增二": "8 her",
    "晋增四": "8 her",
    "贯索增六": "tau crb",
    "七公增十三": "14 her",
    "勾陈增八": "19 umi",
    "晋增三": "q her",
    "贯索增十一": "10 her",
    "键闭": "nu. sco",
    "罚增二": "psi sco",
    "罚增一": "16 sco",
    "心宿增一": "c1 sco",
    "心宿增二": "c2 sco",
    "勾陈增十": "20 umi",
    "斗增七": "9 her b",
    "斗二": "49 ser",
    "罚增三": "chi sco",
    "梁": "del oph",
    "天市右垣九": "del oph",
    "贯索增七": "sig crb",
    "斗增六": "12 her",
    "斗三": "13 her",
    "三角形增一": "del tra",
    "河间增一": "16 her",
    "罚一": "18 sco",
    "斗增二": "15 her",
    "贯索增十": "17 her",
    "贯索增八": "ups crb",
    "勾陈增九": "eta umi",
    "天市右垣十": "eps oph",
    "贯索增九": "19 her",
    "七公二": "tau her",
    "异雀六": "del1 aps",
    "心宿增三": "omi sco",
    "心宿一": "sig sco",
    "河间": "gam her",
    "天市右垣二": "gam her",
    "列肆一": "sig ser",
    "天纪一": "ksi crb",
    "天纪增三": "nu.1 crb",
    "天纪增四": "23 her",
    "少宰": "eta dra",
    "紫微左垣三": "eta dra",
    "东咸三": "psi oph",
    "斗增九": "o her",
    "天纪增二": "25 her",
    "斗一": "ome her",
    "斗增一": "ome her",
    "心宿增九": "rho oph",
    "心宿增四": "rho oph",
    "东咸二": "chi oph",
    "车肆一": "ups oph",
    "天纪增五": "26 her",
    "尚书二": "a dra",
    "七公增十四": "g her",
    "大火": "alf sco",
    "心宿二": "alf sco",
    "七公增三": "34 her",
    "心宿增五": "i sco",
    "河中": "bet her",
    "天市右垣一": "bet her",
    "列肆二": "lam oph",
    "东咸一": "phi oph",
    "东咸四": "ome oph",
    "东咸增二": "ome oph",
    "斗增十": "n her",
    "斗增十一": "n her",
    "斗四": "h her",
    "异雀四": "gam aps",
    "天纪增六": "32 her",
    "七公增十五": "sig her",
    "心宿三": "tau sco",
    "七公增二": "16 dra",
    "七公增一": "17 dra",
    "列肆增四": "12 oph",
    "斗五": "33 her",
    "天市右垣十一": "zet oph",
    "七公一": "42 her",
    "斛增五": "36 her",
    "斛增六": "m her",
    "尚书三": "g dra",
    "天纪二": "zet her",
    "斛增四": "38 her",
    "东咸增一": "24 sco",
    "天纪增七": "39 her",
    "列肆增三": "14 oph",
    "天纪增一": "eta her",
    "异雀三": "bet aps",
    "斛增二": "41 her",
    "天纪增八": "46 her",
    "心宿增六": "15 oph",
    "列肆增二": "16 oph",
    "斛四": "43 her",
    "斛增一": "43 her",
    "勾陈三": "eps umi",
    "心宿增八": "25 sco",
    "斛增三": "45 her",
    "三角形三": "alf tra",
    "七公增十六": "52 her",
    "天纪增十": "48 her",
    "龟四": "eta ara",
    "车肆二": "20 oph",
    "尾宿二": "eps sco",
    "斛三": "k her",
    "天纪增九": "50 her",
    "列肆增一": "21 oph",
    "魏增一": "51 her",
    "尾宿一": "mu.1 sco",
    "宦者增三": "49 her",
    "尾宿增二": "mu.2 sco",
    "天纪增十一": "53 her",
    "尾宿三": "zet1 sco",
    "斛一": "iot oph",
    "车肆增一": "23 oph",
    "魏增二": "56 her",
    "宦者增二": "54 her",
    "宦者增一": "54 her",
    "尚书五": "h dra",
    "尚书增二": "20 dra",
    "尾宿增一": "27 sco",
    "魏增三": "57 her",
    "斛二": "kap oph",
    "龟五": "zet ara",
    "龟一": "eps1 ara",
    "天江增九": "26 oph",
    "天纪三": "eps her",
    "车肆增二": "30 oph",
    "天纪四": "d her",
    "宋增二": "29 oph",
    "宦者一": "32 oph",
    "天纪五": "61 her",
    "宦者二": "33 oph",
    "宦者增四": "34 oph",
    "天江增十": "28 oph",
    "天江增十一": "31 oph",
    "天棓增九": "mu. dra",
    "宦者三": "60 her",
    "天江增八": "28 sco",
    "魏增五": "62 her",
    "上弼": "zet dra",
    "紫微左垣四": "zet dra",
    "宋": "eta oph",
    "天市左垣十一": "eta oph",
    "尾宿四": "eta sco",
    "宦者四": "37 oph",
    "天江一": "29 sco",
    "帝座": "alf1 her",
    "天市左垣一": "del her",
    "女床一": "pi. her",
    "天江二": "a oph",
    "天江增三": "30 sco",
    "宗正增三": "41 oph",
    "勾陈增五": "lam umi",
    "天纪六": "u her",
    "天江增二": "38 oph",
    "女床二": "e her",
    "天江增六": "omi oph",
    "宦者增五": "e oph",
    "天棓增七": "74 her",
    "天纪增十三": "w her",
    "市楼四": "nu. ser",
    "市楼增一": "nu. ser",
    "魏增六": "70 her",
    "魏增七": "70 her",
    "天江增七": "ksi oph",
    "天江增四": "32 sco",
    "异雀一": "zet aps",
    "天江三": "tet oph",
    "异雀二": "iot aps",
    "天江增一": "43 oph",
    "女床三": "rho her",
    "魏增八": "73 her",
    "天纪增十五": "hip 85181",
    "天江增五": "191 oph",
    "龟二": "gam ara",
    "天江四": "b oph",
    "宗正增二": "sig oph",
    "天棓增八": "x her",
    "糠": "d oph",
    "天棓三": "bet dra",
    "天市左垣二": "lam her",
    "尾宿九": "ups sco",
    "勾陈增六": "24 umi",
    "天籥增一": "50 oph",
    "龟三": "del ara",
    "天籥六": "c oph",
    "赵增一": "78 her",
    "尚书一": "f dra",
    "天棓增一": "nu.1 dra",
    "勾陈二": "del umi",
    "天棓二": "nu.2 dra",
    "御女三": "29 dra",
    "尾宿八": "lam sco",
    "候增三": "54 oph",
    "候增五": "f oph",
    "候": "alf oph",
    "天棓增十": "26 dra",
    "候增四": "56 oph",
    "天籥五": "52 oph",
    "尾宿增三": "q sco",
    "天棓增四": "y her",
    "尚书增一": "ome dra",
    "尾宿五": "tet sco",
    "赵增二": "79 her",
    "南海": "ksi ser",
    "天市左垣十": "ksi ser",
    "市楼一": "mu. oph",
    "天棓五": "iot her",
    "市楼二": "omi ser",
    "女史增一": "psi1 dra",
    "尾宿七": "kap sco",
    "赵增三": "84 her",
    "天籥三": "58 oph",
    "宗正一": "bet oph",
    "宗正增一": "61 oph",
    "孔雀一": "eta pav",
    "九河": "mu. her",
    "天市左垣三": "mu. her",
    "天籥八": "2 sgr",
    "尾宿六": "iot1 sco",
    "宗正二": "gam oph",
    "九河增一": "87 her",
    "天棓增二": "30 dra",
    "天柱增六": "35 dra",
    "傅说": "g sco",
    "天棓增三": "z her",
    "天纪增十四": "f her",
    "天棓一": "ksi dra",
    "天籥一": "63 oph",
    "女史": "psi2 dra",
    "天纪九": "tet her",
    "天棓四": "gam dra",
    "中山增一": "ksi her",
    "中山增二": "nu. her",
    "天市左垣九": "nu. oph",
    "燕": "zet cap",
    "天籥增二": "4 sgr",
    "天柱五": "40 dra",
    "帛度增三": "93 her",
    "天柱增五": "41 dra",
    "天籥增三": "5 sgr",
    "宗人一": "66 oph",
    "东海增一": "zet ser",
    "宗人二": "67 oph",
    "斗宿增一": "6 sgr",
    "帛度一": "95 her",
    "宗人三": "68 oph",
    "帛度增一": "96 her",
    "屠肆增一": "97 her",
    "天籥增四": "7 sgr",
    "市楼三": "tau oph",
    "宗人四": "p oph",
    "箕宿一": "gam sgr",
    "屠肆二": "98 her",
    "中山增三": "b her",
    "宗人增二": "71 oph",
    "宗人增一": "72 oph",
    "天市左垣四": "omi her",
    "中山": "omi her",
    "中山增七": "100 her",
    "孔雀二": "pi. pav",
    "帛度二": "102 her",
    "帛度增二": "101 her",
    "宗人增三": "73 oph",
    "中山增四": "a her",
    "斗宿三": "mu. sgr",
    "扶筐增一": "36 dra",
    "斗宿增二": "15 sgr",
    "斗宿增五": "15 sgr",
    "柱史增二": "37 dra",
    "柱史增一": "38 dra",
    "箕宿四": "eta sgr",
    "屠肆增二": "105 her",
    "织女增四": "kap lyr",
    "屠肆增三": "106 her",
    "柱史": "phi dra",
    "宗人增四": "74 oph",
    "中山增五": "108 her",
    "箕宿二": "del sgr",
    "中山增六": "t her",
    "御女四": "chi dra",
    "东海": "eta ser",
    "天市左垣八": "eta ser",
    "孔雀增二": "ksi pav",
    "屠肆一": "109 her",
    "扶筐三": "b dra",
    "箕宿三": "eps sgr",
    "织女增三": "mu. lyr",
    "斗宿增三": "21 sgr",
    "扶筐增二": "42 dra",
    "鳖一": "alf tel",
    "东海增二": "d ser",
    "斗宿二": "lam sgr",
    "东海增四": "c ser",
    "孔雀三": "nu. pav",
    "东海增三": "61 ser",
    "扶筐二": "d dra",
    "鳖十": "kap2 cra",
    "鳖十一": "tet cra",
    "天弁一": "alf sct",
    "织女": "alf lyr",
    "织女一": "alf lyr",
    "斗宿增四": "26 sgr",
    "天弁二": "del sct",
    "扶筐一": "c dra b",
    "孔雀八": "zet pav",
    "天弁三": "eps sct",
    "农丈人": "hip 91918",
    "织女二": "eps1 lyr",
    "织女增二": "eps2 lyr",
    "织女三": "zet1 lyr",
    "织女增一": "zet2 lyr",
    "徐增一": "4 aql",
    "斗宿一": "phi sgr",
    "宗一": "110 her",
    "御女二": "50 dra",
    "天弁增一": "5 aql",
    "宗二": "111 her",
    "天弁四": "bet sct",
    "鳖二": "eta1 cra",
    "建增一": "29 sgr",
    "渐台增六": "nu.1 lyr",
    "渐台增五": "nu. lyr",
    "渐台二": "bet lyr",
    "建增五": "30 sgr",
    "天弁增二": "7 aql",
    "扶筐四": "omi dra",
    "天弁增三": "8 aql",
    "建增四": "31 sgr",
    "孔雀四": "lam pav",
    "天市左垣五": "112 her",
    "渐台增一": "del1 lyr",
    "建增三": "33 sgr",
    "建增六": "nu.1 sgr",
    "少弼": "ups dra",
    "紫微左垣五": "ups dra",
    "渐台一": "del2 lyr",
    "齐增一": "113 her",
    "建增七": "nu.2 sgr",
    "斗宿四": "sig sgr",
    "辇道一": "13 lyr",
    "徐增二": "62 ser",
    "天市左垣七": "tet1 ser",
    "徐": "tet1 ser",
    "扶筐五": "48 dra",
    "孔雀五": "kap pav",
    "天弁五": "eta sct",
    "徐增四": "64 ser",
    "建增二": "ksi1 sgr",
    "建一": "ksi2 sgr",
    "孔雀增三": "ome pav",
    "鳖八": "eps cra",
    "吴越增二": "10 aql",
    "渐台三": "gam lyr",
    "吴越增三": "11 aql",
    "吴越增一": "eps aql",
    "渐台增四": "lam lyr",
    "扶筐六": "49 dra",
    "辇道增一": "16 lyr",
    "天弁六": "i aql",
    "斗宿六": "zet sgr",
    "天弁九": "g aql",
    "鳖三": "zet cra",
    "建二": "omi sgr",
    "扶筐七": "51 dra",
    "天弁八": "h aql",
    "天市左垣六": "zet aql",
    "吴越": "zet aql",
    "天弁七": "lam aql",
    "鳖七": "gam cra",
    "斗宿五": "tau sgr",
    "吴越增四": "18 aql",
    "渐台四": "iot lyr",
    "渐台增三": "17 lyr",
    "鳖四": "del cra",
    "徐增三": "19 aql",
    "天柱四": "59 dra",
    "天柱增一": "59 dra",
    "鳖六": "alf cra",
    "天厨增一": "55 dra",
    "建三": "pi. sgr",
    "鳖五": "bet cra",
    "扶筐增四": "53 dra",
    "天厨一": "del dra",
    "天弁增四": "20 aql",
    "右旗增二": "21 aql",
    "辇道二": "eta lyr",
    "辇道增二": "eta lyr",
    "扶筐增三": "54 dra",
    "齐增二": "1 sge",
    "狗增六": "psi sgr",
    "御女一": "tau dra",
    "齐增三": "1 vul",
    "辇道三": "tet lyr",
    "右旗增一": "22 aql",
    "奚仲一": "kap cyg",
    "建四": "d sgr",
    "建增九": "hip 94823",
    "齐增四": "2 vul",
    "吴越增五": "ome1 aql",
    "建增十": "hip 94859",
    "吴越增六": "a aql",
    "天弁增五": "f aql",
    "右旗增三": "d aql",
    "天厨六": "pi. dra",
    "建五": "rho1 sgr",
    "建六": "ups sgr",
    "建增八": "rho2 sgr",
    "天渊二": "bet1 sgr",
    "齐增八": "3 vul",
    "天渊一": "bet2 sgr",
    "天渊三": "alf sgr",
    "辇道增八": "2 cyg",
    "左旗增三": "2 sge",
    "左旗增二": "3 sge",
    "吴越增七": "b aql",
    "狗二": "chi1 sgr",
    "狗增五": "chi2 sgr",
    "齐增七": "3 cyg",
    "左旗增四": "4 vul",
    "右旗三": "del aql",
    "狗增七": "chi3 sgr",
    "狗增四": "chi3 sgr",
    "辇道四": "4 cyg",
    "左旗增五": "5 vul",
    "狗增三": "50 sgr",
    "右旗四": "nu. aql",
    "奚仲增一": "iot1 cyg",
    "齐增五": "alf vul",
    "齐增十一": "8 vul",
    "右旗增四": "c aql",
    "左旗增六": "7 vul",
    "奚仲二": "iot cyg",
    "右旗增八": "e aql",
    "右旗增七": "e aql",
    "辇道增七": "bet1 cyg",
    "辇道增九": "8 cyg",
    "天厨二": "sig dra",
    "右旗一": "mu. aql",
    "左旗增七": "9 vul",
    "右旗增十": "37 aql",
    "辇道增三": "11 cyg",
    "右旗六": "hip 96392",
    "狗增一": "h1 sgr",
    "奚仲三": "tet cyg",
    "狗一": "h2 sgr",
    "右旗五": "iot aql",
    "右旗增六": "iot aql",
    "右旗八": "kap aql",
    "左旗增一": "eps sge",
    "右旗七": "42 aql",
    "右旗二": "sig aql",
    "辇道增六": "phi cyg",
    "天津增一": "14 cyg",
    "狗增二": "53 sgr",
    "左旗一": "alf sge",
    "右旗增五": "45 aql",
    "天鸡增一": "e1 sgr",
    "左旗二": "bet sge",
    "奚仲四": "c cyg",
    "河鼓增二": "46 aql",
    "天鸡一": "e2 sgr",
    "河鼓增三": "chi aql",
    "左旗增八": "10 vul",
    "辇道增四": "15 cyg",
    "河鼓增一": "psi aql",
    "天津二": "del cyg",
    "河鼓增九": "ups aql",
    "河鼓三": "gam aql",
    "天鸡二": "f sgr",
    "辇道五": "17 cyg",
    "左旗三": "del sge",
    "天厨三": "eps dra",
    "河鼓增四": "pi. aql",
    "左旗四": "zet sge",
    "天津增二": "19 cyg",
    "奚仲增二": "d cyg",
    "河鼓二": "alf aql",
    "牛郎": "alf aql",
    "右旗增十一": "51 aql",
    "河鼓增五": "omi aql",
    "左旗增十八": "12 vul",
    "天鸡增二": "57 sgr",
    "左旗增廿九": "9 sge",
    "天桴四": "eta aql",
    "奚仲增六": "23 cyg",
    "奚仲增七": "23 cyg",
    "左旗增十七": "13 vul",
    "右旗九": "56 aql",
    "河鼓增八": "ksi aql",
    "右旗增十二": "57 aql",
    "天桴三": "58 aql",
    "天渊增一": "iot sgr",
    "河鼓一": "bet aql",
    "狗国一": "ome sgr",
    "天津增三": "22 cyg",
    "左旗增廿八": "10 sge",
    "河鼓增六": "phi aql",
    "辇道增五": "eta cyg",
    "狗国四": "b sgr",
    "左旗七": "11 sge",
    "天鸡增三": "g sgr",
    "左旗五": "gam sge",
    "狗国二": "a sgr",
    "左旗增十九": "14 vul",
    "天柱三": "69 dra",
    "天渊增二": "tet1 sgr",
    "狗国增二": "tet2 sgr",
    "天津增四": "25 cyg",
    "左旗六": "13 sge",
    "孔雀九": "eps pav",
    "左旗增十": "15 vul",
    "奚仲增三": "e cyg",
    "天厨五": "e dra",
    "牛宿增一": "63 sgr",
    "左旗增十六": "16 vul",
    "天厨增二": "65 dra",
    "狗国三": "c sgr",
    "天厨四": "rho dra",
    "左旗八": "14 sge",
    "左旗增廿七": "15 sge",
    "河鼓增七": "tau aql",
    "狗国增一": "hip 98842",
    "天桴二": "62 aql",
    "牛宿增三": "64 sgr",
    "左旗增廿六": "eta sge",
    "牛宿增二": "65 sgr",
    "天钩增一": "66 dra",
    "天津增五": "b1 cyg",
    "左旗增廿": "17 vul",
    "天桴增一": "64 aql",
    "孔雀六": "del pav",
    "天柱增二": "kap cep",
    "天津增六": "b2 cyg",
    "左旗增廿五": "tet sge",
    "左旗增十三": "18 vul",
    "狗国增三": "hip 99461",
    "天桴一": "tet aql",
    "天钩增二": "68 dra",
    "左旗增十四": "19 vul",
    "牛宿增四": "ksi1 cap",
    "左旗增十五": "20 vul",
    "牛宿三": "ksi cap",
    "天桴增二": "66 aql",
    "天津三": "30 cyg",
    "奚仲增四": "33 cyg",
    "天津增卅八": "omi1 cyg",
    "左旗增十一": "21 vul",
    "左旗九": "rho aql",
    "天津增七": "b3 cyg",
    "天津增卅七": "omi2 cyg",
    "左旗增廿三": "22 vul",
    "左旗增十二": "23 vul",
    "左旗增廿四": "18 sge",
    "牛宿增五": "3 cap",
    "左旗增廿一": "24 vul",
    "牛宿增六": "alf1 cap",
    "天津增九": "p cyg",
    "牛宿增九": "4 cap",
    "牛宿二": "alf2 cap",
    "天津增八": "36 cyg",
    "天津增十四": "35 cyg",
    "牛宿增八": "sig cap",
    "天钩增三": "71 dra",
    "天钩增四": "71 dra",
    "牛宿增七": "nu. cap",
    "牛宿增十一": "nu. cap",
    "牛宿增十二": "bet2 cap",
    "牛宿一": "bet cap",
    "左旗增廿二": "25 vul",
    "天津一": "gam cyg",
    "天津增十五": "39 cyg",
    "孔雀十一": "alf pav",
    "天津增卅六": "43 cyg",
    "牛宿四": "pi. cap",
    "牛宿增十三": "pi. cap",
    "天津增十": "40 cyg",
    "天柱增四": "75 dra",
    "离珠增一": "68 aql",
    "牛宿六": "rho cap",
    "天津增十二": "42 cyg",
    "天津增十六": "41 cyg",
    "天柱增三": "74 dra",
    "天钩三": "tet cep",
    "离珠四": "69 aql",
    "牛宿五": "omi cap",
    "天津增卅五": "ome1 cyg",
    "败瓜增一": "1 del",
    "天津增十一": "44 cyg",
    "天津增卅四": "ome2 cyg",
    "紫微左垣六": "73 dra",
    "败瓜一": "eps del",
    "天津增十三": "47 cyg",
    "败瓜二": "eta del",
    "瓠瓜五": "zet del",
    "天津增廿一": "26 vul",
    "离珠一": "70 aql",
    "天津增廿": "27 vul",
    "罗堰增一": "tau1 cap",
    "天津增十七": "48 cyg",
    "瓠瓜四": "bet del",
    "波斯二": "alf ind",
    "败瓜四": "iot del",
    "离珠二": "l aql",
    "瓠瓜增五": "29 vul",
    "天津增廿二": "28 vul",
    "败瓜三": "tet del",
    "瓠瓜增六": "hip 101909",
    "败瓜五": "kap del",
    "罗堰一": "tau cap",
    "离珠三": "1 aqr",
    "瓠瓜一": "alf del",
    "罗堰二": "ups cap",
    "天津增十八": "49 cyg",
    "瓠瓜增一": "10 del",
    "天津四": "alf cyg",
    "车府增一": "51 cyg",
    "天柱一": "76 dra",
    "天钩一": "4 cep",
    "瓠瓜三": "del del",
    "天津增廿三": "30 vul",
    "孔雀七": "bet pav",
    "天钩四": "eta cep",
    "天津增十九": "52 cyg",
    "罗堰三": "17 cap",
    "天津九": "eps cyg",
    "瓠瓜二": "gam2 del",
    "瓠瓜增七": "gam2 del",
    "天津增卅九": "t cyg",
    "天津增四十": "t cyg",
    "天津增卅": "lam cyg",
    "女宿一": "eps aqr",
    "女宿四": "k aqr",
    "败瓜增三": "13 del",
    "天津增卅三": "55 cyg",
    "瓠瓜增二": "15 del",
    "败瓜增二": "14 del",
    "天津增卅一": "56 cyg",
    "女宿三": "4 aqr",
    "波斯十一": "iot ind",
    "天津增廿四": "31 vul",
    "女宿增一": "5 aqr",
    "女宿二": "mu. aqr",
    "天津增卅二": "57 cyg",
    "天津增廿五": "32 vul",
    "越": "19 cap",
    "孔雀增四": "bet ind",
    "瓠瓜增八": "17 del",
    "瓠瓜增四": "17 del",
    "瓠瓜增三": "16 del",
    "女宿增五": "7 aqr",
    "天津五": "nu. cyg",
    "人增一": "33 vul",
    "司非增二": "18 del",
    "虚宿增四": "eps equ",
    "车府五": "f1 cyg",
    "天垒城九": "8 aqr",
    "女宿增三": "10 aqr",
    "女宿增二": "11 aqr",
    "周二": "21 cap",
    "天垒城八": "9 aqr",
    "车府增二": "60 cyg",
    "离瑜增一": "gam mic",
    "虚宿增一": "lam equ",
    "女宿增四": "12 aqr",
    "周一": "eta cap",
    "虚宿增三": "3 equ",
    "蛇尾四": "alf oct",
    "车府六": "ksi cyg",
    "虚宿增二": "4 equ",
    "天柱二": "77 dra",
    "秦一": "tet cap",
    "离瑜增二": "2 psa",
    "车府增三": "f2 cyg",
    "天津增廿九": "61 cyg",
    "赵一": "26 cap",
    "赵二": "27 cap",
    "天垒城十": "nu. aqr",
    "天垒城增二": "nu. aqr",
    "司非一": "gam equ",
    "司非增三": "6 equ",
    "司非增一": "6 equ",
    "九坎二": "η mic",
    "天津八": "zet cyg",
    "司非二": "del equ",
    "天津六": "tau cyg",
    "天垒城七": "29 cap",
    "虚宿二": "alf equ",
    "天垒城十一": "14 aqr",
    "天津增廿八": "sig cyg",
    "天津七": "ups cyg",
    "离瑜二": "eps mic",
    "秦二": "30 cap",
    "虚宿增五": "15 aqr",
    "天钩五": "alf cep",
    "天钩增六": "6 cep",
    "天钩增五": "6 cep",
    "虚宿增六": "16 aqr",
    "司危二": "9 equ",
    "人二": "1 peg",
    "代一": "iot cap",
    "司危一": "bet equ",
    "天垒城十二": "17 aqr",
    "天垒城六": "18 aqr",
    "虚宿增八": "20 aqr",
    "天垒城十三": "19 aqr",
    "虚宿增七": "21 aqr",
    "天津增廿六": "69 cyg",
    "孔雀十": "gam pav",
    "天津增廿七": "70 cyg",
    "天钩增七": "7 cep",
    "离瑜三": "5 psa",
    "车府增四": "g cyg",
    "人一": "2 peg",
    "虚宿一": "bet aqr",
    "离瑜增三": "6 psa",
    "车府四": "rho cyg",
    "车府增八": "72 cyg",
    "代增一": "37 cap",
    "代二": "38 cap",
    "天钱增三": "8 psa",
    "天钱增四": "7 psa",
    "车府七": "74 cyg",
    "垒壁阵二": "eps cap",
    "危宿增一": "3 peg",
    "天垒城一": "ksi aqr",
    "人增三": "5 peg",
    "天钩增十": "9 cep",
    "危宿增二": "4 peg",
    "螣蛇七": "hip 106886",
    "司命一": "24 aqr",
    "司禄二": "d aqr",
    "司禄增二": "d aqr",
    "垒壁阵三": "gam cap",
    "车府增五": "75 cyg",
    "蛇尾三": "nu. oct",
    "哭增一": "42 cap",
    "车府增七": "76 cyg",
    "代增二": "41 cap",
    "螣蛇四": "pi.1 cyg",
    "司命二": "26 aqr",
    "危宿增三": "7 peg",
    "车府增六": "77 cyg",
    "垒壁阵一": "kap cap",
    "哭增二": "44 cap",
    "造父四": "mu. cep",
    "哭增三": "45 cap",
    "臼一": "mu.1 cyg",
    "危宿三": "eps peg",
    "人四": "9 peg",
    "臼二": "kap peg",
    "天钱三": "iot psa",
    "天垒城二": "c cap",
    "造父五": "nu. cep",
    "造父增五": "nu. cep",
    "人三": "12 peg",
    "天垒城三": "47 cap",
    "天垒城四": "lam cap",
    "天垒城五": "50 cap",
    "螣蛇三": "pi.2 cyg",
    "垒壁阵四": "del cap",
    "司禄一": "11 peg",
    "司禄增一": "11 peg",
    "造父增四": "12 cep",
    "天钱二": "tet psa",
    "臼增一": "14 peg",
    "人增四": "13 peg",
    "臼增二": "15 peg",
    "臼增三": "16 peg",
    "哭一": "mu. cap",
    "败臼一": "gam gru",
    "螣蛇八": "13 cep",
    "危宿增十三": "17 peg",
    "危宿增十一": "17 peg",
    "少卫增二": "16 cep",
    "天钱增二": "11 psa",
    "危宿增七": "18 peg",
    "天钱增一": "eta psa",
    "危宿增四": "28 aqr",
    "危宿增十": "20 peg",
    "危宿增八": "19 peg",
    "造父增一": "14 cep",
    "羽林军一": "29 aqr",
    "泣增一": "30 aqr",
    "盖屋一": "omi aqr",
    "危宿增九": "21 peg",
    "天钩六": "ksi cep",
    "天钩增十三": "18 cep",
    "造父增三": "15 cep",
    "天钱一": "13 psa",
    "盖屋二": "32 aqr",
    "天钩增十二": "20 cep",
    "天钩增十七": "20 cep",
    "天钩增十八": "19 cep",
    "天钩增十一": "19 cep",
    "杵三": "23 peg",
    "危宿增六": "nu. peg",
    "危宿一": "alf aqr",
    "败臼二": "lam gru",
    "垒壁阵五": "iot aqr",
    "臼三": "iot peg",
    "臼增四": "25 peg",
    "鹤一": "alf gru",
    "天钱四": "mu. psa",
    "羽林军二": "35 aqr",
    "泣增二": "36 aqr",
    "少卫增三": "24 cep",
    "天钱五": "tau psa",
    "危宿二": "tet peg",
    "少卫增四": "80 dra",
    "臼增五": "28 peg",
    "哭增四": "37 aqr",
    "哭二": "e aqr",
    "造父二": "zet cep",
    "造父三": "lam cep",
    "羽林军三": "41 aqr",
    "羽林军六": "lam psa",
    "螣蛇九": "eps cep",
    "鹤十二": "mu.1 gru",
    "鹤增一": "mu.2 gru",
    "泣二": "tet aqr",
    "虚梁一": "44 aqr",
    "蛇尾二": "psi oct",
    "天钩增十四": "25 cep",
    "鸟喙一": "alf tuc",
    "羽林军十八": "45 aqr",
    "泣一": "rho aqr",
    "危宿增五": "30 peg",
    "车府三": "2 lac",
    "臼四": "32 peg",
    "土公吏一": "31 peg",
    "羽林军四": "47 aqr",
    "坟墓二": "gam aqr",
    "羽林军五": "49 aqr",
    "螣蛇十": "bet lac",
    "离宫增一": "33 peg",
    "虚梁二": "51 aqr",
    "羽林军十七": "50 aqr",
    "螣蛇二": "4 lac",
    "坟墓四": "pi. aqr",
    "羽林军十五": "f aqr",
    "坟墓增一": "34 peg",
    "垒壁阵增一": "54 aqr",
    "天钩七": "26 cep",
    "鸟喙二": "del tuc",
    "坟墓增二": "35 peg",
    "鹤十": "nu. gru",
    "坟墓一": "zet1 aqr",
    "土公吏二": "36 peg",
    "造父一": "del cep",
    "鹤增二": "del1 gru",
    "车府增十九": "5 lac",
    "鹤十一": "del2 gru",
    "少卫增七": "rho cep",
    "坟墓增三": "37 peg",
    "羽林军十六": "56 aqr",
    "车府增九": "6 lac",
    "垒壁阵六": "sig aqr",
    "螣蛇一": "alf lac",
    "败臼增一": "bet psa",
    "羽林军十九": "58 aqr",
    "离宫增二": "39 peg",
    "坟墓增四": "60 aqr",
    "羽林军十一": "ups aqr",
    "坟墓三": "eta aqr",
    "少卫增六": "31 cep",
    "少卫增五": "31 cep",
    "羽林军十四": "61 aqr",
    "车府增十": "8 lac",
    "螣蛇十五": "9 lac",
    "虚梁三": "kap aqr",
    "天钩增十六": "30 cep",
    "离宫增三": "40 peg",
    "车府增十一": "10 lac",
    "羽林军廿": "64 aqr",
    "离宫增四": "41 peg",
    "车府二": "11 lac",
    "羽林军八": "eps psa",
    "雷电一": "zet peg",
    "车府增十二": "12 lac",
    "离宫三": "omi peg",
    "败臼四": "19 psa",
    "鹤二": "bet gru",
    "离宫四": "eta peg",
    "羽林军廿一": "65 aqr",
    "垒壁阵增二": "67 aqr",
    "鹤九": "rho gru",
    "羽林军十三": "g1 aqr",
    "车府增十三": "13 lac",
    "离宫增五": "45 peg",
    "羽林军十": "20 psa a",
    "鹤四": "eta gru",
    "离宫一": "lam peg",
    "雷电二": "ksi peg",
    "勾陈增一": "hip 112519",
    "羽林军十二": "g2 aqr",
    "羽林军廿五": "tau1 aqr",
    "羽林军廿二": "70 aqr",
    "鹤三": "eps gru",
    "羽林军廿四": "tau aqr",
    "天钩八": "iot cep",
    "离宫二": "mu. peg",
    "车府增十四": "14 lac",
    "羽林军九": "21 psa",
    "车府一": "15 lac",
    "雷电三": "sig peg",
    "败臼三": "gam psa",
    "垒壁阵七": "lam aqr",
    "羽林军廿三": "74 aqr",
    "垒壁阵增三": "78 aqr",
    "羽林军廿六": "del aqr",
    "羽林军廿七": "77 aqr",
    "雷电增二": "rho peg",
    "天纲": "del psa",
    "车府增十五": "16 lac",
    "室宿增一": "51 peg",
    "北落师门": "alf psa",
    "雷电增一": "52 peg",
    "霹雳增二": "2 psc",
    "霹雳增一": "3 psc",
    "鹤六": "zet gru",
    "车府增廿": "omi and",
    "车府增十六": "omi and",
    "车府增十七": "2 and",
    "室宿二": "bet peg",
    "霹雳一": "bet psc",
    "螣蛇十六": "3 and",
    "室宿一": "alf peg",
    "羽林军四二": "h aqr",
    "羽林军四一": "85 aqr",
    "螣蛇增十三": "1 cas",
    "羽林军卅": "c1 aqr",
    "鹤八": "tet gru",
    "雷电四": "55 peg",
    "室宿增二": "56 peg",
    "羽林军四十": "87 aqr",
    "螣蛇增四": "4 and",
    "螣蛇增二": "5 and",
    "紫微左垣七": "pi. cep",
    "霹雳增三": "a psc",
    "羽林军廿八": "c2 aqr",
    "雷电增三": "57 peg",
    "螣蛇增十六": "2 cas",
    "螣蛇增十五": "2 cas",
    "羽林军廿九": "c3 aqr",
    "雷电增五": "58 peg",
    "鹤七": "iot gru",
    "车府增十八": "6 and",
    "雷电增四": "59 peg",
    "室宿增三": "60 peg",
    "螣蛇十七": "7 and",
    "垒壁阵八": "phi aqr",
    "室宿增四": "61 peg",
    "羽林军卅九": "psi1 aqr",
    "羽林军四三": "chi aqr",
    "霹雳二": "gam psc",
    "鹤五": "gam tuc",
    "螣蛇十八": "8 and",
    "羽林军卅八": "psi2 aqr",
    "螣蛇增七": "9 and",
    "天钩九": "omi cep",
    "羽林军卅七": "psi3 aqr",
    "羽林军卅六": "94 aqr",
    "螣蛇增三": "11 and",
    "螣蛇增十七": "hip 115171",
    "螣蛇增六": "10 and",
    "霹雳增四": "b psc",
    "离宫五": "tau peg",
    "室宿增五": "63 peg",
    "螣蛇增八": "12 and",
    "室宿增六": "64 peg",
    "羽林军卅五": "97 aqr",
    "离宫增六": "65 peg",
    "羽林军卅四": "b1 aqr",
    "雷电五": "66 peg",
    "螣蛇增十四": "4 cas",
    "室宿增七": "67 peg",
    "离宫六": "ups peg",
    "羽林军卅三": "b2 aqr",
    "云雨一": "kap psc",
    "螣蛇增五": "13 and",
    "云雨增四": "9 psc",
    "离宫增八": "69 peg",
    "霹雳三": "tet psc",
    "雷电六": "70 peg",
    "云雨增一": "11 psc",
    "云雨二": "12 psc",
    "螣蛇十四": "ar cas",
    "螣蛇增九": "14 and",
    "羽林军卅二": "100 aqr",
    "云雨增三": "13 psc",
    "火鸟一": "bet scl",
    "羽林军卅一": "b3 aqr",
    "离宫增七": "71 peg",
    "壁宿增二": "72 peg",
    "云雨增二": "14 psc",
    "螣蛇增十": "15 and",
    "壁宿增一": "73 peg",
    "火鸟二": "iot phe",
    "云雨增五": "15 psc",
    "云雨增六": "16 psc",
    "螣蛇十九": "lam and",
    "雷电增七": "75 peg",
    "螣蛇廿二": "iot and",
    "螣蛇增十二": "18 and",
    "少卫增八": "gam cep",
    "羽林军四四": "ome1 aqr",
    "霹雳四": "iot psc",
    "螣蛇廿一": "kap and",
    "𫓧钺一": "a1 aqr",
    "𫓧钺增三": "a2 aqr",
    "𫓧钺增一": "a2 aqr",
    "云雨四": "lam psc",
    "羽林军四五": "ome2 aqr",
    "雷电增八": "76 peg",
    "霹雳增五": "77 peg",
    "壁宿增三": "78 peg",
    "𫓧钺二": "i1 aqr",
    "𫓧钺增二": "i2 aqr",
    "螣蛇廿": "psi and",
    "云雨增七": "19 psc",
    "螣蛇十三": "tau cas",
    "垒壁阵增四": "20 psc",
    "王良增一": "6 cas",
    "云雨三": "21 psc",
    "云雨增十": "21 psc",
    "壁宿增四": "79 peg",
    "霹雳增七": "80 peg",
    "𫓧钺三": "i3 aqr",
    "云雨增八": "22 psc",
    "壁宿增八": "23 psc",
    "壁宿增九": "phi peg",
    "霹雳增六": "82 peg",
    "壁宿增七": "83 peg",
    "垒壁阵增五": "24 psc",
    "云雨增九": "25 psc",
    "螣蛇十二": "rho cas",
    "霹雳增八": "26 psc",
    "鸟喙三": "hip 118092",
    "鸟喙增一": "eta tuc",
    "壁宿增六": "psi peg",
    "八魁三": "1 cet",
    "垒壁阵九": "27 psc",
    "螣蛇十一": "sig cas",
    "霹雳五": "ome psc",
    "鸟喙七": "eps tuc",
    "仙女座 α": "alf and",
    "仙女座 22": "22 and",
    "仙女座 β": "bet and",
    "仙女座 γ1": "gam1 and",
    "仙女座 γ2": "gam2 and",
    "仙女座 δ": "del and",
    "仙女座 ε": "eps and",
    "仙女座 ζ": "zet and",
    "仙女座 η": "eta and",
    "仙女座 θ": "tet and",
    "仙女座 ι": "iot and",
    "仙女座 κ": "kap and",
    "仙女座 λ": "lam and",
    "仙女座 μ": "mu. and",
    "仙女座 ν": "nu. and",
    "仙女座 ξ": "ksi and",
    "仙女座 ο": "omi and",
    "仙女座 π": "pi. and",
    "仙女座 ρ": "rho and",
    "仙女座 σ": "sig and",
    "仙女座 τ": "tau and",
    "仙女座 υ": "ups and",
    "仙女座 φ": "phi and",
    "仙女座 χ": "chi and",
    "仙女座 ψ": "psi and",
    "仙女座 ω": "ome and",
    "仙女座 b": "b and",
    "仙女座 c": "c and",
    "仙女座 A": "a and",
    "仙女座 1": "1 and",
    "仙女座 2": "2 and",
    "仙女座 3": "3 and",
    "仙女座 4": "4 and",
    "仙女座 5": "5 and",
    "仙女座 6": "6 and",
    "仙女座 7": "7 and",
    "仙女座 8": "8 and",
    "仙女座 9": "9 and",
    "仙女座 10": "10 and",
    "仙女座 11": "11 and",
    "仙女座 12": "12 and",
    "仙女座 13": "13 and",
    "仙女座 14": "14 and",
    "仙女座 15": "15 and",
    "仙女座 16": "16 and",
    "仙女座 17": "17 and",
    "仙女座 18": "18 and",
    "仙女座 19": "19 and",
    "仙女座 20": "20 and",
    "仙女座 21": "21 and",
    "仙女座 23": "23 and",
    "仙女座 24": "24 and",
    "仙女座 25": "25 and",
    "仙女座 26": "26 and",
    "仙女座 27": "27 and",
    "仙女座 28": "28 and",
    "仙女座 29": "29 and",
    "仙女座 30": "30 and",
    "仙女座 31": "31 and",
    "仙女座 32": "32 and",
    "仙女座 34": "34 and",
    "仙女座 35": "35 and",
    "仙女座 36": "36 and",
    "仙女座 37": "37 and",
    "仙女座 38": "38 and",
    "仙女座 39": "39 and",
    "仙女座 41": "41 and",
    "仙女座 42": "42 and",
    "仙女座 43": "43 and",
    "仙女座 44": "44 and",
    "仙女座 45": "45 and",
    "仙女座 46": "46 and",
    "仙女座 47": "47 and",
    "仙女座 48": "48 and",
    "仙女座 49": "49 and",
    "仙女座 50": "50 and",
    "仙女座 51": "51 and",
    "仙女座 52": "52 and",
    "仙女座 53": "53 and",
    "仙女座 55": "55 and",
    "仙女座 56": "56 and",
    "仙女座 57": "57 and",
    "仙女座 58": "58 and",
    "仙女座 59": "59 and",
    "仙女座 60": "60 and",
    "仙女座 61": "61 and",
    "仙女座 62": "62 and",
    "仙女座 63": "63 and",
    "仙女座 64": "64 and",
    "仙女座 65": "65 and",
    "仙女座 66": "66 and",
    "唧筒座 α": "alf ant",
    "唧筒座 δ": "del ant",
    "唧筒座 ε": "eps ant",
    "唧筒座 ζ1": "zet1 ant",
    "唧筒座 ζ2": "zet2 ant",
    "唧筒座 η": "eta ant",
    "唧筒座 θ": "tet ant",
    "唧筒座 ι": "iot ant",
    "天燕座 α": "alf aps",
    "天燕座 β": "bet aps",
    "天燕座 γ": "gam aps",
    "天燕座 δ1": "del1 aps",
    "天燕座 δ2": "del2 aps",
    "天燕座 ε": "eps aps",
    "天燕座 ζ": "zet aps",
    "天燕座 η": "eta aps",
    "天燕座 θ": "tet aps",
    "天燕座 ι": "iot aps",
    "天燕座 κ1": "kap1 aps",
    "天燕座 κ2": "kap2 aps",
    "宝瓶座 α": "alf aqr",
    "宝瓶座 β": "bet aqr",
    "宝瓶座 γ": "gam aqr",
    "宝瓶座 δ": "del aqr",
    "宝瓶座 ε": "eps aqr",
    "宝瓶座 ζ1": "zet1 aqr",
    "宝瓶座 ζ2": "zet2 aqr",
    "宝瓶座 η": "eta aqr",
    "宝瓶座 θ": "tet aqr",
    "宝瓶座 ι": "iot aqr",
    "宝瓶座 κ": "kap aqr",
    "宝瓶座 λ": "lam aqr",
    "宝瓶座 μ": "mu. aqr",
    "宝瓶座 ν": "nu. aqr",
    "宝瓶座 ξ": "ksi aqr",
    "宝瓶座 ο": "omi aqr",
    "宝瓶座 π": "pi. aqr",
    "宝瓶座 ρ": "rho aqr",
    "宝瓶座 σ": "sig aqr",
    "宝瓶座 τ": "tau aqr",
    "宝瓶座 τ1": "tau1 aqr",
    "宝瓶座 τ2": "tau2 aqr",
    "宝瓶座 υ": "ups aqr",
    "宝瓶座 φ": "phi aqr",
    "宝瓶座 χ": "chi aqr",
    "宝瓶座 ψ1": "psi1 aqr",
    "宝瓶座 ψ2": "psi2 aqr",
    "宝瓶座 ψ3": "psi3 aqr",
    "宝瓶座 ω1": "ome1 aqr",
    "宝瓶座 ω2": "ome2 aqr",
    "宝瓶座 b1": "b1 aqr",
    "宝瓶座 b2": "b2 aqr",
    "宝瓶座 b3": "b3 aqr",
    "宝瓶座 c1": "c1 aqr",
    "宝瓶座 c2": "c2 aqr",
    "宝瓶座 c3": "c3 aqr",
    "宝瓶座 d": "d aqr",
    "宝瓶座 e": "e aqr",
    "宝瓶座 f": "f aqr",
    "宝瓶座 g1": "g1 aqr",
    "宝瓶座 g2": "g2 aqr",
    "宝瓶座 h": "h aqr",
    "宝瓶座 i1": "i1 aqr",
    "宝瓶座 i2": "i2 aqr",
    "宝瓶座 i3": "i3 aqr",
    "宝瓶座 k": "k aqr",
    "宝瓶座 A1": "a1 aqr",
    "宝瓶座 A2": "a2 aqr",
    "宝瓶座 1": "1 aqr",
    "宝瓶座 2": "2 aqr",
    "宝瓶座 3": "3 aqr",
    "宝瓶座 4": "4 aqr",
    "宝瓶座 5": "5 aqr",
    "宝瓶座 6": "6 aqr",
    "宝瓶座 7": "7 aqr",
    "宝瓶座 8": "8 aqr",
    "宝瓶座 9": "9 aqr",
    "宝瓶座 10": "10 aqr",
    "宝瓶座 11": "11 aqr",
    "宝瓶座 12": "12 aqr",
    "宝瓶座 13": "13 aqr",
    "宝瓶座 14": "14 aqr",
    "宝瓶座 15": "15 aqr",
    "宝瓶座 16": "16 aqr",
    "宝瓶座 17": "17 aqr",
    "宝瓶座 18": "18 aqr",
    "宝瓶座 19": "19 aqr",
    "宝瓶座 20": "20 aqr",
    "宝瓶座 21": "21 aqr",
    "宝瓶座 22": "22 aqr",
    "宝瓶座 23": "23 aqr",
    "宝瓶座 24": "24 aqr",
    "宝瓶座 25": "25 aqr",
    "宝瓶座 26": "26 aqr",
    "宝瓶座 28": "28 aqr",
    "宝瓶座 29": "29 aqr",
    "宝瓶座 30": "30 aqr",
    "宝瓶座 31": "31 aqr",
    "宝瓶座 32": "32 aqr",
    "宝瓶座 33": "33 aqr",
    "宝瓶座 34": "34 aqr",
    "宝瓶座 35": "35 aqr",
    "宝瓶座 36": "36 aqr",
    "宝瓶座 37": "37 aqr",
    "宝瓶座 38": "38 aqr",
    "宝瓶座 39": "39 aqr",
    "宝瓶座 40": "40 aqr",
    "宝瓶座 41": "41 aqr",
    "宝瓶座 42": "42 aqr",
    "宝瓶座 43": "43 aqr",
    "宝瓶座 44": "44 aqr",
    "宝瓶座 45": "45 aqr",
    "宝瓶座 46": "46 aqr",
    "宝瓶座 47": "47 aqr",
    "宝瓶座 48": "48 aqr",
    "宝瓶座 49": "49 aqr",
    "宝瓶座 50": "50 aqr",
    "宝瓶座 51": "51 aqr",
    "宝瓶座 52": "52 aqr",
    "宝瓶座 53": "53 aqr",
    "宝瓶座 54": "54 aqr",
    "宝瓶座 55": "55 aqr",
    "宝瓶座 56": "56 aqr",
    "宝瓶座 57": "57 aqr",
    "宝瓶座 58": "58 aqr",
    "宝瓶座 59": "59 aqr",
    "宝瓶座 60": "60 aqr",
    "宝瓶座 61": "61 aqr",
    "宝瓶座 62": "62 aqr",
    "宝瓶座 63": "63 aqr",
    "宝瓶座 64": "64 aqr",
    "宝瓶座 65": "65 aqr",
    "宝瓶座 66": "66 aqr",
    "宝瓶座 67": "67 aqr",
    "宝瓶座 68": "68 aqr",
    "宝瓶座 69": "69 aqr",
    "宝瓶座 70": "70 aqr",
    "宝瓶座 71": "71 aqr",
    "宝瓶座 72": "72 aqr",
    "宝瓶座 73": "73 aqr",
    "宝瓶座 74": "74 aqr",
    "宝瓶座 75": "75 aqr",
    "宝瓶座 76": "76 aqr",
    "宝瓶座 77": "77 aqr",
    "宝瓶座 78": "78 aqr",
    "宝瓶座 81": "81 aqr",
    "宝瓶座 82": "82 aqr",
    "宝瓶座 83": "83 aqr",
    "宝瓶座 84": "84 aqr",
    "宝瓶座 85": "85 aqr",
    "宝瓶座 86": "86 aqr",
    "宝瓶座 87": "87 aqr",
    "宝瓶座 88": "88 aqr",
    "宝瓶座 89": "89 aqr",
    "宝瓶座 90": "90 aqr",
    "宝瓶座 91": "91 aqr",
    "宝瓶座 92": "92 aqr",
    "宝瓶座 93": "93 aqr",
    "宝瓶座 94": "94 aqr",
    "宝瓶座 95": "95 aqr",
    "宝瓶座 96": "96 aqr",
    "宝瓶座 97": "97 aqr",
    "宝瓶座 98": "98 aqr",
    "宝瓶座 99": "99 aqr",
    "宝瓶座 100": "100 aqr",
    "宝瓶座 101": "101 aqr",
    "宝瓶座 102": "102 aqr",
    "宝瓶座 103": "103 aqr",
    "宝瓶座 104": "104 aqr",
    "宝瓶座 105": "105 aqr",
    "宝瓶座 106": "106 aqr",
    "宝瓶座 107": "107 aqr",
    "宝瓶座 108": "108 aqr",
    "天鹰座 α": "alf aql",
    "天鹰座 β": "bet aql",
    "天鹰座 γ": "gam aql",
    "天鹰座 δ": "del aql",
    "天鹰座 ε": "eps aql",
    "天鹰座 ζ": "zet aql",
    "天鹰座 η": "eta aql",
    "天鹰座 θ": "tet aql",
    "天鹰座 ι": "iot aql",
    "天鹰座 κ": "kap aql",
    "天鹰座 λ": "lam aql",
    "天鹰座 μ": "mu. aql",
    "天鹰座 ν": "nu. aql",
    "天鹰座 ξ": "ksi aql",
    "天鹰座 ο": "omi aql",
    "天鹰座 π": "pi. aql",
    "天鹰座 ρ": "rho aql",
    "天鹰座 σ": "sig aql",
    "天鹰座 τ": "tau aql",
    "天鹰座 υ": "ups aql",
    "天鹰座 φ": "phi aql",
    "天鹰座 χ": "chi aql",
    "天鹰座 ψ": "psi aql",
    "天鹰座 ω1": "ome1 aql",
    "天鹰座 ω2": "ome2 aql",
    "天鹰座 b": "b aql",
    "天鹰座 c": "c aql",
    "天鹰座 d": "d aql",
    "天鹰座 e": "e aql",
    "天鹰座 f": "f aql",
    "天鹰座 g": "g aql",
    "天鹰座 h": "h aql",
    "天鹰座 i": "i aql",
    "天鹰座 l": "l aql",
    "天鹰座 A": "a aql",
    "天鹰座 4": "4 aql",
    "天鹰座 5": "5 aql",
    "天鹰座 7": "7 aql",
    "天鹰座 8": "8 aql",
    "天鹰座 10": "10 aql",
    "天鹰座 11": "11 aql",
    "天鹰座 12": "12 aql",
    "天鹰座 13": "13 aql",
    "天鹰座 14": "14 aql",
    "天鹰座 15": "15 aql",
    "天鹰座 16": "16 aql",
    "天鹰座 17": "17 aql",
    "天鹰座 18": "18 aql",
    "天鹰座 19": "19 aql",
    "天鹰座 20": "20 aql",
    "天鹰座 21": "21 aql",
    "天鹰座 22": "22 aql",
    "天鹰座 23": "23 aql",
    "天鹰座 24": "24 aql",
    "天鹰座 25": "25 aql",
    "天鹰座 26": "26 aql",
    "天鹰座 27": "27 aql",
    "天鹰座 28": "28 aql",
    "天鹰座 29": "29 aql",
    "天鹰座 30": "30 aql",
    "天鹰座 31": "31 aql",
    "天鹰座 32": "32 aql",
    "天鹰座 35": "35 aql",
    "天鹰座 36": "36 aql",
    "天鹰座 37": "37 aql",
    "天鹰座 38": "38 aql",
    "天鹰座 39": "39 aql",
    "天鹰座 41": "41 aql",
    "天鹰座 42": "42 aql",
    "天鹰座 44": "44 aql",
    "天鹰座 45": "45 aql",
    "天鹰座 46": "46 aql",
    "天鹰座 47": "47 aql",
    "天鹰座 48": "48 aql",
    "天鹰座 49": "49 aql",
    "天鹰座 50": "50 aql",
    "天鹰座 51": "51 aql",
    "天鹰座 52": "52 aql",
    "天鹰座 53": "53 aql",
    "天鹰座 54": "54 aql",
    "天鹰座 55": "55 aql",
    "天鹰座 56": "56 aql",
    "天鹰座 57": "57 aql",
    "天鹰座 58": "58 aql",
    "天鹰座 59": "59 aql",
    "天鹰座 60": "60 aql",
    "天鹰座 61": "61 aql",
    "天鹰座 62": "62 aql",
    "天鹰座 63": "63 aql",
    "天鹰座 64": "64 aql",
    "天鹰座 65": "65 aql",
    "天鹰座 66": "66 aql",
    "天鹰座 67": "67 aql",
    "天鹰座 68": "68 aql",
    "天鹰座 69": "69 aql",
    "天鹰座 70": "70 aql",
    "天鹰座 71": "71 aql",
    "天坛座 α": "alf ara",
    "天坛座 β": "bet ara",
    "天坛座 γ": "gam ara",
    "天坛座 δ": "del ara",
    "天坛座 ε1": "eps1 ara",
    "天坛座 ε2": "eps2 ara",
    "天坛座 ζ": "zet ara",
    "天坛座 η": "eta ara",
    "天坛座 θ": "tet ara",
    "天坛座 ι": "iot ara",
    "天坛座 κ": "kap ara",
    "天坛座 λ": "lam ara",
    "天坛座 μ": "mu. ara",
    "天坛座 υ1": "ups1 ara",
    "天坛座 υ2": "ups2 ara",
    "天坛座 π": "pi. ara",
    "天坛座 σ": "sig ara",
    "白羊座 α": "alf ari",
    "白羊座 β": "bet ari",
    "白羊座 γ1": "gam1 ari",
    "白羊座 γ2": "gam2 ari",
    "白羊座 δ": "del ari",
    "白羊座 ε": "eps ari",
    "白羊座 ζ": "zet ari",
    "白羊座 η": "eta ari",
    "白羊座 θ": "tet ari",
    "白羊座 ι": "iot ari",
    "白羊座 κ": "kap ari",
    "白羊座 λ": "lam ari",
    "白羊座 μ": "mu. ari",
    "白羊座 ν": "nu. ari",
    "白羊座 ξ": "ksi ari",
    "白羊座 ο": "omi ari",
    "白羊座 π": "pi. ari",
    "白羊座 ρ": "rho ari",
    "白羊座 ρ1": "rho1 ari",
    "白羊座 ρ2": "rho2 ari",
    "白羊座 ρ3": "rho3 ari",
    "白羊座 σ": "sig ari",
    "白羊座 τ1": "tau1 ari",
    "白羊座 τ2": "tau2 ari",
    "白羊座 c": "c ari",
    "白羊座 1": "1 ari",
    "白羊座 3": "3 ari",
    "白羊座 4": "4 ari",
    "白羊座 5": "5 ari",
    "白羊座 6": "6 ari",
    "白羊座 7": "7 ari",
    "白羊座 8": "8 ari",
    "白羊座 9": "9 ari",
    "白羊座 10": "10 ari",
    "白羊座 11": "11 ari",
    "白羊座 12": "12 ari",
    "白羊座 13": "13 ari",
    "白羊座 14": "14 ari",
    "白羊座 15": "15 ari",
    "白羊座 16": "16 ari",
    "白羊座 17": "17 ari",
    "白羊座 19": "19 ari",
    "白羊座 20": "20 ari",
    "白羊座 21": "21 ari",
    "白羊座 22": "22 ari",
    "白羊座 23": "23 ari",
    "白羊座 24": "24 ari",
    "白羊座 25": "25 ari",
    "白羊座 26": "26 ari",
    "白羊座 27": "27 ari",
    "白羊座 29": "29 ari",
    "白羊座 30": "30 ari",
    "白羊座 31": "31 ari",
    "白羊座 32": "32 ari",
    "白羊座 33": "33 ari",
    "白羊座 34": "34 ari",
    "白羊座 35": "35 ari",
    "白羊座 36": "36 ari",
    "白羊座 37": "37 ari",
    "白羊座 38": "38 ari",
    "白羊座 39": "39 ari",
    "白羊座 40": "40 ari",
    "白羊座 41": "41 ari",
    "白羊座 42": "42 ari",
    "白羊座 43": "43 ari",
    "白羊座 44": "44 ari",
    "白羊座 45": "45 ari",
    "白羊座 46": "46 ari",
    "白羊座 47": "47 ari",
    "白羊座 48": "48 ari",
    "白羊座 49": "49 ari",
    "白羊座 50": "50 ari",
    "白羊座 51": "51 ari",
    "白羊座 52": "52 ari",
    "白羊座 53": "53 ari",
    "白羊座 54": "54 ari",
    "白羊座 55": "55 ari",
    "白羊座 56": "56 ari",
    "白羊座 57": "57 ari",
    "白羊座 58": "58 ari",
    "白羊座 59": "59 ari",
    "白羊座 60": "60 ari",
    "白羊座 61": "61 ari",
    "白羊座 62": "62 ari",
    "白羊座 63": "63 ari",
    "白羊座 64": "64 ari",
    "白羊座 65": "65 ari",
    "白羊座 66": "66 ari",
    "御夫座 α": "alf aur",
    "御夫座 β": "bet aur",
    "御夫座 δ": "del aur",
    "御夫座 ε": "eps aur",
    "御夫座 ζ": "zet aur",
    "御夫座 η": "eta aur",
    "御夫座 θ": "tet aur",
    "御夫座 ι": "iot aur",
    "御夫座 κ": "kap aur",
    "御夫座 λ": "lam aur",
    "御夫座 μ": "mu. aur",
    "御夫座 ν": "nu. aur",
    "御夫座 ξ": "ksi aur",
    "御夫座 ο": "omi aur",
    "御夫座 π": "pi. aur",
    "御夫座 ρ": "rho aur",
    "御夫座 σ": "sig aur",
    "御夫座 τ": "tau aur",
    "御夫座 υ": "ups aur",
    "御夫座 φ": "phi aur",
    "御夫座 χ": "chi aur",
    "御夫座 ψ1": "psi1 aur",
    "御夫座 ψ2": "psi2 aur",
    "御夫座 ψ3": "psi3 aur",
    "御夫座 ψ4": "psi4 aur",
    "御夫座 ψ5": "psi5 aur",
    "御夫座 ψ6": "psi6 aur",
    "御夫座 ψ7": "psi7 aur",
    "御夫座 ψ8": "psi8 aur",
    "御夫座 ψ9": "psi9 aur",
    "御夫座 ψ10": "psi10 aur",
    "御夫座 ω": "ome aur",
    "御夫座 1": "1 aur",
    "御夫座 2": "2 aur",
    "御夫座 3": "3 aur",
    "御夫座 4": "4 aur",
    "御夫座 5": "5 aur",
    "御夫座 6": "6 aur",
    "御夫座 7": "7 aur",
    "御夫座 8": "8 aur",
    "御夫座 9": "9 aur",
    "御夫座 10": "10 aur",
    "御夫座 11": "11 aur",
    "御夫座 13": "13 aur",
    "御夫座 14": "14 aur",
    "御夫座 15": "15 aur",
    "御夫座 16": "16 aur",
    "御夫座 17": "17 aur",
    "御夫座 18": "18 aur",
    "御夫座 19": "19 aur",
    "御夫座 20": "20 aur",
    "御夫座 21": "21 aur",
    "御夫座 22": "22 aur",
    "御夫座 24": "24 aur",
    "御夫座 25": "25 aur",
    "御夫座 26": "26 aur",
    "御夫座 27": "27 aur",
    "御夫座 28": "28 aur",
    "御夫座 29": "29 aur",
    "御夫座 30": "30 aur",
    "御夫座 31": "31 aur",
    "御夫座 32": "32 aur",
    "御夫座 33": "33 aur",
    "御夫座 34": "34 aur",
    "御夫座 35": "35 aur",
    "御夫座 36": "36 aur",
    "御夫座 37": "37 aur",
    "御夫座 38": "38 aur",
    "御夫座 39": "39 aur",
    "御夫座 40": "40 aur",
    "御夫座 41": "41 aur",
    "御夫座 42": "42 aur",
    "御夫座 43": "43 aur",
    "御夫座 44": "44 aur",
    "御夫座 45": "45 aur",
    "御夫座 46": "46 aur",
    "御夫座 47": "47 aur",
    "御夫座 48": "48 aur",
    "御夫座 49": "49 aur",
    "御夫座 50": "50 aur",
    "御夫座 51": "51 aur",
    "御夫座 52": "52 aur",
    "御夫座 53": "53 aur",
    "御夫座 54": "54 aur",
    "御夫座 55": "55 aur",
    "御夫座 56": "56 aur",
    "御夫座 57": "57 aur",
    "御夫座 58": "58 aur",
    "御夫座 59": "59 aur",
    "御夫座 60": "60 aur",
    "御夫座 61": "61 aur",
    "御夫座 62": "62 aur",
    "御夫座 63": "63 aur",
    "御夫座 64": "64 aur",
    "御夫座 65": "65 aur",
    "御夫座 66": "66 aur",
    "牧夫座 α": "alf boo",
    "牧夫座 β": "bet boo",
    "牧夫座 γ": "gam boo",
    "牧夫座 δ": "del boo",
    "牧夫座 ε": "eps boo",
    "牧夫座 ζ": "zet boo",
    "牧夫座 η": "eta boo",
    "牧夫座 θ": "tet boo",
    "牧夫座 ι": "iot boo",
    "牧夫座 κ1": "kap1 boo",
    "牧夫座 κ2": "kap2 boo",
    "牧夫座 λ": "lam boo",
    "牧夫座 μ1": "mu.1 boo",
    "牧夫座 μ2": "mu.2 boo",
    "牧夫座 ν1": "nu.1 boo",
    "牧夫座 ν2": "nu.2 boo",
    "牧夫座 ξ": "ksi boo",
    "牧夫座 ο": "omi boo",
    "牧夫座 π1": "pi.1 boo",
    "牧夫座 π2": "pi.2 boo",
    "牧夫座 ρ": "rho boo",
    "牧夫座 σ": "sig boo",
    "牧夫座 τ": "tau boo",
    "牧夫座 υ": "ups boo",
    "牧夫座 φ": "phi boo",
    "牧夫座 χ": "chi boo",
    "牧夫座 ψ": "psi boo",
    "牧夫座 ω": "ome boo",
    "牧夫座 b": "b boo",
    "牧夫座 c": "c boo",
    "牧夫座 d": "d boo",
    "牧夫座 e": "e boo",
    "牧夫座 f": "f boo",
    "牧夫座 g": "g boo",
    "牧夫座 h": "h boo",
    "牧夫座 i": "i boo",
    "牧夫座 k": "k boo",
    "牧夫座 A": "a boo",
    "牧夫座 1": "1 boo",
    "牧夫座 2": "2 boo",
    "牧夫座 3": "3 boo",
    "牧夫座 4": "4 boo",
    "牧夫座 5": "5 boo",
    "牧夫座 6": "6 boo",
    "牧夫座 7": "7 boo",
    "牧夫座 8": "8 boo",
    "牧夫座 9": "9 boo",
    "牧夫座 10": "10 boo",
    "牧夫座 11": "11 boo",
    "牧夫座 12": "12 boo",
    "牧夫座 13": "13 boo",
    "牧夫座 14": "14 boo",
    "牧夫座 15": "15 boo",
    "牧夫座 16": "16 boo",
    "牧夫座 17": "17 boo",
    "牧夫座 18": "18 boo",
    "牧夫座 19": "19 boo",
    "牧夫座 20": "20 boo",
    "牧夫座 21": "21 boo",
    "牧夫座 22": "22 boo",
    "牧夫座 23": "23 boo",
    "牧夫座 24": "24 boo",
    "牧夫座 25": "25 boo",
    "牧夫座 26": "26 boo",
    "牧夫座 27": "27 boo",
    "牧夫座 28": "28 boo",
    "牧夫座 29": "29 boo",
    "牧夫座 30": "30 boo",
    "牧夫座 31": "31 boo",
    "牧夫座 32": "32 boo",
    "牧夫座 33": "33 boo",
    "牧夫座 34": "34 boo",
    "牧夫座 35": "35 boo",
    "牧夫座 36": "36 boo",
    "牧夫座 37": "37 boo",
    "牧夫座 38": "38 boo",
    "牧夫座 39": "39 boo",
    "牧夫座 40": "40 boo",
    "牧夫座 41": "41 boo",
    "牧夫座 42": "42 boo",
    "牧夫座 43": "43 boo",
    "牧夫座 44": "44 boo",
    "牧夫座 45": "45 boo",
    "牧夫座 46": "46 boo",
    "牧夫座 47": "47 boo",
    "牧夫座 48": "48 boo",
    "牧夫座 49": "49 boo",
    "牧夫座 50": "50 boo",
    "牧夫座 51": "51 boo",
    "牧夫座 52": "52 boo",
    "牧夫座 53": "53 boo",
    "牧夫座 54": "54 boo",
    "雕具座 α": "alf cae",
    "雕具座 β": "bet cae",
    "雕具座 γ1": "gam1 cae",
    "雕具座 γ2": "gam2 cae",
    "雕具座 δ": "del cae",
    "雕具座 ζ": "zet cae",
    "雕具座 λ": "lam cae",
    "雕具座 ν": "nu. cae",
    "鹿豹座 α": "alf cam",
    "鹿豹座 β": "bet cam",
    "鹿豹座 γ": "gam cam",
    "鹿豹座 1": "1 cam",
    "鹿豹座 2": "2 cam",
    "鹿豹座 3": "3 cam",
    "鹿豹座 4": "4 cam",
    "鹿豹座 5": "5 cam",
    "鹿豹座 6": "6 cam",
    "鹿豹座 7": "7 cam",
    "鹿豹座 8": "8 cam",
    "鹿豹座 9": "9 cam",
    "鹿豹座 10": "10 cam",
    "鹿豹座 11": "11 cam",
    "鹿豹座 12": "12 cam",
    "鹿豹座 14": "14 cam",
    "鹿豹座 15": "15 cam",
    "鹿豹座 16": "16 cam",
    "鹿豹座 17": "17 cam",
    "鹿豹座 18": "18 cam",
    "鹿豹座 19": "19 cam",
    "鹿豹座 20": "20 cam",
    "鹿豹座 21": "21 cam",
    "鹿豹座 22": "22 cam",
    "鹿豹座 23": "23 cam",
    "鹿豹座 24": "24 cam",
    "鹿豹座 25": "25 cam",
    "鹿豹座 26": "26 cam",
    "鹿豹座 28": "28 cam",
    "鹿豹座 29": "29 cam",
    "鹿豹座 30": "30 cam",
    "鹿豹座 31": "31 cam",
    "鹿豹座 32": "32 cam",
    "鹿豹座 33": "33 cam",
    "鹿豹座 34": "34 cam",
    "鹿豹座 35": "35 cam",
    "鹿豹座 36": "36 cam",
    "鹿豹座 37": "37 cam",
    "鹿豹座 38": "38 cam",
    "鹿豹座 39": "39 cam",
    "鹿豹座 40": "40 cam",
    "鹿豹座 41": "41 cam",
    "鹿豹座 42": "42 cam",
    "鹿豹座 43": "43 cam",
    "鹿豹座 44": "44 cam",
    "鹿豹座 45": "45 cam",
    "鹿豹座 46": "46 cam",
    "鹿豹座 47": "47 cam",
    "鹿豹座 48": "48 cam",
    "鹿豹座 49": "49 cam",
    "鹿豹座 50": "50 cam",
    "鹿豹座 51": "51 cam",
    "鹿豹座 52": "52 cam",
    "鹿豹座 53": "53 cam",
    "鹿豹座 54": "54 cam",
    "鹿豹座 55": "55 cam",
    "鹿豹座 56": "56 cam",
    "鹿豹座 57": "57 cam",
    "巨蟹座 α": "alf cnc",
    "巨蟹座 β": "bet cnc",
    "巨蟹座 γ": "gam cnc",
    "巨蟹座 δ": "del cnc",
    "巨蟹座 ε": "eps cnc",
    "巨蟹座 ζ1": "zet1 cnc",
    "巨蟹座 ζ2": "zet2 cnc",
    "巨蟹座 η": "eta cnc",
    "巨蟹座 θ": "tet cnc",
    "巨蟹座 ι": "iot cnc",
    "巨蟹座 κ": "kap cnc",
    "巨蟹座 λ": "lam cnc",
    "巨蟹座 μ": "mu. cnc",
    "巨蟹座 μ1": "mu.1 cnc",
    "巨蟹座 μ2": "mu.2 cnc",
    "巨蟹座 ν": "nu. cnc",
    "巨蟹座 ξ": "ksi cnc",
    "巨蟹座 ο1": "omi1 cnc",
    "巨蟹座 ο2": "omi2 cnc",
    "巨蟹座 π": "pi. cnc",
    "巨蟹座 π1": "pi.1 cnc",
    "巨蟹座 π2": "pi.2 cnc",
    "巨蟹座 ρ1": "rho1 cnc",
    "巨蟹座 ρ2": "rho2 cnc",
    "巨蟹座 σ1": "sig1 cnc",
    "巨蟹座 σ2": "sig2 cnc",
    "巨蟹座 σ3": "sig3 cnc",
    "巨蟹座 τ": "tau cnc",
    "巨蟹座 υ1": "ups1 cnc",
    "巨蟹座 υ2": "ups2 cnc",
    "巨蟹座 φ1": "phi1 cnc",
    "巨蟹座 φ2": "phi2 cnc",
    "巨蟹座 χ": "chi cnc",
    "巨蟹座 ψ": "psi cnc",
    "巨蟹座 ψ1": "psi1 cnc",
    "巨蟹座 ψ2": "psi2 cnc",
    "巨蟹座 ω1": "ome1 cnc",
    "巨蟹座 ω2": "ome2 cnc",
    "巨蟹座 b": "b cnc",
    "巨蟹座 c": "c cnc",
    "巨蟹座 d1": "d1 cnc",
    "巨蟹座 d2": "d2 cnc",
    "巨蟹座 A1": "a1 cnc",
    "巨蟹座 A2": "a2 cnc",
    "巨蟹座 1": "1 cnc",
    "巨蟹座 2": "2 cnc",
    "巨蟹座 3": "3 cnc",
    "巨蟹座 4": "4 cnc",
    "巨蟹座 5": "5 cnc",
    "巨蟹座 7": "7 cnc",
    "巨蟹座 8": "8 cnc",
    "巨蟹座 9": "9 cnc",
    "巨蟹座 10": "10 cnc",
    "巨蟹座 11": "11 cnc",
    "巨蟹座 12": "12 cnc",
    "巨蟹座 13": "13 cnc",
    "巨蟹座 14": "14 cnc",
    "巨蟹座 15": "15 cnc",
    "巨蟹座 16": "16 cnc",
    "巨蟹座 17": "17 cnc",
    "巨蟹座 18": "18 cnc",
    "巨蟹座 19": "19 cnc",
    "巨蟹座 20": "20 cnc",
    "巨蟹座 21": "21 cnc",
    "巨蟹座 22": "22 cnc",
    "巨蟹座 23": "23 cnc",
    "巨蟹座 24": "24 cnc",
    "巨蟹座 25": "25 cnc",
    "巨蟹座 27": "27 cnc",
    "巨蟹座 28": "28 cnc",
    "巨蟹座 29": "29 cnc",
    "巨蟹座 30": "30 cnc",
    "巨蟹座 31": "31 cnc",
    "巨蟹座 32": "32 cnc",
    "巨蟹座 33": "33 cnc",
    "巨蟹座 34": "34 cnc",
    "巨蟹座 35": "35 cnc",
    "巨蟹座 36": "36 cnc",
    "巨蟹座 37": "37 cnc",
    "巨蟹座 38": "38 cnc",
    "巨蟹座 39": "39 cnc",
    "巨蟹座 40": "40 cnc",
    "巨蟹座 41": "41 cnc",
    "巨蟹座 42": "42 cnc",
    "巨蟹座 43": "43 cnc",
    "巨蟹座 44": "44 cnc",
    "巨蟹座 45": "45 cnc",
    "巨蟹座 46": "46 cnc",
    "巨蟹座 47": "47 cnc",
    "巨蟹座 48": "48 cnc",
    "巨蟹座 49": "49 cnc",
    "巨蟹座 50": "50 cnc",
    "巨蟹座 51": "51 cnc",
    "巨蟹座 52": "52 cnc",
    "巨蟹座 53": "53 cnc",
    "巨蟹座 54": "54 cnc",
    "巨蟹座 55": "55 cnc",
    "巨蟹座 57": "57 cnc",
    "巨蟹座 58": "58 cnc",
    "巨蟹座 59": "59 cnc",
    "巨蟹座 60": "60 cnc",
    "巨蟹座 61": "61 cnc",
    "巨蟹座 62": "62 cnc",
    "巨蟹座 63": "63 cnc",
    "巨蟹座 64": "64 cnc",
    "巨蟹座 65": "65 cnc",
    "巨蟹座 66": "66 cnc",
    "巨蟹座 67": "67 cnc",
    "巨蟹座 68": "68 cnc",
    "巨蟹座 69": "69 cnc",
    "巨蟹座 70": "70 cnc",
    "巨蟹座 71": "71 cnc",
    "巨蟹座 72": "72 cnc",
    "巨蟹座 75": "75 cnc",
    "巨蟹座 76": "76 cnc",
    "巨蟹座 77": "77 cnc",
    "巨蟹座 78": "78 cnc",
    "巨蟹座 79": "79 cnc",
    "巨蟹座 80": "80 cnc",
    "巨蟹座 81": "81 cnc",
    "巨蟹座 82": "82 cnc",
    "巨蟹座 83": "83 cnc",
    "猎犬座 α1": "alf1 cvn",
    "猎犬座 α2": "alf2 cvn",
    "猎犬座 β": "bet cvn",
    "猎犬座 1": "1 cvn",
    "猎犬座 2": "2 cvn",
    "猎犬座 3": "3 cvn",
    "猎犬座 4": "4 cvn",
    "猎犬座 5": "5 cvn",
    "猎犬座 6": "6 cvn",
    "猎犬座 7": "7 cvn",
    "猎犬座 8": "8 cvn",
    "猎犬座 9": "9 cvn",
    "猎犬座 10": "10 cvn",
    "猎犬座 11": "11 cvn",
    "猎犬座 12": "12 cvn",
    "猎犬座 14": "14 cvn",
    "猎犬座 15": "15 cvn",
    "猎犬座 16": "16 cvn",
    "猎犬座 17": "17 cvn",
    "猎犬座 18": "18 cvn",
    "猎犬座 19": "19 cvn",
    "猎犬座 20": "20 cvn",
    "猎犬座 21": "21 cvn",
    "猎犬座 23": "23 cvn",
    "猎犬座 24": "24 cvn",
    "猎犬座 25": "25 cvn",
    "大犬座 α": "alf cma",
    "大犬座 β": "bet cma",
    "大犬座 γ": "gam cma",
    "大犬座 δ": "del cma",
    "大犬座 ε": "eps cma",
    "大犬座 ζ": "zet cma",
    "大犬座 η": "eta cma",
    "大犬座 θ": "tet cma",
    "大犬座 ι": "iot cma",
    "大犬座 κ": "kap cma",
    "大犬座 λ": "lam cma",
    "大犬座 μ": "mu. cma",
    "大犬座 ν1": "nu.1 cma",
    "大犬座 ν2": "nu.2 cma",
    "大犬座 ν3": "nu.3 cma",
    "大犬座 ξ1": "ksi1 cma",
    "大犬座 ξ2": "ksi2 cma",
    "大犬座 ο1": "omi1 cma",
    "大犬座 ο2": "omi2 cma",
    "大犬座 π": "pi. cma",
    "大犬座 σ": "sig cma",
    "大犬座 τ": "tau cma",
    "大犬座 ω": "ome cma",
    "大犬座 1": "1 cma",
    "大犬座 2": "2 cma",
    "大犬座 4": "4 cma",
    "大犬座 5": "5 cma",
    "大犬座 6": "6 cma",
    "大犬座 7": "7 cma",
    "大犬座 8": "8 cma",
    "大犬座 9": "9 cma",
    "大犬座 10": "10 cma",
    "大犬座 11": "11 cma",
    "大犬座 12": "12 cma",
    "大犬座 13": "13 cma",
    "大犬座 14": "14 cma",
    "大犬座 15": "15 cma",
    "大犬座 16": "16 cma",
    "大犬座 17": "17 cma",
    "大犬座 18": "18 cma",
    "大犬座 19": "19 cma",
    "大犬座 20": "20 cma",
    "大犬座 21": "21 cma",
    "大犬座 22": "22 cma",
    "大犬座 23": "23 cma",
    "大犬座 24": "24 cma",
    "大犬座 25": "25 cma",
    "大犬座 26": "26 cma",
    "大犬座 27": "27 cma",
    "大犬座 28": "28 cma",
    "大犬座 29": "29 cma",
    "大犬座 30": "30 cma",
    "大犬座 31": "31 cma",
    "大犬座 145": "145 cma",
    "小犬座 α": "alf cmi",
    "小犬座 β": "bet cmi",
    "小犬座 γ": "gam cmi",
    "小犬座 δ1": "del1 cmi",
    "小犬座 δ2": "del2 cmi",
    "小犬座 δ3": "del3 cmi",
    "小犬座 ε": "eps cmi",
    "小犬座 ζ": "zet cmi",
    "小犬座 η": "eta cmi",
    "小犬座 1": "1 cmi",
    "小犬座 2": "2 cmi",
    "小犬座 3": "3 cmi",
    "小犬座 4": "4 cmi",
    "小犬座 5": "5 cmi",
    "小犬座 6": "6 cmi",
    "小犬座 7": "7 cmi",
    "小犬座 8": "8 cmi",
    "小犬座 9": "9 cmi",
    "小犬座 10": "10 cmi",
    "小犬座 11": "11 cmi",
    "小犬座 13": "13 cmi",
    "小犬座 14": "14 cmi",
    "摩羯座 α1": "alf1 cap",
    "摩羯座 α2": "alf2 cap",
    "摩羯座 β": "bet cap",
    "摩羯座 β1": "bet1 cap",
    "摩羯座 β2": "bet2 cap",
    "摩羯座 γ": "gam cap",
    "摩羯座 δ": "del cap",
    "摩羯座 ε": "eps cap",
    "摩羯座 ζ": "zet cap",
    "摩羯座 η": "eta cap",
    "摩羯座 θ": "tet cap",
    "摩羯座 ι": "iot cap",
    "摩羯座 κ": "kap cap",
    "摩羯座 λ": "lam cap",
    "摩羯座 μ": "mu. cap",
    "摩羯座 ν": "nu. cap",
    "摩羯座 ξ": "ksi cap",
    "摩羯座 ξ1": "ksi1 cap",
    "摩羯座 ξ2": "ksi2 cap",
    "摩羯座 ο": "omi cap",
    "摩羯座 π": "pi. cap",
    "摩羯座 ρ": "rho cap",
    "摩羯座 σ": "sig cap",
    "摩羯座 τ": "tau cap",
    "摩羯座 τ1": "tau1 cap",
    "摩羯座 τ2": "tau2 cap",
    "摩羯座 υ": "ups cap",
    "摩羯座 φ": "phi cap",
    "摩羯座 χ": "chi cap",
    "摩羯座 ψ": "psi cap",
    "摩羯座 ω": "ome cap",
    "摩羯座 b": "b cap",
    "摩羯座 c": "c cap",
    "摩羯座 A": "a cap",
    "摩羯座 1": "1 cap",
    "摩羯座 2": "2 cap",
    "摩羯座 3": "3 cap",
    "摩羯座 4": "4 cap",
    "摩羯座 5": "5 cap",
    "摩羯座 6": "6 cap",
    "摩羯座 7": "7 cap",
    "摩羯座 8": "8 cap",
    "摩羯座 9": "9 cap",
    "摩羯座 10": "10 cap",
    "摩羯座 11": "11 cap",
    "摩羯座 12": "12 cap",
    "摩羯座 13": "13 cap",
    "摩羯座 14": "14 cap",
    "摩羯座 15": "15 cap",
    "摩羯座 16": "16 cap",
    "摩羯座 17": "17 cap",
    "摩羯座 18": "18 cap",
    "摩羯座 19": "19 cap",
    "摩羯座 20": "20 cap",
    "摩羯座 21": "21 cap",
    "摩羯座 22": "22 cap",
    "摩羯座 23": "23 cap",
    "摩羯座 24": "24 cap",
    "摩羯座 25": "25 cap",
    "摩羯座 26": "26 cap",
    "摩羯座 27": "27 cap",
    "摩羯座 28": "28 cap",
    "摩羯座 29": "29 cap",
    "摩羯座 30": "30 cap",
    "摩羯座 31": "31 cap",
    "摩羯座 32": "32 cap",
    "摩羯座 33": "33 cap",
    "摩羯座 34": "34 cap",
    "摩羯座 35": "35 cap",
    "摩羯座 36": "36 cap",
    "摩羯座 37": "37 cap",
    "摩羯座 38": "38 cap",
    "摩羯座 39": "39 cap",
    "摩羯座 40": "40 cap",
    "摩羯座 41": "41 cap",
    "摩羯座 42": "42 cap",
    "摩羯座 43": "43 cap",
    "摩羯座 44": "44 cap",
    "摩羯座 45": "45 cap",
    "摩羯座 46": "46 cap",
    "摩羯座 47": "47 cap",
    "摩羯座 48": "48 cap",
    "摩羯座 49": "49 cap",
    "摩羯座 50": "50 cap",
    "摩羯座 51": "51 cap",
    "船底座 α": "alf car",
    "船底座 β": "bet car",
    "船底座 ε": "eps car",
    "船底座 θ": "tet car",
    "船底座 ι": "iot car",
    "船底座 υ": "ups car",
    "船底座 χ": "chi car",
    "船底座 ω": "ome car",
    "船底座 a": "a car",
    "船底座 b1": "b1 car",
    "船底座 b2": "b2 car",
    "船底座 c": "c car",
    "船底座 d": "d car",
    "船底座 e1": "e1 car",
    "船底座 e2": "e2 car",
    "船底座 f": "f car",
    "船底座 g": "g car",
    "船底座 h": "h car",
    "船底座 i": "i car",
    "船底座 k": "k car",
    "船底座 l": "l car",
    "船底座 m": "m car",
    "船底座 p": "p car",
    "船底座 q": "q car",
    "船底座 r": "r car",
    "船底座 s": "s car",
    "船底座 t1": "t1 car",
    "船底座 t2": "t2 car",
    "船底座 u": "u car",
    "船底座 w": "w car",
    "船底座 x": "x car",
    "船底座 y": "y car",
    "船底座 z": "z car",
    "船底座 z1": "z1 car",
    "船底座 z2": "z2 car",
    "船底座 A": "a car",
    "船底座 B": "b car",
    "船底座 C": "c car",
    "船底座 D": "d car",
    "船底座 E": "e car",
    "船底座 G": "g car",
    "船底座 H": "h car",
    "船底座 I": "i car",
    "船底座 K": "k car",
    "船底座 L": "l car",
    "船底座 M": "m car",
    "船底座 N": "n car",
    "船底座 O": "o car",
    "船底座 P": "p car",
    "船底座 Q": "q car",
    "仙后座 α": "alf cas",
    "仙后座 β": "bet cas",
    "仙后座 γ": "gam cas",
    "仙后座 δ": "del cas",
    "仙后座 ε": "eps cas",
    "仙后座 ζ": "zet cas",
    "仙后座 η": "eta cas",
    "仙后座 θ": "tet cas",
    "仙后座 ι": "iot cas",
    "仙后座 κ": "kap cas",
    "仙后座 λ": "lam cas",
    "仙后座 μ": "mu. cas",
    "仙后座 ν": "nu. cas",
    "仙后座 ξ": "ksi cas",
    "仙后座 ο": "omi cas",
    "仙后座 π": "pi. cas",
    "仙后座 ρ": "rho cas",
    "仙后座 σ": "sig cas",
    "仙后座 τ": "tau cas",
    "仙后座 υ1": "ups1 cas",
    "仙后座 υ2": "ups2 cas",
    "仙后座 φ": "phi cas",
    "仙后座 χ": "chi cas",
    "仙后座 ψ": "psi cas",
    "仙后座 ω": "ome cas",
    "仙后座 A": "a cas",
    "仙后座 1": "1 cas",
    "仙后座 2": "2 cas",
    "仙后座 4": "4 cas",
    "仙后座 5": "5 cas",
    "仙后座 6": "6 cas",
    "仙后座 7": "7 cas",
    "仙后座 8": "8 cas",
    "仙后座 9": "9 cas",
    "仙后座 10": "10 cas",
    "仙后座 11": "11 cas",
    "仙后座 12": "12 cas",
    "仙后座 13": "13 cas",
    "仙后座 14": "14 cas",
    "仙后座 15": "15 cas",
    "仙后座 16": "16 cas",
    "仙后座 17": "17 cas",
    "仙后座 18": "18 cas",
    "仙后座 19": "19 cas",
    "仙后座 20": "20 cas",
    "仙后座 21": "21 cas",
    "仙后座 22": "22 cas",
    "仙后座 23": "23 cas",
    "仙后座 24": "24 cas",
    "仙后座 25": "25 cas",
    "仙后座 26": "26 cas",
    "仙后座 27": "27 cas",
    "仙后座 28": "28 cas",
    "仙后座 30": "30 cas",
    "仙后座 31": "31 cas",
    "仙后座 32": "32 cas",
    "仙后座 33": "33 cas",
    "仙后座 34": "34 cas",
    "仙后座 35": "35 cas",
    "仙后座 36": "36 cas",
    "仙后座 37": "37 cas",
    "仙后座 38": "38 cas",
    "仙后座 39": "39 cas",
    "仙后座 40": "40 cas",
    "仙后座 42": "42 cas",
    "仙后座 43": "43 cas",
    "仙后座 44": "44 cas",
    "仙后座 45": "45 cas",
    "仙后座 46": "46 cas",
    "仙后座 47": "47 cas",
    "仙后座 48": "48 cas",
    "仙后座 49": "49 cas",
    "仙后座 50": "50 cas",
    "仙后座 51": "51 cas",
    "仙后座 52": "52 cas",
    "仙后座 53": "53 cas",
    "仙后座 54": "54 cas",
    "仙后座 55": "55 cas",
    "半人马座 α": "alf cen",
    "半人马座 α1": "alf1 cen",
    "半人马座 α2": "alf2 cen",
    "半人马座 β": "bet cen",
    "半人马座 γ": "gam cen",
    "半人马座 δ": "del cen",
    "半人马座 ε": "eps cen",
    "半人马座 ζ": "zet cen",
    "半人马座 η": "eta cen",
    "半人马座 θ": "tet cen",
    "半人马座 ι": "iot cen",
    "半人马座 κ": "kap cen",
    "半人马座 λ": "lam cen",
    "半人马座 μ": "mu. cen",
    "半人马座 ν": "nu. cen",
    "半人马座 ξ1": "ksi1 cen",
    "半人马座 ξ2": "ksi2 cen",
    "半人马座 ο1": "omi1 cen",
    "半人马座 ο2": "omi2 cen",
    "半人马座 π": "pi. cen",
    "半人马座 ρ": "rho cen",
    "半人马座 σ": "sig cen",
    "半人马座 τ": "tau cen",
    "半人马座 υ1": "ups1 cen",
    "半人马座 υ2": "ups2 cen",
    "半人马座 φ": "phi cen",
    "半人马座 χ": "chi cen",
    "半人马座 ψ": "psi cen",
    "半人马座 a": "a cen",
    "半人马座 b": "b cen",
    "半人马座 c1": "c1 cen",
    "半人马座 c2": "c2 cen",
    "半人马座 d": "d cen",
    "半人马座 e": "e cen",
    "半人马座 f": "f cen",
    "半人马座 g": "g cen",
    "半人马座 h": "h cen",
    "半人马座 i": "i cen",
    "半人马座 j": "j cen",
    "半人马座 k": "k cen",
    "半人马座 l": "l cen",
    "半人马座 m": "m cen",
    "半人马座 n": "n cen",
    "半人马座 p": "p cen",
    "半人马座 r": "r cen",
    "半人马座 u": "u cen",
    "半人马座 v": "v cen",
    "半人马座 w": "w cen",
    "半人马座 x1": "x1 cen",
    "半人马座 x2": "x2 cen",
    "半人马座 y": "y cen",
    "半人马座 z": "z cen",
    "半人马座 A": "a cen",
    "半人马座 B": "b cen",
    "半人马座 C1": "c1 cen",
    "半人马座 C2": "c2 cen",
    "半人马座 C3": "c3 cen",
    "半人马座 D": "d cen",
    "半人马座 E": "e cen",
    "半人马座 F": "f cen",
    "半人马座 G": "g cen",
    "半人马座 H": "h cen",
    "半人马座 J": "j cen",
    "半人马座 K": "k cen",
    "半人马座 M": "m cen",
    "半人马座 N": "n cen",
    "半人马座 Q": "q cen",
    "半人马座 1": "1 cen",
    "半人马座 2": "2 cen",
    "半人马座 3": "3 cen",
    "半人马座 4": "4 cen",
    "半人马座 5": "5 cen",
    "仙王座 α": "alf cep",
    "仙王座 β": "bet cep",
    "仙王座 γ": "gam cep",
    "仙王座 δ": "del cep",
    "仙王座 ε": "eps cep",
    "仙王座 ζ": "zet cep",
    "仙王座 η": "eta cep",
    "仙王座 θ": "tet cep",
    "仙王座 ι": "iot cep",
    "仙王座 κ": "kap cep",
    "仙王座 λ": "lam cep",
    "仙王座 μ": "mu. cep",
    "仙王座 ν": "nu. cep",
    "仙王座 ξ": "ksi cep",
    "仙王座 ο": "omi cep",
    "仙王座 π": "pi. cep",
    "仙王座 ρ": "rho cep",
    "仙王座 ρ1": "rho1 cep",
    "仙王座 ρ2": "rho2 cep",
    "仙王座 1": "1 cep",
    "仙王座 2": "2 cep",
    "仙王座 3": "3 cep",
    "仙王座 4": "4 cep",
    "仙王座 5": "5 cep",
    "仙王座 6": "6 cep",
    "仙王座 7": "7 cep",
    "仙王座 8": "8 cep",
    "仙王座 9": "9 cep",
    "仙王座 10": "10 cep",
    "仙王座 11": "11 cep",
    "仙王座 12": "12 cep",
    "仙王座 13": "13 cep",
    "仙王座 14": "14 cep",
    "仙王座 15": "15 cep",
    "仙王座 16": "16 cep",
    "仙王座 17": "17 cep",
    "仙王座 18": "18 cep",
    "仙王座 19": "19 cep",
    "仙王座 20": "20 cep",
    "仙王座 21": "21 cep",
    "仙王座 22": "22 cep",
    "仙王座 23": "23 cep",
    "仙王座 24": "24 cep",
    "仙王座 25": "25 cep",
    "仙王座 26": "26 cep",
    "仙王座 27": "27 cep",
    "仙王座 28": "28 cep",
    "仙王座 29": "29 cep",
    "仙王座 30": "30 cep",
    "仙王座 31": "31 cep",
    "仙王座 32": "32 cep",
    "仙王座 33": "33 cep",
    "仙王座 34": "34 cep",
    "仙王座 35": "35 cep",
    "鲸鱼座 α": "alf cet",
    "鲸鱼座 β": "bet cet",
    "鲸鱼座 γ": "gam cet",
    "鲸鱼座 δ": "del cet",
    "鲸鱼座 ε": "eps cet",
    "鲸鱼座 ζ": "zet cet",
    "鲸鱼座 η": "eta cet",
    "鲸鱼座 θ": "tet cet",
    "鲸鱼座 ι": "iot cet",
    "鲸鱼座 κ1": "kap1 cet",
    "鲸鱼座 κ2": "kap2 cet",
    "鲸鱼座 λ": "lam cet",
    "鲸鱼座 μ": "mu. cet",
    "鲸鱼座 ν": "nu. cet",
    "鲸鱼座 ξ1": "ksi1 cet",
    "鲸鱼座 ξ2": "ksi2 cet",
    "鲸鱼座 ο": "omi cet",
    "鲸鱼座 π": "pi. cet",
    "鲸鱼座 ρ": "rho cet",
    "鲸鱼座 σ": "sig cet",
    "鲸鱼座 τ": "tau cet",
    "鲸鱼座 υ": "ups cet",
    "鲸鱼座 φ1": "phi1 cet",
    "鲸鱼座 φ2": "phi2 cet",
    "鲸鱼座 φ3": "phi3 cet",
    "鲸鱼座 φ4": "phi4 cet",
    "鲸鱼座 χ": "chi cet",
    "鲸鱼座 ψ": "psi cet",
    "鲸鱼座 1": "1 cet",
    "鲸鱼座 2": "2 cet",
    "鲸鱼座 3": "3 cet",
    "鲸鱼座 4": "4 cet",
    "鲸鱼座 5": "5 cet",
    "鲸鱼座 6": "6 cet",
    "鲸鱼座 7": "7 cet",
    "鲸鱼座 8": "8 cet",
    "鲸鱼座 9": "9 cet",
    "鲸鱼座 10": "10 cet",
    "鲸鱼座 11": "11 cet",
    "鲸鱼座 12": "12 cet",
    "鲸鱼座 13": "13 cet",
    "鲸鱼座 14": "14 cet",
    "鲸鱼座 15": "15 cet",
    "鲸鱼座 16": "16 cet",
    "鲸鱼座 17": "17 cet",
    "鲸鱼座 18": "18 cet",
    "鲸鱼座 19": "19 cet",
    "鲸鱼座 20": "20 cet",
    "鲸鱼座 21": "21 cet",
    "鲸鱼座 22": "22 cet",
    "鲸鱼座 23": "23 cet",
    "鲸鱼座 25": "25 cet",
    "鲸鱼座 26": "26 cet",
    "鲸鱼座 27": "27 cet",
    "鲸鱼座 28": "28 cet",
    "鲸鱼座 29": "29 cet",
    "鲸鱼座 30": "30 cet",
    "鲸鱼座 31": "31 cet",
    "鲸鱼座 32": "32 cet",
    "鲸鱼座 33": "33 cet",
    "鲸鱼座 34": "34 cet",
    "鲸鱼座 35": "35 cet",
    "鲸鱼座 36": "36 cet",
    "鲸鱼座 37": "37 cet",
    "鲸鱼座 38": "38 cet",
    "鲸鱼座 39": "39 cet",
    "鲸鱼座 40": "40 cet",
    "鲸鱼座 41": "41 cet",
    "鲸鱼座 42": "42 cet",
    "鲸鱼座 43": "43 cet",
    "鲸鱼座 44": "44 cet",
    "鲸鱼座 45": "45 cet",
    "鲸鱼座 46": "46 cet",
    "鲸鱼座 47": "47 cet",
    "鲸鱼座 48": "48 cet",
    "鲸鱼座 49": "49 cet",
    "鲸鱼座 50": "50 cet",
    "鲸鱼座 52": "52 cet",
    "鲸鱼座 53": "53 cet",
    "鲸鱼座 54": "54 cet",
    "鲸鱼座 55": "55 cet",
    "鲸鱼座 56": "56 cet",
    "鲸鱼座 57": "57 cet",
    "鲸鱼座 58": "58 cet",
    "鲸鱼座 59": "59 cet",
    "鲸鱼座 60": "60 cet",
    "鲸鱼座 61": "61 cet",
    "鲸鱼座 62": "62 cet",
    "鲸鱼座 63": "63 cet",
    "鲸鱼座 64": "64 cet",
    "鲸鱼座 65": "65 cet",
    "鲸鱼座 66": "66 cet",
    "鲸鱼座 67": "67 cet",
    "鲸鱼座 68": "68 cet",
    "鲸鱼座 69": "69 cet",
    "鲸鱼座 70": "70 cet",
    "鲸鱼座 71": "71 cet",
    "鲸鱼座 72": "72 cet",
    "鲸鱼座 73": "73 cet",
    "鲸鱼座 75": "75 cet",
    "鲸鱼座 76": "76 cet",
    "鲸鱼座 77": "77 cet",
    "鲸鱼座 78": "78 cet",
    "鲸鱼座 79": "79 cet",
    "鲸鱼座 80": "80 cet",
    "鲸鱼座 81": "81 cet",
    "鲸鱼座 82": "82 cet",
    "鲸鱼座 83": "83 cet",
    "鲸鱼座 84": "84 cet",
    "鲸鱼座 85": "85 cet",
    "鲸鱼座 86": "86 cet",
    "鲸鱼座 87": "87 cet",
    "鲸鱼座 88": "88 cet",
    "鲸鱼座 89": "89 cet",
    "鲸鱼座 91": "91 cet",
    "鲸鱼座 92": "92 cet",
    "鲸鱼座 93": "93 cet",
    "鲸鱼座 94": "94 cet",
    "鲸鱼座 95": "95 cet",
    "鲸鱼座 96": "96 cet",
    "鲸鱼座 97": "97 cet",
    "蝘蜓座 α": "alf cha",
    "蝘蜓座 β": "bet cha",
    "蝘蜓座 γ": "gam cha",
    "蝘蜓座 δ1": "del1 cha",
    "蝘蜓座 δ2": "del2 cha",
    "蝘蜓座 ε": "eps cha",
    "蝘蜓座 ζ": "zet cha",
    "蝘蜓座 η": "eta cha",
    "蝘蜓座 θ": "tet cha",
    "蝘蜓座 ι": "iot cha",
    "蝘蜓座 κ": "kap cha",
    "蝘蜓座 λ": "lam cha",
    "蝘蜓座 μ": "mu. cha",
    "蝘蜓座 μ1": "mu.1 cha",
    "蝘蜓座 μ2": "mu.2 cha",
    "蝘蜓座 ν": "nu. cha",
    "蝘蜓座 π": "pi. cha",
    "圆规座 α": "alf cir",
    "圆规座 β": "bet cir",
    "圆规座 γ": "gam cir",
    "圆规座 δ": "del cir",
    "圆规座 ε": "eps cir",
    "圆规座 ζ": "zet cir",
    "圆规座 η": "eta cir",
    "圆规座 θ": "tet cir",
    "天鸽座 α": "alf col",
    "天鸽座 β": "bet col",
    "天鸽座 γ": "gam col",
    "天鸽座 δ": "del col",
    "大犬座 3": "3 cma",
    "天鸽座 ε": "eps col",
    "天鸽座 η": "eta col",
    "天鸽座 θ": "tet col",
    "天鸽座 κ": "kap col",
    "天鸽座 λ": "lam col",
    "天鸽座 μ": "mu. col",
    "天鸽座 ν1": "nu.1 col",
    "天鸽座 ν2": "nu.2 col",
    "天鸽座 ξ": "ksi col",
    "天鸽座 ο": "omi col",
    "天鸽座 π1": "pi.1 col",
    "天鸽座 π2": "pi.2 col",
    "天鸽座 σ": "sig col",
    "天鸽座 3": "3 col",
    "天鸽座 72": "72 col",
    "后发座 α": "alf com",
    "后发座 β": "bet com",
    "后发座 γ": "gam com",
    "后发座 1": "1 com",
    "后发座 2": "2 com",
    "后发座 3": "3 com",
    "后发座 4": "4 com",
    "后发座 5": "5 com",
    "后发座 6": "6 com",
    "后发座 7": "7 com",
    "后发座 8": "8 com",
    "后发座 9": "9 com",
    "后发座 10": "10 com",
    "后发座 11": "11 com",
    "后发座 12": "12 com",
    "后发座 13": "13 com",
    "后发座 14": "14 com",
    "后发座 15": "15 com",
    "后发座 16": "16 com",
    "后发座 17": "17 com",
    "后发座 18": "18 com",
    "后发座 20": "20 com",
    "后发座 21": "21 com",
    "后发座 22": "22 com",
    "后发座 23": "23 com",
    "后发座 24": "24 com",
    "后发座 25": "25 com",
    "后发座 26": "26 com",
    "后发座 27": "27 com",
    "后发座 28": "28 com",
    "后发座 29": "29 com",
    "后发座 30": "30 com",
    "后发座 31": "31 com",
    "后发座 32": "32 com",
    "后发座 33": "33 com",
    "后发座 35": "35 com",
    "后发座 36": "36 com",
    "后发座 37": "37 com",
    "猎犬座 13": "13 cvn",
    "后发座 38": "38 com",
    "后发座 39": "39 com",
    "后发座 40": "40 com",
    "后发座 41": "41 com",
    "后发座 42": "42 com",
    "后发座 43": "43 com",
    "南冕座 α": "alf cra",
    "南冕座 β": "bet cra",
    "南冕座 γ": "gam cra",
    "南冕座 δ": "del cra",
    "南冕座 ε": "eps cra",
    "南冕座 ζ": "zet cra",
    "南冕座 η1": "eta1 cra",
    "南冕座 η2": "eta2 cra",
    "南冕座 θ": "tet cra",
    "南冕座 κ1": "kap1 cra",
    "南冕座 κ2": "kap2 cra",
    "南冕座 λ": "lam cra",
    "南冕座 μ": "mu. cra",
    "北冕座 α": "alf crb",
    "北冕座 β": "bet crb",
    "北冕座 γ": "gam crb",
    "北冕座 δ": "del crb",
    "北冕座 ε": "eps crb",
    "北冕座 ζ1": "zet1 crb",
    "北冕座 ζ2": "zet2 crb",
    "北冕座 η": "eta crb",
    "北冕座 θ": "tet crb",
    "北冕座 ι": "iot crb",
    "北冕座 κ": "kap crb",
    "北冕座 λ": "lam crb",
    "北冕座 μ": "mu. crb",
    "北冕座 ν1": "nu.1 crb",
    "北冕座 ν2": "nu.2 crb",
    "北冕座 ξ": "ksi crb",
    "北冕座 ο": "omi crb",
    "北冕座 π": "pi. crb",
    "北冕座 ρ": "rho crb",
    "北冕座 σ": "sig crb",
    "北冕座 τ": "tau crb",
    "北冕座 υ": "ups crb",
    "北冕座 1": "1 crb",
    "北冕座 2": "2 crb",
    "北冕座 3": "3 crb",
    "北冕座 4": "4 crb",
    "北冕座 5": "5 crb",
    "北冕座 6": "6 crb",
    "北冕座 7": "7 crb",
    "北冕座 8": "8 crb",
    "北冕座 9": "9 crb",
    "北冕座 10": "10 crb",
    "北冕座 11": "11 crb",
    "北冕座 12": "12 crb",
    "北冕座 13": "13 crb",
    "北冕座 14": "14 crb",
    "北冕座 15": "15 crb",
    "北冕座 16": "16 crb",
    "北冕座 17": "17 crb",
    "北冕座 18": "18 crb",
    "北冕座 19": "19 crb",
    "北冕座 20": "20 crb",
    "北冕座 21": "21 crb",
    "乌鸦座 α": "alf crv",
    "乌鸦座 β": "bet crv",
    "乌鸦座 γ": "gam crv",
    "乌鸦座 δ": "del crv",
    "乌鸦座 ε": "eps crv",
    "乌鸦座 ζ": "zet crv",
    "乌鸦座 η": "eta crv",
    "乌鸦座 1": "1 crv",
    "乌鸦座 2": "2 crv",
    "乌鸦座 3": "3 crv",
    "乌鸦座 4": "4 crv",
    "乌鸦座 5": "5 crv",
    "乌鸦座 6": "6 crv",
    "乌鸦座 7": "7 crv",
    "乌鸦座 8": "8 crv",
    "乌鸦座 9": "9 crv",
    "巨爵座 α": "alf crt",
    "巨爵座 β": "bet crt",
    "巨爵座 γ": "gam crt",
    "巨爵座 δ": "del crt",
    "巨爵座 ε": "eps crt",
    "巨爵座 ζ": "zet crt",
    "巨爵座 η": "eta crt",
    "巨爵座 θ": "tet crt",
    "巨爵座 ι": "iot crt",
    "巨爵座 κ": "kap crt",
    "巨爵座 λ": "lam crt",
    "巨爵座 ψ": "psi crt",
    "巨爵座 5": "5 crt",
    "巨爵座 7": "7 crt",
    "巨爵座 8": "8 crt",
    "巨爵座 10": "10 crt",
    "巨爵座 11": "11 crt",
    "巨爵座 12": "12 crt",
    "巨爵座 13": "13 crt",
    "巨爵座 14": "14 crt",
    "巨爵座 15": "15 crt",
    "巨爵座 16": "16 crt",
    "长蛇座 N": "n hya",
    "巨爵座 17": "17 crt",
    "巨爵座 18": "18 crt",
    "巨爵座 20": "20 crt",
    "巨爵座 21": "21 crt",
    "巨爵座 22": "22 crt",
    "巨爵座 23": "23 crt",
    "巨爵座 24": "24 crt",
    "巨爵座 26": "26 crt",
    "巨爵座 27": "27 crt",
    "巨爵座 29": "29 crt",
    "巨爵座 30": "30 crt",
    "巨爵座 31": "31 crt",
    "南十字座 α1": "alf1 cru",
    "南十字座 α2": "alf2 cru",
    "南十字座 β": "bet cru",
    "南十字座 γ": "gam cru",
    "南十字座 δ": "del cru",
    "南十字座 ε": "eps cru",
    "南十字座 ζ": "zet cru",
    "南十字座 η": "eta cru",
    "南十字座 θ1": "tet1 cru",
    "南十字座 θ2": "tet2 cru",
    "南十字座 ι": "iot cru",
    "南十字座 κ": "kap cru",
    "南十字座 λ": "lam cru",
    "南十字座 μ1": "mu.1 cru",
    "南十字座 μ2": "mu.2 cru",
    "南十字座 35": "35 cru",
    "南十字座 39": "39 cru",
    "天鹅座 α": "alf cyg",
    "天鹅座 β1": "bet1 cyg",
    "天鹅座 β2": "bet2 cyg",
    "天鹅座 γ": "gam cyg",
    "天鹅座 δ": "del cyg",
    "天鹅座 ε": "eps cyg",
    "天鹅座 ζ": "zet cyg",
    "天鹅座 η": "eta cyg",
    "天鹅座 θ": "tet cyg",
    "天鹅座 ι": "iot cyg",
    "天鹅座 ι1": "iot1 cyg",
    "天鹅座 ι2": "iot2 cyg",
    "天鹅座 κ": "kap cyg",
    "天鹅座 λ": "lam cyg",
    "天鹅座 μ1": "mu.1 cyg",
    "天鹅座 μ2": "mu.2 cyg",
    "天鹅座 ν": "nu. cyg",
    "天鹅座 ξ": "ksi cyg",
    "天鹅座 ο1": "omi1 cyg",
    "天鹅座 ο2": "omi2 cyg",
    "天鹅座 π1": "pi.1 cyg",
    "天鹅座 π2": "pi.2 cyg",
    "天鹅座 ρ": "rho cyg",
    "天鹅座 σ": "sig cyg",
    "天鹅座 τ": "tau cyg",
    "天鹅座 υ": "ups cyg",
    "天鹅座 φ": "phi cyg",
    "天鹅座 χ": "chi cyg",
    "天鹅座 ψ": "psi cyg",
    "天鹅座 ω1": "ome1 cyg",
    "天鹅座 ω2": "ome2 cyg",
    "天鹅座 b1": "b1 cyg",
    "天鹅座 b2": "b2 cyg",
    "天鹅座 b3": "b3 cyg",
    "天鹅座 c": "c cyg",
    "天鹅座 d": "d cyg",
    "天鹅座 e": "e cyg",
    "天鹅座 f1": "f1 cyg",
    "天鹅座 f2": "f2 cyg",
    "天鹅座 g": "g cyg",
    "天鹅座 A": "a cyg",
    "天鹅座 P": "p cyg",
    "天鹅座 1": "1 cyg",
    "天鹅座 2": "2 cyg",
    "天鹅座 3": "3 cyg",
    "天鹅座 4": "4 cyg",
    "天鹅座 6": "6 cyg",
    "天鹅座 7": "7 cyg",
    "天鹅座 8": "8 cyg",
    "天鹅座 9": "9 cyg",
    "天鹅座 10": "10 cyg",
    "天鹅座 11": "11 cyg",
    "天鹅座 12": "12 cyg",
    "天鹅座 13": "13 cyg",
    "天鹅座 14": "14 cyg",
    "天鹅座 15": "15 cyg",
    "天鹅座 16": "16 cyg",
    "天鹅座 17": "17 cyg",
    "天鹅座 18": "18 cyg",
    "天鹅座 19": "19 cyg",
    "天鹅座 20": "20 cyg",
    "天鹅座 21": "21 cyg",
    "天鹅座 22": "22 cyg",
    "天鹅座 23": "23 cyg",
    "天鹅座 24": "24 cyg",
    "天鹅座 25": "25 cyg",
    "天鹅座 26": "26 cyg",
    "天鹅座 27": "27 cyg",
    "天鹅座 28": "28 cyg",
    "天鹅座 29": "29 cyg",
    "天鹅座 30": "30 cyg",
    "天鹅座 31": "31 cyg",
    "天鹅座 32": "32 cyg",
    "天鹅座 33": "33 cyg",
    "天鹅座 34": "34 cyg",
    "天鹅座 35": "35 cyg",
    "天鹅座 36": "36 cyg",
    "天鹅座 37": "37 cyg",
    "天鹅座 39": "39 cyg",
    "天鹅座 40": "40 cyg",
    "天鹅座 41": "41 cyg",
    "天鹅座 42": "42 cyg",
    "天鹅座 43": "43 cyg",
    "天鹅座 44": "44 cyg",
    "天鹅座 45": "45 cyg",
    "天鹅座 46": "46 cyg",
    "天鹅座 47": "47 cyg",
    "天鹅座 48": "48 cyg",
    "天鹅座 49": "49 cyg",
    "天鹅座 50": "50 cyg",
    "天鹅座 51": "51 cyg",
    "天鹅座 52": "52 cyg",
    "天鹅座 53": "53 cyg",
    "天鹅座 54": "54 cyg",
    "天鹅座 55": "55 cyg",
    "天鹅座 56": "56 cyg",
    "天鹅座 57": "57 cyg",
    "天鹅座 58": "58 cyg",
    "天鹅座 59": "59 cyg",
    "天鹅座 60": "60 cyg",
    "天鹅座 61": "61 cyg",
    "天鹅座 62": "62 cyg",
    "天鹅座 63": "63 cyg",
    "天鹅座 64": "64 cyg",
    "天鹅座 65": "65 cyg",
    "天鹅座 66": "66 cyg",
    "天鹅座 67": "67 cyg",
    "天鹅座 68": "68 cyg",
    "天鹅座 69": "69 cyg",
    "天鹅座 70": "70 cyg",
    "天鹅座 71": "71 cyg",
    "天鹅座 72": "72 cyg",
    "天鹅座 73": "73 cyg",
    "天鹅座 74": "74 cyg",
    "天鹅座 75": "75 cyg",
    "天鹅座 76": "76 cyg",
    "天鹅座 77": "77 cyg",
    "天鹅座 78": "78 cyg",
    "天鹅座 79": "79 cyg",
    "天鹅座 80": "80 cyg",
    "天鹅座 81": "81 cyg",
    "天鹅座 T": "t cyg",
    "海豚座 α": "alf del",
    "海豚座 β": "bet del",
    "海豚座 γ1": "gam1 del",
    "海豚座 γ2": "gam2 del",
    "海豚座 δ": "del del",
    "海豚座 ε": "eps del",
    "海豚座 ζ": "zet del",
    "海豚座 η": "eta del",
    "海豚座 θ": "tet del",
    "海豚座 ι": "iot del",
    "海豚座 κ": "kap del",
    "海豚座 1": "1 del",
    "海豚座 2": "2 del",
    "海豚座 3": "3 del",
    "海豚座 4": "4 del",
    "海豚座 5": "5 del",
    "海豚座 6": "6 del",
    "海豚座 7": "7 del",
    "海豚座 8": "8 del",
    "海豚座 9": "9 del",
    "海豚座 10": "10 del",
    "海豚座 11": "11 del",
    "海豚座 12": "12 del",
    "海豚座 13": "13 del",
    "海豚座 14": "14 del",
    "海豚座 15": "15 del",
    "海豚座 16": "16 del",
    "海豚座 17": "17 del",
    "海豚座 18": "18 del",
    "剑鱼座 α": "alf dor",
    "剑鱼座 β": "bet dor",
    "剑鱼座 γ": "gam dor",
    "剑鱼座 δ": "del dor",
    "剑鱼座 ε": "eps dor",
    "剑鱼座 ζ": "zet dor",
    "剑鱼座 η1": "eta1 dor",
    "剑鱼座 η2": "eta2 dor",
    "剑鱼座 θ": "tet dor",
    "剑鱼座 κ": "kap dor",
    "剑鱼座 λ": "lam dor",
    "剑鱼座 ν": "nu. dor",
    "剑鱼座 π1": "pi.1 dor",
    "剑鱼座 π2": "pi.2 dor",
    "天龙座 α": "alf dra",
    "天龙座 β": "bet dra",
    "天龙座 γ": "gam dra",
    "天龙座 δ": "del dra",
    "天龙座 ε": "eps dra",
    "天龙座 ζ": "zet dra",
    "天龙座 η": "eta dra",
    "天龙座 θ": "tet dra",
    "天龙座 ι": "iot dra",
    "天龙座 κ": "kap dra",
    "天龙座 λ": "lam dra",
    "天龙座 μ": "mu. dra",
    "天龙座 ν1": "nu.1 dra",
    "天龙座 ν2": "nu.2 dra",
    "天龙座 ξ": "ksi dra",
    "天龙座 ο": "omi dra",
    "天龙座 π": "pi. dra",
    "天龙座 ρ": "rho dra",
    "天龙座 σ": "sig dra",
    "天龙座 τ": "tau dra",
    "天龙座 υ": "ups dra",
    "天龙座 φ": "phi dra",
    "天龙座 χ": "chi dra",
    "天龙座 ψ1": "psi1 dra",
    "天龙座 ψ2": "psi2 dra",
    "天龙座 ω": "ome dra",
    "天龙座 b": "b dra",
    "天龙座 c": "c dra",
    "天龙座 d": "d dra",
    "天龙座 e": "e dra",
    "天龙座 f": "f dra",
    "天龙座 g": "g dra",
    "天龙座 h": "h dra",
    "天龙座 i": "i dra",
    "天龙座 A": "a dra",
    "天龙座 1": "1 dra",
    "天龙座 2": "2 dra",
    "天龙座 3": "3 dra",
    "天龙座 4": "4 dra",
    "天龙座 5": "5 dra",
    "天龙座 6": "6 dra",
    "天龙座 7": "7 dra",
    "天龙座 8": "8 dra",
    "天龙座 9": "9 dra",
    "天龙座 10": "10 dra",
    "天龙座 11": "11 dra",
    "天龙座 12": "12 dra",
    "天龙座 13": "13 dra",
    "天龙座 14": "14 dra",
    "天龙座 15": "15 dra",
    "天龙座 16": "16 dra",
    "天龙座 17": "17 dra",
    "天龙座 18": "18 dra",
    "天龙座 19": "19 dra",
    "天龙座 20": "20 dra",
    "天龙座 21": "21 dra",
    "天龙座 22": "22 dra",
    "天龙座 23": "23 dra",
    "天龙座 24": "24 dra",
    "天龙座 25": "25 dra",
    "天龙座 26": "26 dra",
    "天龙座 27": "27 dra",
    "天龙座 28": "28 dra",
    "天龙座 29": "29 dra",
    "天龙座 30": "30 dra",
    "天龙座 31": "31 dra",
    "天龙座 32": "32 dra",
    "天龙座 33": "33 dra",
    "天龙座 34": "34 dra",
    "天龙座 35": "35 dra",
    "天龙座 36": "36 dra",
    "天龙座 37": "37 dra",
    "天龙座 38": "38 dra",
    "天龙座 39": "39 dra",
    "天龙座 40": "40 dra",
    "天龙座 41": "41 dra",
    "天龙座 42": "42 dra",
    "天龙座 43": "43 dra",
    "天龙座 44": "44 dra",
    "天龙座 45": "45 dra",
    "天龙座 46": "46 dra",
    "天龙座 47": "47 dra",
    "天龙座 48": "48 dra",
    "天龙座 49": "49 dra",
    "天龙座 50": "50 dra",
    "天龙座 51": "51 dra",
    "天龙座 52": "52 dra",
    "天龙座 53": "53 dra",
    "天龙座 54": "54 dra",
    "天龙座 55": "55 dra",
    "天龙座 57": "57 dra",
    "天龙座 58": "58 dra",
    "天龙座 59": "59 dra",
    "天龙座 60": "60 dra",
    "天龙座 61": "61 dra",
    "天龙座 63": "63 dra",
    "天龙座 64": "64 dra",
    "天龙座 65": "65 dra",
    "天龙座 66": "66 dra",
    "天龙座 67": "67 dra",
    "天龙座 68": "68 dra",
    "天龙座 69": "69 dra",
    "天龙座 71": "71 dra",
    "天龙座 72": "72 dra",
    "天龙座 73": "73 dra",
    "天龙座 74": "74 dra",
    "天龙座 75": "75 dra",
    "天龙座 76": "76 dra",
    "天龙座 77": "77 dra",
    "天龙座 78": "78 dra",
    "天龙座 79": "79 dra",
    "天龙座 80": "80 dra",
    "小马座 α": "alf equ",
    "小马座 β": "bet equ",
    "小马座 γ": "gam equ",
    "小马座 δ": "del equ",
    "小马座 ε": "eps equ",
    "小马座 λ": "lam equ",
    "小马座 1": "1 equ",
    "小马座 2": "2 equ",
    "小马座 3": "3 equ",
    "小马座 4": "4 equ",
    "小马座 5": "5 equ",
    "小马座 6": "6 equ",
    "小马座 7": "7 equ",
    "小马座 8": "8 equ",
    "小马座 9": "9 equ",
    "小马座 10": "10 equ",
    "波江座 α": "alf eri",
    "波江座 β": "bet eri",
    "波江座 γ": "gam eri",
    "波江座 δ": "del eri",
    "波江座 ε": "eps eri",
    "波江座 ζ": "zet eri",
    "波江座 η": "eta eri",
    "波江座 θ1": "tet1 eri",
    "波江座 θ2": "tet2 eri",
    "波江座 ι": "iot eri",
    "波江座 κ": "kap eri",
    "波江座 λ": "lam eri",
    "波江座 μ": "mu. eri",
    "波江座 ν": "nu. eri",
    "波江座 ξ": "ksi eri",
    "波江座 ο1": "omi1 eri",
    "波江座 ο2": "omi2 eri",
    "波江座 π": "pi. eri",
    "波江座 ρ1": "rho1 eri",
    "波江座 ρ2": "rho2 eri",
    "波江座 ρ3": "rho3 eri",
    "波江座 τ1": "tau1 eri",
    "波江座 τ2": "tau2 eri",
    "波江座 τ3": "tau3 eri",
    "波江座 τ4": "tau4 eri",
    "波江座 τ5": "tau5 eri",
    "波江座 τ6": "tau6 eri",
    "波江座 τ7": "tau7 eri",
    "波江座 τ8": "tau8 eri",
    "波江座 τ9": "tau9 eri",
    "波江座 υ1": "ups1 eri",
    "波江座 υ2": "ups2 eri",
    "波江座 υ3": "ups3 eri",
    "波江座 υ4": "ups4 eri",
    "波江座 φ": "phi eri",
    "波江座 χ": "chi eri",
    "波江座 ψ": "psi eri",
    "波江座 ω": "ome eri",
    "波江座 b": "b eri",
    "波江座 c": "c eri",
    "波江座 d": "d eri",
    "波江座 e": "e eri",
    "波江座 f": "f eri",
    "波江座 g": "g eri",
    "波江座 h": "h eri",
    "波江座 i": "i eri",
    "波江座 l": "l eri",
    "波江座 p": "p eri",
    "波江座 q1": "q1 eri",
    "波江座 q2": "q2 eri",
    "波江座 r": "r eri",
    "波江座 s": "s eri",
    "波江座 u": "u eri",
    "波江座 v": "v eri",
    "波江座 w": "w eri",
    "波江座 y": "y eri",
    "波江座 z": "z eri",
    "波江座 A": "a eri",
    "波江座 1": "1 eri",
    "鲸鱼座 90": "90 cet",
    "波江座 2": "2 eri",
    "波江座 3": "3 eri",
    "波江座 4": "4 eri",
    "波江座 5": "5 eri",
    "波江座 6": "6 eri",
    "波江座 7": "7 eri",
    "波江座 8": "8 eri",
    "波江座 9": "9 eri",
    "波江座 10": "10 eri",
    "波江座 11": "11 eri",
    "波江座 13": "13 eri",
    "波江座 14": "14 eri",
    "波江座 15": "15 eri",
    "波江座 16": "16 eri",
    "波江座 17": "17 eri",
    "波江座 18": "18 eri",
    "波江座 19": "19 eri",
    "波江座 20": "20 eri",
    "波江座 21": "21 eri",
    "波江座 22": "22 eri",
    "波江座 23": "23 eri",
    "波江座 24": "24 eri",
    "波江座 25": "25 eri",
    "波江座 26": "26 eri",
    "波江座 27": "27 eri",
    "波江座 28": "28 eri",
    "波江座 29": "29 eri",
    "波江座 30": "30 eri",
    "波江座 32": "32 eri",
    "波江座 33": "33 eri",
    "波江座 34": "34 eri",
    "波江座 35": "35 eri",
    "波江座 36": "36 eri",
    "波江座 37": "37 eri",
    "波江座 38": "38 eri",
    "波江座 39": "39 eri",
    "波江座 40": "40 eri",
    "波江座 41": "41 eri",
    "波江座 42": "42 eri",
    "波江座 43": "43 eri",
    "波江座 44": "44 eri",
    "波江座 45": "45 eri",
    "波江座 46": "46 eri",
    "波江座 47": "47 eri",
    "波江座 48": "48 eri",
    "波江座 49": "49 eri",
    "波江座 50": "50 eri",
    "波江座 51": "51 eri",
    "波江座 52": "52 eri",
    "波江座 53": "53 eri",
    "波江座 54": "54 eri",
    "波江座 55": "55 eri",
    "波江座 56": "56 eri",
    "波江座 57": "57 eri",
    "波江座 58": "58 eri",
    "波江座 59": "59 eri",
    "波江座 60": "60 eri",
    "波江座 61": "61 eri",
    "波江座 62": "62 eri",
    "波江座 63": "63 eri",
    "波江座 64": "64 eri",
    "波江座 65": "65 eri",
    "波江座 66": "66 eri",
    "波江座 67": "67 eri",
    "波江座 68": "68 eri",
    "波江座 69": "69 eri",
    "波江座 82": "82 eri",
    "天炉座 α": "alf for",
    "波江座 12": "12 eri",
    "天炉座 β": "bet for",
    "天炉座 γ1": "gam1 for",
    "天炉座 γ2": "gam2 for",
    "天炉座 δ": "del for",
    "天炉座 ε": "eps for",
    "天炉座 ζ": "zet for",
    "天炉座 η1": "eta1 for",
    "天炉座 η2": "eta2 for",
    "天炉座 η3": "eta3 for",
    "天炉座 ι1": "iot1 for",
    "天炉座 ι2": "iot2 for",
    "天炉座 κ": "kap for",
    "天炉座 λ1": "lam1 for",
    "天炉座 λ2": "lam2 for",
    "天炉座 μ": "mu. for",
    "天炉座 ν": "nu. for",
    "天炉座 π": "pi. for",
    "天炉座 ρ": "rho for",
    "天炉座 σ": "sig for",
    "天炉座 τ": "tau for",
    "天炉座 φ": "phi for",
    "天炉座 χ1": "chi1 for",
    "天炉座 χ2": "chi2 for",
    "天炉座 χ3": "chi3 for",
    "天炉座 ψ": "psi for",
    "天炉座 ω": "ome for",
    "双子座 α": "alf gem",
    "双子座 β": "bet gem",
    "双子座 γ": "gam gem",
    "双子座 δ": "del gem",
    "双子座 ε": "eps gem",
    "双子座 ζ": "zet gem",
    "双子座 η": "eta gem",
    "双子座 θ": "tet gem",
    "双子座 ι": "iot gem",
    "双子座 κ": "kap gem",
    "双子座 λ": "lam gem",
    "双子座 μ": "mu. gem",
    "双子座 ν": "nu. gem",
    "双子座 ξ": "ksi gem",
    "双子座 ο": "omi gem",
    "双子座 π": "pi. gem",
    "双子座 ρ": "rho gem",
    "双子座 σ": "sig gem",
    "双子座 τ": "tau gem",
    "双子座 υ": "ups gem",
    "双子座 φ": "phi gem",
    "双子座 χ": "chi gem",
    "巨蟹座 6": "6 cnc",
    "双子座 ω": "ome gem",
    "双子座 b": "b gem",
    "双子座 c": "c gem",
    "双子座 d": "d gem",
    "双子座 e": "e gem",
    "双子座 f": "f gem",
    "双子座 g": "g gem",
    "双子座 A": "a gem",
    "双子座 1": "1 gem",
    "双子座 2": "2 gem",
    "双子座 3": "3 gem",
    "双子座 4": "4 gem",
    "双子座 5": "5 gem",
    "双子座 6": "6 gem",
    "双子座 7": "7 gem",
    "双子座 8": "8 gem",
    "双子座 9": "9 gem",
    "双子座 10": "10 gem",
    "双子座 11": "11 gem",
    "双子座 12": "12 gem",
    "双子座 13": "13 gem",
    "双子座 14": "14 gem",
    "双子座 15": "15 gem",
    "双子座 16": "16 gem",
    "双子座 18": "18 gem",
    "双子座 19": "19 gem",
    "双子座 20": "20 gem",
    "双子座 22": "22 gem",
    "双子座 23": "23 gem",
    "双子座 24": "24 gem",
    "双子座 25": "25 gem",
    "双子座 26": "26 gem",
    "双子座 27": "27 gem",
    "双子座 28": "28 gem",
    "双子座 30": "30 gem",
    "双子座 31": "31 gem",
    "双子座 32": "32 gem",
    "双子座 33": "33 gem",
    "双子座 34": "34 gem",
    "双子座 35": "35 gem",
    "双子座 36": "36 gem",
    "双子座 37": "37 gem",
    "双子座 38": "38 gem",
    "双子座 39": "39 gem",
    "双子座 40": "40 gem",
    "双子座 41": "41 gem",
    "双子座 42": "42 gem",
    "双子座 43": "43 gem",
    "双子座 44": "44 gem",
    "双子座 45": "45 gem",
    "双子座 46": "46 gem",
    "双子座 47": "47 gem",
    "双子座 48": "48 gem",
    "双子座 49": "49 gem",
    "双子座 51": "51 gem",
    "双子座 52": "52 gem",
    "双子座 53": "53 gem",
    "双子座 54": "54 gem",
    "双子座 55": "55 gem",
    "双子座 56": "56 gem",
    "双子座 57": "57 gem",
    "双子座 58": "58 gem",
    "双子座 59": "59 gem",
    "双子座 60": "60 gem",
    "双子座 61": "61 gem",
    "双子座 62": "62 gem",
    "双子座 63": "63 gem",
    "双子座 64": "64 gem",
    "双子座 65": "65 gem",
    "双子座 66": "66 gem",
    "双子座 67": "67 gem",
    "双子座 68": "68 gem",
    "双子座 69": "69 gem",
    "双子座 70": "70 gem",
    "双子座 71": "71 gem",
    "双子座 74": "74 gem",
    "双子座 75": "75 gem",
    "双子座 76": "76 gem",
    "双子座 77": "77 gem",
    "双子座 78": "78 gem",
    "双子座 79": "79 gem",
    "双子座 80": "80 gem",
    "双子座 81": "81 gem",
    "双子座 82": "82 gem",
    "双子座 83": "83 gem",
    "双子座 84": "84 gem",
    "双子座 85": "85 gem",
    "双子座 87": "87 gem",
    "天鹤座 α": "alf gru",
    "天鹤座 β": "bet gru",
    "天鹤座 γ": "gam gru",
    "天鹤座 δ1": "del1 gru",
    "天鹤座 δ2": "del2 gru",
    "天鹤座 ε": "eps gru",
    "天鹤座 ζ": "zet gru",
    "天鹤座 η": "eta gru",
    "天鹤座 θ": "tet gru",
    "天鹤座 ι": "iot gru",
    "天鹤座 κ": "kap gru",
    "天鹤座 λ": "lam gru",
    "天鹤座 μ1": "mu.1 gru",
    "天鹤座 μ2": "mu.2 gru",
    "天鹤座 ν": "nu. gru",
    "天鹤座 ξ": "ksi gru",
    "天鹤座 ο": "omi gru",
    "天鹤座 π1": "pi.1 gru",
    "天鹤座 π2": "pi.2 gru",
    "天鹤座 ρ": "rho gru",
    "天鹤座 σ1": "sig1 gru",
    "天鹤座 σ2": "sig2 gru",
    "天鹤座 τ1": "tau1 gru",
    "天鹤座 τ2": "tau2 gru",
    "天鹤座 τ3": "tau3 gru",
    "天鹤座 υ": "ups gru",
    "天鹤座 φ": "phi gru",
    "武仙座 α1": "alf1 her",
    "武仙座 α2": "alf2 her",
    "武仙座 β": "bet her",
    "武仙座 γ": "gam her",
    "武仙座 δ": "del her",
    "武仙座 ε": "eps her",
    "武仙座 ζ": "zet her",
    "武仙座 η": "eta her",
    "武仙座 θ": "tet her",
    "武仙座 ι": "iot her",
    "武仙座 κ": "kap her",
    "武仙座 λ": "lam her",
    "武仙座 μ": "mu. her",
    "武仙座 ν": "nu. her",
    "武仙座 ξ": "ksi her",
    "武仙座 ο": "omi her",
    "武仙座 π": "pi. her",
    "武仙座 ρ": "rho her",
    "武仙座 σ": "sig her",
    "武仙座 τ": "tau her",
    "武仙座 υ": "ups her",
    "武仙座 φ": "phi her",
    "武仙座 χ": "chi her",
    "武仙座 ψ2": "psi2 her",
    "武仙座 ω": "ome her",
    "武仙座 b": "b her",
    "武仙座 c": "c her",
    "武仙座 d": "d her",
    "武仙座 e": "e her",
    "武仙座 f": "f her",
    "武仙座 g": "g her",
    "武仙座 h": "h her",
    "武仙座 i": "i her",
    "武仙座 k": "k her",
    "武仙座 l": "l her",
    "武仙座 m": "m her",
    "武仙座 n": "n her",
    "武仙座 o": "o her",
    "武仙座 q": "q her",
    "武仙座 r": "r her",
    "武仙座 s": "s her",
    "武仙座 t": "t her",
    "武仙座 u": "u her",
    "武仙座 w": "w her",
    "武仙座 x": "x her",
    "武仙座 y": "y her",
    "武仙座 z": "z her",
    "武仙座 A": "a her",
    "武仙座 1": "1 her",
    "武仙座 2": "2 her",
    "武仙座 3": "3 her",
    "武仙座 4": "4 her",
    "武仙座 5": "5 her",
    "武仙座 6": "6 her",
    "武仙座 7": "7 her",
    "武仙座 8": "8 her",
    "武仙座 9": "9 her",
    "武仙座 10": "10 her",
    "武仙座 11": "11 her",
    "武仙座 12": "12 her",
    "武仙座 13": "13 her",
    "武仙座 14": "14 her",
    "武仙座 15": "15 her",
    "武仙座 16": "16 her",
    "武仙座 17": "17 her",
    "武仙座 18": "18 her",
    "武仙座 19": "19 her",
    "武仙座 20": "20 her",
    "武仙座 21": "21 her",
    "武仙座 22": "22 her",
    "武仙座 23": "23 her",
    "武仙座 24": "24 her",
    "武仙座 25": "25 her",
    "武仙座 26": "26 her",
    "武仙座 27": "27 her",
    "武仙座 28": "28 her",
    "武仙座 29": "29 her",
    "武仙座 30": "30 her",
    "武仙座 31": "31 her",
    "武仙座 32": "32 her",
    "武仙座 33": "33 her",
    "武仙座 34": "34 her",
    "武仙座 35": "35 her",
    "武仙座 36": "36 her",
    "武仙座 37": "37 her",
    "武仙座 38": "38 her",
    "武仙座 39": "39 her",
    "武仙座 40": "40 her",
    "武仙座 41": "41 her",
    "武仙座 42": "42 her",
    "武仙座 43": "43 her",
    "武仙座 44": "44 her",
    "武仙座 45": "45 her",
    "武仙座 46": "46 her",
    "武仙座 47": "47 her",
    "武仙座 48": "48 her",
    "武仙座 49": "49 her",
    "武仙座 50": "50 her",
    "武仙座 51": "51 her",
    "武仙座 52": "52 her",
    "武仙座 53": "53 her",
    "武仙座 54": "54 her",
    "武仙座 56": "56 her",
    "武仙座 57": "57 her",
    "武仙座 58": "58 her",
    "武仙座 59": "59 her",
    "武仙座 60": "60 her",
    "武仙座 61": "61 her",
    "武仙座 62": "62 her",
    "武仙座 63": "63 her",
    "武仙座 64": "64 her",
    "武仙座 65": "65 her",
    "武仙座 67": "67 her",
    "武仙座 68": "68 her",
    "武仙座 69": "69 her",
    "武仙座 70": "70 her",
    "武仙座 72": "72 her",
    "武仙座 73": "73 her",
    "武仙座 74": "74 her",
    "武仙座 75": "75 her",
    "武仙座 76": "76 her",
    "武仙座 77": "77 her",
    "武仙座 78": "78 her",
    "武仙座 79": "79 her",
    "武仙座 82": "82 her",
    "武仙座 83": "83 her",
    "武仙座 84": "84 her",
    "武仙座 85": "85 her",
    "武仙座 86": "86 her",
    "武仙座 87": "87 her",
    "武仙座 88": "88 her",
    "武仙座 89": "89 her",
    "武仙座 90": "90 her",
    "武仙座 91": "91 her",
    "武仙座 92": "92 her",
    "武仙座 93": "93 her",
    "武仙座 94": "94 her",
    "武仙座 95": "95 her",
    "武仙座 96": "96 her",
    "武仙座 97": "97 her",
    "武仙座 98": "98 her",
    "武仙座 99": "99 her",
    "武仙座 100": "100 her",
    "武仙座 101": "101 her",
    "武仙座 102": "102 her",
    "武仙座 103": "103 her",
    "武仙座 104": "104 her",
    "武仙座 105": "105 her",
    "武仙座 106": "106 her",
    "武仙座 107": "107 her",
    "武仙座 108": "108 her",
    "武仙座 109": "109 her",
    "武仙座 110": "110 her",
    "武仙座 111": "111 her",
    "武仙座 112": "112 her",
    "武仙座 113": "113 her",
    "时钟座 α": "alf hor",
    "时钟座 β": "bet hor",
    "时钟座 γ": "gam hor",
    "时钟座 δ": "del hor",
    "时钟座 ζ": "zet hor",
    "时钟座 η": "eta hor",
    "时钟座 ι": "iot hor",
    "时钟座 λ": "lam hor",
    "时钟座 μ": "mu. hor",
    "时钟座 ν": "nu. hor",
    "长蛇座 α": "alf hya",
    "长蛇座 β": "bet hya",
    "巨爵座 28": "28 crt",
    "长蛇座 γ": "gam hya",
    "长蛇座 δ": "del hya",
    "长蛇座 ε": "eps hya",
    "长蛇座 ζ": "zet hya",
    "长蛇座 η": "eta hya",
    "长蛇座 θ": "tet hya",
    "长蛇座 ι": "iot hya",
    "长蛇座 κ": "kap hya",
    "长蛇座 λ": "lam hya",
    "长蛇座 μ": "mu. hya",
    "长蛇座 ν": "nu. hya",
    "巨爵座 4": "4 crt",
    "长蛇座 ξ": "ksi hya",
    "巨爵座 19": "19 crt",
    "长蛇座 ο": "omi hya",
    "巨爵座 25": "25 crt",
    "长蛇座 π": "pi. hya",
    "长蛇座 ρ": "rho hya",
    "长蛇座 σ": "sig hya",
    "长蛇座 τ1": "tau1 hya",
    "长蛇座 τ2": "tau2 hya",
    "长蛇座 υ1": "ups1 hya",
    "长蛇座 υ2": "ups2 hya",
    "长蛇座 φ": "phi hya",
    "长蛇座 φ1": "phi1 hya",
    "长蛇座 φ2": "phi2 hya",
    "巨爵座 1": "1 crt",
    "长蛇座 φ3": "phi3 hya",
    "巨爵座 2": "2 crt",
    "长蛇座 χ1": "chi1 hya",
    "巨爵座 9": "9 crt",
    "长蛇座 χ2": "chi2 hya",
    "长蛇座 ψ": "psi hya",
    "长蛇座 ω": "ome hya",
    "长蛇座 a": "a hya",
    "长蛇座 b1": "b1 hya",
    "巨爵座 3": "3 crt",
    "长蛇座 b3": "b3 hya",
    "巨爵座 6": "6 crt",
    "长蛇座 k": "k hya",
    "长蛇座 l": "l hya",
    "长蛇座 m": "m hya",
    "长蛇座 A": "a hya",
    "长蛇座 C": "c hya",
    "长蛇座 D": "d hya",
    "长蛇座 E": "e hya",
    "长蛇座 F": "f hya",
    "长蛇座 G": "g hya",
    "长蛇座 I": "i hya",
    "长蛇座 P": "p hya",
    "长蛇座 1": "1 hya",
    "长蛇座 2": "2 hya",
    "长蛇座 3": "3 hya",
    "长蛇座 4": "4 hya",
    "长蛇座 5": "5 hya",
    "长蛇座 6": "6 hya",
    "长蛇座 7": "7 hya",
    "长蛇座 9": "9 hya",
    "长蛇座 10": "10 hya",
    "长蛇座 11": "11 hya",
    "长蛇座 12": "12 hya",
    "长蛇座 13": "13 hya",
    "长蛇座 14": "14 hya",
    "长蛇座 15": "15 hya",
    "长蛇座 16": "16 hya",
    "长蛇座 17": "17 hya",
    "长蛇座 18": "18 hya",
    "长蛇座 19": "19 hya",
    "长蛇座 20": "20 hya",
    "长蛇座 21": "21 hya",
    "长蛇座 22": "22 hya",
    "长蛇座 23": "23 hya",
    "长蛇座 24": "24 hya",
    "长蛇座 25": "25 hya",
    "长蛇座 26": "26 hya",
    "长蛇座 27": "27 hya",
    "长蛇座 28": "28 hya",
    "长蛇座 29": "29 hya",
    "长蛇座 30": "30 hya",
    "长蛇座 31": "31 hya",
    "长蛇座 32": "32 hya",
    "长蛇座 33": "33 hya",
    "长蛇座 34": "34 hya",
    "长蛇座 35": "35 hya",
    "长蛇座 37": "37 hya",
    "长蛇座 38": "38 hya",
    "长蛇座 39": "39 hya",
    "长蛇座 40": "40 hya",
    "长蛇座 41": "41 hya",
    "长蛇座 42": "42 hya",
    "长蛇座 43": "43 hya",
    "长蛇座 44": "44 hya",
    "长蛇座 45": "45 hya",
    "长蛇座 46": "46 hya",
    "长蛇座 47": "47 hya",
    "长蛇座 48": "48 hya",
    "长蛇座 49": "49 hya",
    "长蛇座 50": "50 hya",
    "长蛇座 51": "51 hya",
    "长蛇座 52": "52 hya",
    "长蛇座 54": "54 hya",
    "长蛇座 55": "55 hya",
    "长蛇座 56": "56 hya",
    "长蛇座 57": "57 hya",
    "长蛇座 58": "58 hya",
    "长蛇座 59": "59 hya",
    "长蛇座 60": "60 hya",
    "水蛇座 α": "alf hyi",
    "水蛇座 β": "bet hyi",
    "水蛇座 γ": "gam hyi",
    "水蛇座 δ": "del hyi",
    "水蛇座 ε": "eps hyi",
    "水蛇座 ζ": "zet hyi",
    "水蛇座 η1": "eta1 hyi",
    "水蛇座 η2": "eta2 hyi",
    "水蛇座 θ": "tet hyi",
    "水蛇座 ι": "iot hyi",
    "水蛇座 κ": "kap hyi",
    "水蛇座 λ": "lam hyi",
    "水蛇座 μ": "mu. hyi",
    "水蛇座 ν": "nu. hyi",
    "水蛇座 π1": "pi.1 hyi",
    "水蛇座 π2": "pi.2 hyi",
    "水蛇座 σ": "sig hyi",
    "水蛇座 τ1": "tau1 hyi",
    "水蛇座 τ2": "tau2 hyi",
    "印第安座 α": "alf ind",
    "印第安座 β": "bet ind",
    "印第安座 γ": "gam ind",
    "印第安座 δ": "del ind",
    "印第安座 ε": "eps ind",
    "印第安座 ζ": "zet ind",
    "印第安座 η": "eta ind",
    "印第安座 θ": "tet ind",
    "印第安座 ι": "iot ind",
    "印第安座 κ1": "kap1 ind",
    "印第安座 κ2": "kap2 ind",
    "印第安座 μ": "mu. ind",
    "印第安座 ν": "nu. ind",
    "印第安座 ο": "omi ind",
    "印第安座 π": "pi. ind",
    "印第安座 ρ": "rho ind",
    "蝎虎座 α": "alf lac",
    "蝎虎座 β": "bet lac",
    "蝎虎座 1": "1 lac",
    "蝎虎座 2": "2 lac",
    "蝎虎座 3": "3 lac",
    "蝎虎座 4": "4 lac",
    "蝎虎座 5": "5 lac",
    "蝎虎座 6": "6 lac",
    "蝎虎座 7": "7 lac",
    "蝎虎座 8": "8 lac",
    "蝎虎座 9": "9 lac",
    "蝎虎座 10": "10 lac",
    "蝎虎座 11": "11 lac",
    "蝎虎座 12": "12 lac",
    "蝎虎座 13": "13 lac",
    "蝎虎座 14": "14 lac",
    "蝎虎座 15": "15 lac",
    "蝎虎座 16": "16 lac",
    "狮子座 α": "alf leo",
    "狮子座 β": "bet leo",
    "狮子座 γ1": "gam1 leo",
    "狮子座 γ2": "gam2 leo",
    "狮子座 δ": "del leo",
    "狮子座 ε": "eps leo",
    "狮子座 ζ": "zet leo",
    "狮子座 η": "eta leo",
    "狮子座 θ": "tet leo",
    "狮子座 ι": "iot leo",
    "狮子座 κ": "kap leo",
    "狮子座 λ": "lam leo",
    "狮子座 μ": "mu. leo",
    "狮子座 ν": "nu. leo",
    "狮子座 ξ": "ksi leo",
    "狮子座 ο": "omi leo",
    "狮子座 π": "pi. leo",
    "狮子座 ρ": "rho leo",
    "狮子座 σ": "sig leo",
    "狮子座 τ": "tau leo",
    "狮子座 υ": "ups leo",
    "狮子座 φ": "phi leo",
    "狮子座 χ": "chi leo",
    "狮子座 ψ": "psi leo",
    "狮子座 ω": "ome leo",
    "狮子座 b": "b leo",
    "狮子座 c": "c leo",
    "狮子座 d": "d leo",
    "狮子座 e": "e leo",
    "狮子座 f": "f leo",
    "狮子座 g": "g leo",
    "狮子座 k": "k leo",
    "狮子座 l": "l leo",
    "狮子座 m": "m leo",
    "狮子座 n": "n leo",
    "狮子座 o": "o leo",
    "狮子座 p1": "p1 leo",
    "狮子座 p2": "p2 leo",
    "狮子座 p3": "p3 leo",
    "狮子座 p4": "p4 leo",
    "狮子座 p5": "p5 leo",
    "狮子座 1": "1 leo",
    "狮子座 2": "2 leo",
    "狮子座 3": "3 leo",
    "狮子座 4": "4 leo",
    "狮子座 5": "5 leo",
    "狮子座 6": "6 leo",
    "狮子座 7": "7 leo",
    "狮子座 8": "8 leo",
    "狮子座 9": "9 leo",
    "狮子座 10": "10 leo",
    "狮子座 11": "11 leo",
    "狮子座 12": "12 leo",
    "狮子座 13": "13 leo",
    "狮子座 14": "14 leo",
    "狮子座 15": "15 leo",
    "狮子座 16": "16 leo",
    "狮子座 17": "17 leo",
    "狮子座 18": "18 leo",
    "狮子座 19": "19 leo",
    "狮子座 20": "20 leo",
    "狮子座 21": "21 leo",
    "狮子座 22": "22 leo",
    "狮子座 23": "23 leo",
    "狮子座 24": "24 leo",
    "狮子座 26": "26 leo",
    "狮子座 27": "27 leo",
    "狮子座 29": "29 leo",
    "狮子座 30": "30 leo",
    "狮子座 31": "31 leo",
    "狮子座 32": "32 leo",
    "狮子座 33": "33 leo",
    "狮子座 34": "34 leo",
    "狮子座 35": "35 leo",
    "狮子座 36": "36 leo",
    "狮子座 37": "37 leo",
    "狮子座 39": "39 leo",
    "狮子座 40": "40 leo",
    "狮子座 41": "41 leo",
    "狮子座 42": "42 leo",
    "狮子座 43": "43 leo",
    "狮子座 44": "44 leo",
    "狮子座 45": "45 leo",
    "狮子座 46": "46 leo",
    "狮子座 47": "47 leo",
    "狮子座 48": "48 leo",
    "狮子座 49": "49 leo",
    "狮子座 50": "50 leo",
    "狮子座 51": "51 leo",
    "狮子座 52": "52 leo",
    "狮子座 53": "53 leo",
    "狮子座 54": "54 leo",
    "狮子座 55": "55 leo",
    "狮子座 56": "56 leo",
    "狮子座 57": "57 leo",
    "狮子座 58": "58 leo",
    "狮子座 59": "59 leo",
    "狮子座 60": "60 leo",
    "狮子座 61": "61 leo",
    "狮子座 62": "62 leo",
    "狮子座 63": "63 leo",
    "狮子座 64": "64 leo",
    "狮子座 65": "65 leo",
    "狮子座 66": "66 leo",
    "狮子座 67": "67 leo",
    "狮子座 68": "68 leo",
    "狮子座 69": "69 leo",
    "狮子座 70": "70 leo",
    "狮子座 71": "71 leo",
    "狮子座 72": "72 leo",
    "狮子座 73": "73 leo",
    "狮子座 74": "74 leo",
    "狮子座 75": "75 leo",
    "狮子座 76": "76 leo",
    "狮子座 77": "77 leo",
    "狮子座 78": "78 leo",
    "狮子座 79": "79 leo",
    "狮子座 80": "80 leo",
    "狮子座 81": "81 leo",
    "狮子座 82": "82 leo",
    "狮子座 83": "83 leo",
    "狮子座 84": "84 leo",
    "狮子座 85": "85 leo",
    "狮子座 86": "86 leo",
    "狮子座 87": "87 leo",
    "狮子座 88": "88 leo",
    "狮子座 89": "89 leo",
    "狮子座 90": "90 leo",
    "狮子座 91": "91 leo",
    "狮子座 92": "92 leo",
    "狮子座 93": "93 leo",
    "狮子座 94": "94 leo",
    "狮子座 95": "95 leo",
    "小狮座 β": "bet lmi",
    "小狮座 h": "h lmi",
    "小狮座 o": "o lmi",
    "小狮座 1": "1 lmi",
    "小狮座 2": "2 lmi",
    "小狮座 3": "3 lmi",
    "小狮座 4": "4 lmi",
    "小狮座 5": "5 lmi",
    "小狮座 6": "6 lmi",
    "小狮座 7": "7 lmi",
    "小狮座 8": "8 lmi",
    "小狮座 9": "9 lmi",
    "小狮座 10": "10 lmi",
    "小狮座 11": "11 lmi",
    "小狮座 13": "13 lmi",
    "小狮座 14": "14 lmi",
    "小狮座 15": "15 lmi",
    "小狮座 16": "16 lmi",
    "小狮座 17": "17 lmi",
    "小狮座 18": "18 lmi",
    "小狮座 19": "19 lmi",
    "小狮座 20": "20 lmi",
    "小狮座 21": "21 lmi",
    "小狮座 22": "22 lmi",
    "小狮座 23": "23 lmi",
    "小狮座 24": "24 lmi",
    "小狮座 25": "25 lmi",
    "小狮座 26": "26 lmi",
    "小狮座 27": "27 lmi",
    "小狮座 28": "28 lmi",
    "小狮座 29": "29 lmi",
    "小狮座 30": "30 lmi",
    "小狮座 31": "31 lmi",
    "小狮座 32": "32 lmi",
    "小狮座 33": "33 lmi",
    "小狮座 34": "34 lmi",
    "小狮座 35": "35 lmi",
    "小狮座 36": "36 lmi",
    "小狮座 37": "37 lmi",
    "小狮座 38": "38 lmi",
    "小狮座 39": "39 lmi",
    "小狮座 40": "40 lmi",
    "小狮座 41": "41 lmi",
    "小狮座 42": "42 lmi",
    "小狮座 43": "43 lmi",
    "小狮座 44": "44 lmi",
    "小狮座 45": "45 lmi",
    "小狮座 46": "46 lmi",
    "小狮座 47": "47 lmi",
    "小狮座 48": "48 lmi",
    "小狮座 49": "49 lmi",
    "小狮座 50": "50 lmi",
    "小狮座 51": "51 lmi",
    "小狮座 52": "52 lmi",
    "小狮座 53": "53 lmi",
    "天兔座 α": "alf lep",
    "天兔座 β": "bet lep",
    "天兔座 γ": "gam lep",
    "天兔座 δ": "del lep",
    "天兔座 ε": "eps lep",
    "天兔座 ζ": "zet lep",
    "天兔座 η": "eta lep",
    "天兔座 θ": "tet lep",
    "天兔座 ι": "iot lep",
    "天兔座 κ": "kap lep",
    "天兔座 λ": "lam lep",
    "天兔座 μ": "mu. lep",
    "天兔座 ν": "nu. lep",
    "天兔座 1": "1 lep",
    "天兔座 2": "2 lep",
    "天兔座 3": "3 lep",
    "天兔座 4": "4 lep",
    "天兔座 5": "5 lep",
    "天兔座 6": "6 lep",
    "天兔座 7": "7 lep",
    "天兔座 8": "8 lep",
    "天兔座 9": "9 lep",
    "天兔座 10": "10 lep",
    "天兔座 11": "11 lep",
    "天兔座 12": "12 lep",
    "天兔座 13": "13 lep",
    "天兔座 14": "14 lep",
    "天兔座 15": "15 lep",
    "天兔座 16": "16 lep",
    "天兔座 17": "17 lep",
    "天兔座 18": "18 lep",
    "天兔座 19": "19 lep",
    "天秤座 α1": "alf1 lib",
    "天秤座 α2": "alf2 lib",
    "天秤座 β": "bet lib",
    "天秤座 γ": "gam lib",
    "天秤座 δ": "del lib",
    "天秤座 ε": "eps lib",
    "天秤座 ζ": "zet lib",
    "天秤座 ζ1": "zet1 lib",
    "天秤座 ζ3": "zet3 lib",
    "天秤座 ζ4": "zet4 lib",
    "天秤座 η": "eta lib",
    "天秤座 θ": "tet lib",
    "天秤座 ι1": "iot1 lib",
    "天秤座 ι2": "iot2 lib",
    "天秤座 κ": "kap lib",
    "天秤座 λ": "lam lib",
    "天秤座 μ": "mu. lib",
    "天秤座 ν": "nu. lib",
    "天秤座 ξ1": "ksi1 lib",
    "天秤座 ξ2": "ksi2 lib",
    "天秤座 ο": "omi lib",
    "天秤座 σ": "sig lib",
    "天秤座 τ": "tau lib",
    "天秤座 υ": "ups lib",
    "天秤座 2": "2 lib",
    "天秤座 3": "3 lib",
    "天秤座 4": "4 lib",
    "长蛇座 53": "53 hya",
    "天秤座 5": "5 lib",
    "天秤座 6": "6 lib",
    "天秤座 7": "7 lib",
    "天秤座 8": "8 lib",
    "天秤座 9": "9 lib",
    "天秤座 10": "10 lib",
    "天秤座 11": "11 lib",
    "天秤座 12": "12 lib",
    "天秤座 13": "13 lib",
    "天秤座 14": "14 lib",
    "天秤座 15": "15 lib",
    "天秤座 16": "16 lib",
    "天秤座 17": "17 lib",
    "天秤座 18": "18 lib",
    "天秤座 19": "19 lib",
    "天秤座 20": "20 lib",
    "天秤座 21": "21 lib",
    "天秤座 22": "22 lib",
    "天秤座 23": "23 lib",
    "天秤座 24": "24 lib",
    "天秤座 25": "25 lib",
    "天秤座 26": "26 lib",
    "天秤座 27": "27 lib",
    "天秤座 28": "28 lib",
    "天秤座 29": "29 lib",
    "天秤座 30": "30 lib",
    "天秤座 31": "31 lib",
    "天秤座 32": "32 lib",
    "天秤座 33": "33 lib",
    "天秤座 34": "34 lib",
    "天秤座 35": "35 lib",
    "天秤座 36": "36 lib",
    "天秤座 37": "37 lib",
    "天秤座 38": "38 lib",
    "天秤座 39": "39 lib",
    "天秤座 40": "40 lib",
    "天秤座 41": "41 lib",
    "天秤座 42": "42 lib",
    "天秤座 43": "43 lib",
    "天秤座 44": "44 lib",
    "天秤座 45": "45 lib",
    "天秤座 46": "46 lib",
    "天秤座 47": "47 lib",
    "天秤座 48": "48 lib",
    "天秤座 49": "49 lib",
    "天秤座 50": "50 lib",
    "豺狼座 α": "alf lup",
    "豺狼座 β": "bet lup",
    "豺狼座 γ": "gam lup",
    "豺狼座 δ": "del lup",
    "豺狼座 ε": "eps lup",
    "豺狼座 ζ": "zet lup",
    "豺狼座 η": "eta lup",
    "豺狼座 θ": "tet lup",
    "豺狼座 ι": "iot lup",
    "豺狼座 κ1": "kap1 lup",
    "豺狼座 κ2": "kap2 lup",
    "豺狼座 λ": "lam lup",
    "豺狼座 μ": "mu. lup",
    "豺狼座 ν1": "nu.1 lup",
    "豺狼座 ν2": "nu.2 lup",
    "豺狼座 ξ1": "ksi1 lup",
    "豺狼座 ξ2": "ksi2 lup",
    "豺狼座 ο": "omi lup",
    "豺狼座 π": "pi. lup",
    "豺狼座 ρ": "rho lup",
    "豺狼座 σ": "sig lup",
    "豺狼座 τ1": "tau1 lup",
    "豺狼座 τ2": "tau2 lup",
    "豺狼座 υ": "ups lup",
    "豺狼座 φ1": "phi1 lup",
    "豺狼座 φ2": "phi2 lup",
    "豺狼座 χ": "chi lup",
    "豺狼座 ψ1": "psi1 lup",
    "豺狼座 ψ2": "psi2 lup",
    "豺狼座 ω": "ome lup",
    "豺狼座 a": "a lup",
    "豺狼座 b": "b lup",
    "豺狼座 c": "c lup",
    "豺狼座 d": "d lup",
    "豺狼座 e": "e lup",
    "豺狼座 f": "f lup",
    "豺狼座 g": "g lup",
    "豺狼座 h": "h lup",
    "豺狼座 i": "i lup",
    "豺狼座 k": "k lup",
    "豺狼座 1": "1 lup",
    "豺狼座 2": "2 lup",
    "豺狼座 3": "3 lup",
    "豺狼座 4": "4 lup",
    "豺狼座 5": "5 lup",
    "天猫座 α": "alf lyn",
    "天猫座 1": "1 lyn",
    "天猫座 2": "2 lyn",
    "天猫座 3": "3 lyn",
    "天猫座 4": "4 lyn",
    "天猫座 5": "5 lyn",
    "天猫座 6": "6 lyn",
    "天猫座 7": "7 lyn",
    "天猫座 8": "8 lyn",
    "天猫座 9": "9 lyn",
    "天猫座 10": "10 lyn",
    "天猫座 11": "11 lyn",
    "天猫座 12": "12 lyn",
    "天猫座 13": "13 lyn",
    "天猫座 14": "14 lyn",
    "天猫座 15": "15 lyn",
    "天猫座 16": "16 lyn",
    "天猫座 17": "17 lyn",
    "天猫座 18": "18 lyn",
    "天猫座 19": "19 lyn",
    "天猫座 20": "20 lyn",
    "天猫座 21": "21 lyn",
    "天猫座 22": "22 lyn",
    "天猫座 23": "23 lyn",
    "天猫座 24": "24 lyn",
    "天猫座 25": "25 lyn",
    "天猫座 26": "26 lyn",
    "天猫座 27": "27 lyn",
    "天猫座 28": "28 lyn",
    "天猫座 29": "29 lyn",
    "天猫座 30": "30 lyn",
    "鹿豹座 58": "58 cam",
    "天猫座 31": "31 lyn",
    "天猫座 32": "32 lyn",
    "天猫座 33": "33 lyn",
    "天猫座 34": "34 lyn",
    "天猫座 35": "35 lyn",
    "天猫座 36": "36 lyn",
    "天猫座 37": "37 lyn",
    "天猫座 38": "38 lyn",
    "天猫座 39": "39 lyn",
    "天猫座 40": "40 lyn",
    "天猫座 41": "41 lyn",
    "天猫座 42": "42 lyn",
    "天猫座 43": "43 lyn",
    "天猫座 44": "44 lyn",
    "天琴座 α": "alf lyr",
    "天琴座 β": "bet lyr",
    "天琴座 γ": "gam lyr",
    "天琴座 δ1": "del1 lyr",
    "天琴座 δ2": "del2 lyr",
    "天琴座 ε1": "eps1 lyr",
    "天琴座 ε2": "eps2 lyr",
    "天琴座 ζ1": "zet1 lyr",
    "天琴座 ζ2": "zet2 lyr",
    "天琴座 η": "eta lyr",
    "天琴座 θ": "tet lyr",
    "天琴座 ι": "iot lyr",
    "天琴座 κ": "kap lyr",
    "天琴座 λ": "lam lyr",
    "天琴座 μ": "mu. lyr",
    "天琴座 ν": "nu. lyr",
    "天琴座 ν1": "nu.1 lyr",
    "天琴座 ν2": "nu.2 lyr",
    "天琴座 1": "1 lyr",
    "天琴座 2": "2 lyr",
    "天琴座 3": "3 lyr",
    "天琴座 4": "4 lyr",
    "天琴座 5": "5 lyr",
    "天琴座 6": "6 lyr",
    "天琴座 7": "7 lyr",
    "天琴座 8": "8 lyr",
    "天琴座 9": "9 lyr",
    "天琴座 10": "10 lyr",
    "天琴座 11": "11 lyr",
    "天琴座 12": "12 lyr",
    "天琴座 13": "13 lyr",
    "天琴座 14": "14 lyr",
    "天琴座 15": "15 lyr",
    "天琴座 16": "16 lyr",
    "天琴座 17": "17 lyr",
    "天琴座 18": "18 lyr",
    "天琴座 19": "19 lyr",
    "天琴座 20": "20 lyr",
    "天琴座 21": "21 lyr",
    "山案座 α": "alf men",
    "山案座 β": "bet men",
    "山案座 γ": "gam men",
    "山案座 δ": "del men",
    "山案座 ε": "eps men",
    "山案座 ζ": "zet men",
    "山案座 η": "eta men",
    "山案座 θ": "tet men",
    "山案座 ι": "iot men",
    "山案座 κ": "kap men",
    "山案座 λ": "lam men",
    "山案座 μ": "mu. men",
    "山案座 ν": "nu. men",
    "山案座 ξ": "ksi men",
    "山案座 π": "pi. men",
    "山案座 31": "31 men",
    "显微镜座 α": "alf mic",
    "显微镜座 β": "bet mic",
    "显微镜座 γ": "gam mic",
    "显微镜座 δ": "del mic",
    "显微镜座 ε": "eps mic",
    "显微镜座 ζ": "zet mic",
    "显微镜座 η": "eta mic",
    "显微镜座 θ1": "tet1 mic",
    "显微镜座 θ2": "tet2 mic",
    "显微镜座 ι": "iot mic",
    "显微镜座 ν": "nu. mic",
    "麒麟座 α": "alf mon",
    "麒麟座 β": "bet mon",
    "麒麟座 γ": "gam mon",
    "麒麟座 δ": "del mon",
    "麒麟座 ε": "eps mon",
    "麒麟座 ζ": "zet mon",
    "麒麟座 1": "1 mon",
    "麒麟座 2": "2 mon",
    "麒麟座 3": "3 mon",
    "麒麟座 4": "4 mon",
    "麒麟座 5": "5 mon",
    "麒麟座 6": "6 mon",
    "麒麟座 7": "7 mon",
    "麒麟座 8": "8 mon",
    "麒麟座 9": "9 mon",
    "麒麟座 10": "10 mon",
    "麒麟座 11": "11 mon",
    "麒麟座 12": "12 mon",
    "麒麟座 13": "13 mon",
    "麒麟座 14": "14 mon",
    "麒麟座 15": "15 mon",
    "麒麟座 16": "16 mon",
    "麒麟座 17": "17 mon",
    "麒麟座 18": "18 mon",
    "麒麟座 19": "19 mon",
    "麒麟座 20": "20 mon",
    "麒麟座 21": "21 mon",
    "麒麟座 22": "22 mon",
    "麒麟座 23": "23 mon",
    "麒麟座 24": "24 mon",
    "麒麟座 25": "25 mon",
    "麒麟座 26": "26 mon",
    "麒麟座 27": "27 mon",
    "麒麟座 28": "28 mon",
    "麒麟座 29": "29 mon",
    "麒麟座 30": "30 mon",
    "麒麟座 31": "31 mon",
    "苍蝇座 α": "alf mus",
    "苍蝇座 β": "bet mus",
    "苍蝇座 γ": "gam mus",
    "苍蝇座 δ": "del mus",
    "苍蝇座 ε": "eps mus",
    "苍蝇座 ζ1": "zet1 mus",
    "苍蝇座 ζ2": "zet2 mus",
    "苍蝇座 η": "eta mus",
    "苍蝇座 θ": "tet mus",
    "苍蝇座 ι1": "iot1 mus",
    "苍蝇座 ι2": "iot2 mus",
    "苍蝇座 λ": "lam mus",
    "苍蝇座 μ": "mu. mus",
    "矩尺座 γ1": "gam1 nor",
    "矩尺座 γ2": "gam2 nor",
    "矩尺座 δ": "del nor",
    "矩尺座 ε": "eps nor",
    "矩尺座 ζ": "zet nor",
    "矩尺座 η": "eta nor",
    "矩尺座 θ": "tet nor",
    "矩尺座 ι1": "iot1 nor",
    "矩尺座 ι2": "iot2 nor",
    "矩尺座 κ": "kap nor",
    "矩尺座 λ": "lam nor",
    "矩尺座 μ": "mu. nor",
    "南极座 α": "alf oct",
    "南极座 β": "bet oct",
    "南极座 γ1": "gam1 oct",
    "南极座 γ2": "gam2 oct",
    "南极座 γ3": "gam3 oct",
    "南极座 δ": "del oct",
    "南极座 ε": "eps oct",
    "南极座 ζ": "zet oct",
    "南极座 η": "eta oct",
    "南极座 θ": "tet oct",
    "南极座 ι": "iot oct",
    "南极座 κ": "kap oct",
    "南极座 λ": "lam oct",
    "南极座 μ1": "mu.1 oct",
    "南极座 μ2": "mu.2 oct",
    "南极座 ν": "nu. oct",
    "南极座 ξ": "ksi oct",
    "南极座 π1": "pi.1 oct",
    "南极座 π2": "pi.2 oct",
    "南极座 ρ": "rho oct",
    "南极座 σ": "sig oct",
    "南极座 τ": "tau oct",
    "南极座 υ": "ups oct",
    "南极座 φ": "phi oct",
    "南极座 χ": "chi oct",
    "南极座 ψ": "psi oct",
    "南极座 ω": "ome oct",
    "蛇夫座 α": "alf oph",
    "蛇夫座 β": "bet oph",
    "蛇夫座 γ": "gam oph",
    "蛇夫座 δ": "del oph",
    "蛇夫座 ε": "eps oph",
    "蛇夫座 ζ": "zet oph",
    "蛇夫座 η": "eta oph",
    "蛇夫座 θ": "tet oph",
    "蛇夫座 ι": "iot oph",
    "蛇夫座 κ": "kap oph",
    "蛇夫座 λ": "lam oph",
    "蛇夫座 μ": "mu. oph",
    "蛇夫座 ν": "nu. oph",
    "蛇夫座 ξ": "ksi oph",
    "蛇夫座 ο": "omi oph",
    "蛇夫座 ρ": "rho oph",
    "蛇夫座 σ": "sig oph",
    "蛇夫座 τ": "tau oph",
    "蛇夫座 υ": "ups oph",
    "蛇夫座 φ": "phi oph",
    "蛇夫座 χ": "chi oph",
    "蛇夫座 ψ": "psi oph",
    "蛇夫座 ω": "ome oph",
    "蛇夫座 b": "b oph",
    "蛇夫座 c": "c oph",
    "蛇夫座 d": "d oph",
    "蛇夫座 e": "e oph",
    "武仙座 66": "66 her",
    "蛇夫座 f": "f oph",
    "蛇夫座 p": "p oph",
    "蛇夫座 A": "a oph",
    "蛇夫座 1": "1 oph",
    "蛇夫座 2": "2 oph",
    "蛇夫座 3": "3 oph",
    "蛇夫座 4": "4 oph",
    "蛇夫座 5": "5 oph",
    "蛇夫座 7": "7 oph",
    "蛇夫座 8": "8 oph",
    "蛇夫座 9": "9 oph",
    "蛇夫座 10": "10 oph",
    "蛇夫座 11": "11 oph",
    "蛇夫座 12": "12 oph",
    "蛇夫座 13": "13 oph",
    "蛇夫座 14": "14 oph",
    "蛇夫座 15": "15 oph",
    "蛇夫座 16": "16 oph",
    "蛇夫座 17": "17 oph",
    "蛇夫座 19": "19 oph",
    "蛇夫座 20": "20 oph",
    "蛇夫座 21": "21 oph",
    "蛇夫座 22": "22 oph",
    "蛇夫座 23": "23 oph",
    "蛇夫座 24": "24 oph",
    "蛇夫座 25": "25 oph",
    "蛇夫座 26": "26 oph",
    "蛇夫座 27": "27 oph",
    "蛇夫座 28": "28 oph",
    "蛇夫座 29": "29 oph",
    "蛇夫座 30": "30 oph",
    "蛇夫座 31": "31 oph",
    "蛇夫座 32": "32 oph",
    "蛇夫座 33": "33 oph",
    "蛇夫座 34": "34 oph",
    "蛇夫座 35": "35 oph",
    "蛇夫座 36": "36 oph",
    "蛇夫座 37": "37 oph",
    "蛇夫座 38": "38 oph",
    "蛇夫座 39": "39 oph",
    "蛇夫座 40": "40 oph",
    "蛇夫座 41": "41 oph",
    "蛇夫座 42": "42 oph",
    "蛇夫座 43": "43 oph",
    "蛇夫座 44": "44 oph",
    "蛇夫座 45": "45 oph",
    "蛇夫座 47": "47 oph",
    "蛇夫座 49": "49 oph",
    "蛇夫座 50": "50 oph",
    "蛇夫座 51": "51 oph",
    "蛇夫座 52": "52 oph",
    "蛇夫座 53": "53 oph",
    "蛇夫座 54": "54 oph",
    "蛇夫座 55": "55 oph",
    "蛇夫座 56": "56 oph",
    "蛇夫座 57": "57 oph",
    "蛇夫座 58": "58 oph",
    "蛇夫座 60": "60 oph",
    "蛇夫座 61": "61 oph",
    "蛇夫座 62": "62 oph",
    "蛇夫座 63": "63 oph",
    "蛇夫座 64": "64 oph",
    "蛇夫座 66": "66 oph",
    "蛇夫座 67": "67 oph",
    "蛇夫座 68": "68 oph",
    "蛇夫座 69": "69 oph",
    "蛇夫座 70": "70 oph",
    "蛇夫座 71": "71 oph",
    "蛇夫座 72": "72 oph",
    "蛇夫座 73": "73 oph",
    "蛇夫座 74": "74 oph",
    "蛇夫座 191": "191 oph",
    "猎户座 α": "alf ori",
    "猎户座 β": "bet ori",
    "猎户座 γ": "gam ori",
    "猎户座 δ": "del ori",
    "猎户座 ε": "eps ori",
    "猎户座 ζ": "zet ori",
    "猎户座 η": "eta ori",
    "猎户座 θ1": "tet1 ori",
    "猎户座 θ2": "tet2 ori",
    "猎户座 ι": "iot ori",
    "猎户座 κ": "kap ori",
    "猎户座 λ": "lam ori",
    "猎户座 μ": "mu. ori",
    "猎户座 ν": "nu. ori",
    "猎户座 ξ": "ksi ori",
    "猎户座 ο1": "omi1 ori",
    "猎户座 ο2": "omi2 ori",
    "猎户座 π1": "pi.1 ori",
    "猎户座 π2": "pi.2 ori",
    "猎户座 π3": "pi.3 ori",
    "猎户座 π4": "pi.4 ori",
    "猎户座 π5": "pi.5 ori",
    "猎户座 π6": "pi.6 ori",
    "猎户座 ρ": "rho ori",
    "猎户座 σ": "sig ori",
    "猎户座 τ": "tau ori",
    "猎户座 υ": "ups ori",
    "猎户座 φ1": "phi1 ori",
    "猎户座 φ2": "phi2 ori",
    "猎户座 χ1": "chi1 ori",
    "猎户座 χ2": "chi2 ori",
    "猎户座 ψ": "psi ori",
    "猎户座 ψ1": "psi1 ori",
    "猎户座 ψ2": "psi2 ori",
    "猎户座 ω": "ome ori",
    "猎户座 b": "b ori",
    "猎户座 c": "c ori",
    "猎户座 d": "d ori",
    "猎户座 e": "e ori",
    "猎户座 f1": "f1 ori",
    "猎户座 f2": "f2 ori",
    "猎户座 g": "g ori",
    "猎户座 h": "h ori",
    "猎户座 i": "i ori",
    "猎户座 k": "k ori",
    "猎户座 l": "l ori",
    "猎户座 m": "m ori",
    "猎户座 n1": "n1 ori",
    "猎户座 n2": "n2 ori",
    "猎户座 o": "o ori",
    "猎户座 p": "p ori",
    "猎户座 A": "a ori",
    "猎户座 1": "1 ori",
    "猎户座 2": "2 ori",
    "猎户座 3": "3 ori",
    "猎户座 4": "4 ori",
    "猎户座 5": "5 ori",
    "猎户座 6": "6 ori",
    "猎户座 7": "7 ori",
    "猎户座 8": "8 ori",
    "猎户座 9": "9 ori",
    "猎户座 10": "10 ori",
    "猎户座 11": "11 ori",
    "猎户座 13": "13 ori",
    "猎户座 14": "14 ori",
    "猎户座 15": "15 ori",
    "猎户座 16": "16 ori",
    "猎户座 17": "17 ori",
    "猎户座 18": "18 ori",
    "猎户座 19": "19 ori",
    "猎户座 20": "20 ori",
    "猎户座 21": "21 ori",
    "猎户座 22": "22 ori",
    "猎户座 23": "23 ori",
    "猎户座 24": "24 ori",
    "猎户座 25": "25 ori",
    "猎户座 27": "27 ori",
    "猎户座 28": "28 ori",
    "猎户座 29": "29 ori",
    "猎户座 30": "30 ori",
    "猎户座 31": "31 ori",
    "猎户座 32": "32 ori",
    "猎户座 33": "33 ori",
    "猎户座 34": "34 ori",
    "猎户座 35": "35 ori",
    "猎户座 36": "36 ori",
    "猎户座 37": "37 ori",
    "猎户座 38": "38 ori",
    "猎户座 39": "39 ori",
    "猎户座 40": "40 ori",
    "猎户座 41": "41 ori",
    "猎户座 42": "42 ori",
    "猎户座 43": "43 ori",
    "猎户座 44": "44 ori",
    "猎户座 45": "45 ori",
    "猎户座 46": "46 ori",
    "猎户座 47": "47 ori",
    "猎户座 48": "48 ori",
    "猎户座 49": "49 ori",
    "猎户座 50": "50 ori",
    "猎户座 51": "51 ori",
    "猎户座 52": "52 ori",
    "猎户座 53": "53 ori",
    "猎户座 54": "54 ori",
    "猎户座 55": "55 ori",
    "猎户座 56": "56 ori",
    "猎户座 57": "57 ori",
    "猎户座 58": "58 ori",
    "猎户座 59": "59 ori",
    "猎户座 60": "60 ori",
    "猎户座 61": "61 ori",
    "猎户座 62": "62 ori",
    "猎户座 63": "63 ori",
    "猎户座 64": "64 ori",
    "猎户座 66": "66 ori",
    "猎户座 67": "67 ori",
    "猎户座 68": "68 ori",
    "猎户座 69": "69 ori",
    "猎户座 70": "70 ori",
    "猎户座 71": "71 ori",
    "猎户座 72": "72 ori",
    "猎户座 73": "73 ori",
    "猎户座 74": "74 ori",
    "猎户座 75": "75 ori",
    "猎户座 77": "77 ori",
    "猎户座 78": "78 ori",
    "孔雀座 α": "alf pav",
    "孔雀座 β": "bet pav",
    "孔雀座 γ": "gam pav",
    "孔雀座 δ": "del pav",
    "孔雀座 ε": "eps pav",
    "孔雀座 ζ": "zet pav",
    "孔雀座 η": "eta pav",
    "孔雀座 θ": "tet pav",
    "孔雀座 ι": "iot pav",
    "孔雀座 κ": "kap pav",
    "孔雀座 λ": "lam pav",
    "孔雀座 μ1": "mu.1 pav",
    "孔雀座 μ2": "mu.2 pav",
    "孔雀座 ν": "nu. pav",
    "孔雀座 ξ": "ksi pav",
    "孔雀座 ο": "omi pav",
    "孔雀座 π": "pi. pav",
    "孔雀座 ρ": "rho pav",
    "孔雀座 σ": "sig pav",
    "孔雀座 τ": "tau pav",
    "孔雀座 υ": "ups pav",
    "孔雀座 φ1": "phi1 pav",
    "孔雀座 φ2": "phi2 pav",
    "孔雀座 ω": "ome pav",
    "飞马座 α": "alf peg",
    "飞马座 β": "bet peg",
    "飞马座 γ": "gam peg",
    "飞马座 δ": "del peg",
    "飞马座 ε": "eps peg",
    "飞马座 ζ": "zet peg",
    "飞马座 η": "eta peg",
    "飞马座 θ": "tet peg",
    "飞马座 ι": "iot peg",
    "飞马座 κ": "kap peg",
    "飞马座 λ": "lam peg",
    "飞马座 μ": "mu. peg",
    "飞马座 ν": "nu. peg",
    "飞马座 ξ": "ksi peg",
    "飞马座 ο": "omi peg",
    "飞马座 π": "pi. peg",
    "飞马座 π1": "pi.1 peg",
    "飞马座 π2": "pi.2 peg",
    "飞马座 ρ": "rho peg",
    "飞马座 σ": "sig peg",
    "飞马座 τ": "tau peg",
    "飞马座 υ": "ups peg",
    "飞马座 φ": "phi peg",
    "飞马座 χ": "chi peg",
    "飞马座 ψ": "psi peg",
    "飞马座 1": "1 peg",
    "飞马座 2": "2 peg",
    "飞马座 3": "3 peg",
    "飞马座 4": "4 peg",
    "飞马座 5": "5 peg",
    "飞马座 6": "6 peg",
    "飞马座 7": "7 peg",
    "飞马座 8": "8 peg",
    "飞马座 9": "9 peg",
    "飞马座 10": "10 peg",
    "飞马座 11": "11 peg",
    "宝瓶座 27": "27 aqr",
    "飞马座 12": "12 peg",
    "飞马座 13": "13 peg",
    "飞马座 14": "14 peg",
    "飞马座 15": "15 peg",
    "飞马座 16": "16 peg",
    "飞马座 17": "17 peg",
    "飞马座 18": "18 peg",
    "飞马座 19": "19 peg",
    "飞马座 20": "20 peg",
    "飞马座 21": "21 peg",
    "飞马座 22": "22 peg",
    "飞马座 23": "23 peg",
    "飞马座 24": "24 peg",
    "飞马座 25": "25 peg",
    "飞马座 26": "26 peg",
    "飞马座 27": "27 peg",
    "飞马座 28": "28 peg",
    "飞马座 29": "29 peg",
    "飞马座 30": "30 peg",
    "飞马座 31": "31 peg",
    "飞马座 32": "32 peg",
    "飞马座 33": "33 peg",
    "飞马座 34": "34 peg",
    "飞马座 35": "35 peg",
    "飞马座 36": "36 peg",
    "飞马座 37": "37 peg",
    "飞马座 38": "38 peg",
    "飞马座 39": "39 peg",
    "飞马座 40": "40 peg",
    "飞马座 41": "41 peg",
    "飞马座 42": "42 peg",
    "飞马座 43": "43 peg",
    "飞马座 44": "44 peg",
    "飞马座 45": "45 peg",
    "飞马座 46": "46 peg",
    "飞马座 47": "47 peg",
    "飞马座 48": "48 peg",
    "飞马座 49": "49 peg",
    "飞马座 50": "50 peg",
    "飞马座 51": "51 peg",
    "飞马座 52": "52 peg",
    "飞马座 53": "53 peg",
    "飞马座 54": "54 peg",
    "飞马座 55": "55 peg",
    "飞马座 56": "56 peg",
    "飞马座 57": "57 peg",
    "飞马座 58": "58 peg",
    "飞马座 59": "59 peg",
    "飞马座 60": "60 peg",
    "飞马座 61": "61 peg",
    "飞马座 62": "62 peg",
    "飞马座 63": "63 peg",
    "飞马座 64": "64 peg",
    "飞马座 65": "65 peg",
    "飞马座 66": "66 peg",
    "飞马座 67": "67 peg",
    "飞马座 68": "68 peg",
    "飞马座 69": "69 peg",
    "飞马座 70": "70 peg",
    "飞马座 71": "71 peg",
    "飞马座 72": "72 peg",
    "飞马座 73": "73 peg",
    "飞马座 74": "74 peg",
    "飞马座 75": "75 peg",
    "飞马座 76": "76 peg",
    "飞马座 77": "77 peg",
    "飞马座 78": "78 peg",
    "飞马座 79": "79 peg",
    "飞马座 80": "80 peg",
    "飞马座 81": "81 peg",
    "飞马座 82": "82 peg",
    "飞马座 83": "83 peg",
    "飞马座 84": "84 peg",
    "飞马座 85": "85 peg",
    "飞马座 86": "86 peg",
    "飞马座 87": "87 peg",
    "飞马座 88": "88 peg",
    "飞马座 89": "89 peg",
    "英仙座 α": "alf per",
    "英仙座 β": "bet per",
    "英仙座 γ": "gam per",
    "英仙座 δ": "del per",
    "英仙座 ε": "eps per",
    "英仙座 ζ
Download .txt
gitextract__0euzy7k/

├── .gitattributes
├── .github/
│   └── workflows/
│       └── format-check.yml
├── .gitignore
├── .prettierignore
├── .prettierrc
├── .python-version
├── LICENSE
├── NOTICE.md
├── README.md
├── docs/
│   ├── CONTRIBUTING.md
│   └── INSTALLATION.md
├── eslint.config.mjs
├── examples/
│   └── image_coords.csv
├── package.json
├── pnpm-workspace.yaml
├── prototype/
│   ├── README.md
│   ├── config.py
│   ├── core/
│   │   ├── __init__.py
│   │   ├── astro_coord/
│   │   │   ├── calc.py
│   │   │   ├── data.py
│   │   │   ├── remote.py
│   │   │   ├── stellarium.COPYING
│   │   │   └── utils.py
│   │   ├── astrometry/
│   │   │   ├── client.py
│   │   │   ├── extract.py
│   │   │   └── solve.py
│   │   ├── moon_time/
│   │   │   ├── calc.py
│   │   │   └── utils.py
│   │   ├── positioning/
│   │   │   ├── __init__.py
│   │   │   ├── calc.py
│   │   │   ├── find_z/
│   │   │   │   ├── README.md
│   │   │   │   ├── benchmark.py
│   │   │   │   ├── methods/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── bi_mean.py
│   │   │   │   │   ├── fix_refraction.py
│   │   │   │   │   ├── north_len.py
│   │   │   │   │   └── trisect.py
│   │   │   │   └── utils/
│   │   │   │       └── math.py
│   │   │   ├── latitude/
│   │   │   │   ├── benchmark.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── method/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── bisect_formular.py
│   │   │   │   │   ├── bisect_tabular.py
│   │   │   │   │   ├── naive.py
│   │   │   │   │   ├── series.py
│   │   │   │   │   └── series2.py
│   │   │   │   ├── readme.md
│   │   │   │   └── series_model.py
│   │   │   ├── locator/
│   │   │   │   ├── README.md
│   │   │   │   ├── benchmark.py
│   │   │   │   ├── methods/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── bi_median.py
│   │   │   │   │   └── matrix_inverse.py
│   │   │   │   └── utils/
│   │   │   │       └── math.py
│   │   │   └── top_point/
│   │   │       ├── README.md
│   │   │       ├── __init__.py
│   │   │       ├── benchmark.py
│   │   │       ├── experiment.py
│   │   │       ├── methods/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── least_square.py
│   │   │       │   ├── matrix_inverse.py
│   │   │       │   ├── matrix_inverse_normalized.py
│   │   │       │   ├── median.py
│   │   │       │   ├── median2.py
│   │   │       │   ├── nearest_l2.py
│   │   │       │   ├── optim.py
│   │   │       │   ├── sphere.py
│   │   │       │   └── square_weight.py
│   │   │       └── utils/
│   │   │           └── plane.py
│   │   └── stellarium/
│   │       ├── readme.md
│   │       └── screenshot.py
│   ├── main.py
│   ├── requirements-dev.txt
│   ├── requirements.txt
│   ├── routers/
│   │   ├── __init__.py
│   │   ├── astro_coord.py
│   │   ├── astrometry.py
│   │   ├── bmap.py
│   │   ├── limiter.py
│   │   ├── moon_time.py
│   │   └── positioning.py
│   ├── schemas/
│   │   ├── __init__.py
│   │   ├── astro_coord.py
│   │   ├── astrometry/
│   │   │   ├── extract_stars.py
│   │   │   ├── recognize.py
│   │   │   └── submit.py
│   │   ├── base.py
│   │   ├── moon_time.py
│   │   └── positioning.py
│   └── tests/
│       ├── __init__.py
│       ├── test_astro_coord.py
│       ├── test_astrometry/
│       │   ├── test_extract_stars.py
│       │   ├── test_recognize.py
│       │   └── test_submit.py
│       ├── test_moon_time.py
│       ├── test_positioning.py
│       └── test_utils.py
├── pyproject.toml
├── src/
│   ├── config.js
│   ├── css/
│   │   └── site.css
│   ├── help.html
│   ├── index.html
│   ├── index.js
│   └── interface/
│       ├── classes/
│       │   ├── EventManager.js
│       │   ├── TouchEventAdapter.js
│       │   └── interact.js
│       ├── elements/
│       │   ├── Baseclass.js
│       │   ├── CelestialBody.js
│       │   ├── PlumbLine.js
│       │   └── Rectangle.js
│       ├── functions/
│       │   ├── AutoComplete.js
│       │   ├── Calc.js
│       │   ├── CeleCoord.js
│       │   ├── CeleRecognition.js
│       │   ├── Default.js
│       │   ├── ImageChange.js
│       │   ├── MoonTime.js
│       │   ├── PickCele.js
│       │   ├── PickPL.js
│       │   └── SelectStars.js
│       ├── init.js
│       ├── starZH2EN.js
│       └── utils.js
├── webpack.common.js
├── webpack.dev.js
└── webpack.prod.js
Download .txt
SYMBOL INDEX (326 symbols across 78 files)

FILE: prototype/core/astro_coord/calc.py
  function get_HaDec_by_RaDec (line 8) | def get_HaDec_by_RaDec(
  function get_HaDec_in_solar (line 33) | def get_HaDec_in_solar(
  function get_HaDecs_by_names (line 56) | def get_HaDecs_by_names(

FILE: prototype/core/astro_coord/remote.py
  function get_RaDec_by_name (line 16) | async def get_RaDec_by_name(
  function get_RaDecs_by_names (line 48) | async def get_RaDecs_by_names(

FILE: prototype/core/astro_coord/utils.py
  function stamp2ast_time (line 5) | def stamp2ast_time(timestamp: float) -> ast.Time:

FILE: prototype/core/astrometry/client.py
  function json2python (line 42) | def json2python(data):
  class MalformedResponse (line 53) | class MalformedResponse(Exception):
  class RequestError (line 57) | class RequestError(Exception):
  class Client (line 61) | class Client(object):
    method __init__ (line 64) | def __init__(self, apiurl=default_url):
    method get_url (line 68) | def get_url(self, service):
    method send_request (line 71) | def send_request(self, service, args={}, file_args=None):
    method login (line 144) | def login(self, apikey):
    method _get_upload_args (line 153) | def _get_upload_args(self, **kwargs):
    method url_upload (line 189) | def url_upload(self, url, **kwargs):
    method upload (line 195) | def upload(self, fn=None, **kwargs):
    method submission_images (line 207) | def submission_images(self, subid):
    method overlay_plot (line 211) | def overlay_plot(self, service, outfn, wcsfn, wcsext=0):
    method sdss_plot (line 234) | def sdss_plot(self, outfn, wcsfn, wcsext=0):
    method galex_plot (line 237) | def galex_plot(self, outfn, wcsfn, wcsext=0):
    method myjobs (line 240) | def myjobs(self):
    method job_status (line 244) | def job_status(self, job_id, justdict=False):
    method annotate_data (line 265) | def annotate_data(self, job_id):
    method sub_status (line 273) | def sub_status(self, sub_id, justdict=False):
    method jobs_by_tag (line 279) | def jobs_by_tag(self, tag, exact):
  class ClientRunnerOptions (line 288) | class ClientRunnerOptions(object):
    method __init__ (line 289) | def __init__(self, **entries):
    method __getattr__ (line 297) | def __getattr__(self, name):
  function run_client (line 304) | def run_client(opt):
  function get_args (line 391) | def get_args():

FILE: prototype/core/astrometry/extract.py
  function extract_stars (line 6) | def extract_stars(

FILE: prototype/core/astrometry/solve.py
  function flux_in_img (line 23) | def flux_in_img(images: list[Image.Image]) -> list[float]:
  function tune_rd (line 70) | def tune_rd(
  class SolarStars (line 114) | class SolarStars:
    method __init__ (line 115) | def __init__(self, timestamp: float, max_mag: float):
    method get_solar_stars (line 142) | def get_solar_stars(
  function get_fixed_stars (line 171) | def get_fixed_stars(
  function submit (line 258) | def submit(
  function recognize (line 311) | def recognize(

FILE: prototype/core/moon_time/calc.py
  function calc (line 14) | def calc(

FILE: prototype/core/moon_time/utils.py
  function find_moon_idx (line 10) | def find_moon_idx(stars: list[dict]) -> int:
  function angle_btw_moon_stars (line 26) | def angle_btw_moon_stars(points: np.ndarray, moon_idx: int, z: float) ->...
  function geo_estimate_by_stars (line 43) | def geo_estimate_by_stars(
  function s2sidereal_days (line 89) | def s2sidereal_days(s: float) -> float:
  function angle_error (line 103) | def angle_error(
  function wrap_angle_in_deg (line 155) | def wrap_angle_in_deg(deg):

FILE: prototype/core/positioning/calc.py
  function calc_z (line 9) | def calc_z(
  function calc_geo (line 36) | def calc_geo(
  function stars_convert (line 111) | def stars_convert(stars: list[dict]) -> tuple[np.ndarray, np.ndarray, li...

FILE: prototype/core/positioning/find_z/benchmark.py
  function generate_points (line 12) | def generate_points(args):
  function destort (line 60) | def destort(points, k1, k2, scope_x, scope_y):
  function print_results (line 80) | def print_results(results):
  function main (line 119) | def main(methods, args):

FILE: prototype/core/positioning/find_z/methods/bi_mean.py
  function get_z (line 4) | def get_z(data: dict) -> float:
  function get_z_from_2_points (line 26) | def get_z_from_2_points(p1: tuple, p2: tuple, theta: float) -> list[float]:
  function reject_outliers (line 68) | def reject_outliers(data: list, sigma: float = 2.0) -> list:

FILE: prototype/core/positioning/find_z/methods/fix_refraction.py
  function get_z (line 7) | def get_z(data: dict, z0: float, zenith: np.ndarray) -> float:
  function rotate (line 80) | def rotate(vector: np.ndarray, zenith_vec: np.ndarray, angle: float) -> ...

FILE: prototype/core/positioning/find_z/methods/north_len.py
  function north_len (line 4) | def north_len(points: np.ndarray, des: np.ndarray, f: float) -> float:
  function get_z (line 22) | def get_z(data: dict) -> float:

FILE: prototype/core/positioning/find_z/methods/trisect.py
  function calculate_angle (line 5) | def calculate_angle(p1: np.ndarray, p2: np.ndarray, z: float) -> np.ndar...
  function get_z (line 14) | def get_z(data: dict) -> float:

FILE: prototype/core/positioning/find_z/utils/math.py
  function normalize (line 6) | def normalize(vec: np.ndarray) -> np.ndarray:
  function angles_on_sphere (line 10) | def angles_on_sphere(dec_ras: np.ndarray) -> np.ndarray:
  function minimize (line 26) | def minimize(

FILE: prototype/core/positioning/latitude/benchmark.py
  function get_geocentric_latitude (line 17) | def get_geocentric_latitude(geodetic_latitude_in_rad):
  function get_astronomic_latitude (line 22) | def get_astronomic_latitude(geocentric_latitude_in_rad):

FILE: prototype/core/positioning/latitude/method/bisect_formular.py
  function get_geocentric_latitude (line 5) | def get_geocentric_latitude(geodetic_latitude_in_rad):
  function get_astronomic_latitude (line 10) | def get_astronomic_latitude(geocentric_latitude_in_rad):
  function reverse_solve (line 59) | def reverse_solve(geodetic_latitude):
  function astronomic_latitude_to_geodetic_latitude (line 67) | def astronomic_latitude_to_geodetic_latitude(astronomic_latitudes_in_deg...

FILE: prototype/core/positioning/latitude/method/bisect_tabular.py
  function get_geocentric_latitude (line 7) | def get_geocentric_latitude(geodetic_latitude_in_rad):
  function get_astronomic_latitude (line 12) | def get_astronomic_latitude(geocentric_latitude_in_rad):
  function astronomic_latitude_to_geodetic_latitude (line 70) | def astronomic_latitude_to_geodetic_latitude(astronomic_latitudes_in_deg...

FILE: prototype/core/positioning/latitude/method/naive.py
  function astronomic_latitude_to_geodetic_latitude (line 1) | def astronomic_latitude_to_geodetic_latitude(astronomic_latitudes_in_deg...

FILE: prototype/core/positioning/latitude/method/series.py
  function astronomic_latitude_to_geodetic_latitude (line 4) | def astronomic_latitude_to_geodetic_latitude(astronomic_latitudes_in_deg...

FILE: prototype/core/positioning/latitude/method/series2.py
  function astronomic_latitude_to_geodetic_latitude (line 4) | def astronomic_latitude_to_geodetic_latitude(

FILE: prototype/core/positioning/latitude/series_model.py
  function get_geocentric_latitude (line 11) | def get_geocentric_latitude(geodetic_latitude_in_rad):
  function get_astronomic_latitude (line 16) | def get_astronomic_latitude(geocentric_latitude_in_rad):

FILE: prototype/core/positioning/locator/benchmark.py
  function generate_datas (line 11) | def generate_datas(args):
  function destort (line 73) | def destort(points_3d, k1, k2, scope_x, scope_y):
  function print_results (line 96) | def print_results(results):
  function main (line 135) | def main(methods, args):

FILE: prototype/core/positioning/locator/methods/bi_median.py
  function get_geo (line 6) | def get_geo(data: dict, is_fix_refraction: bool = False) -> np.ndarray:
  function dual_star_positioning (line 64) | def dual_star_positioning(data: dict, i: int, j: int) -> list[list[float]]:
  function get_plane (line 75) | def get_plane(data: dict, i: int) -> np.ndarray:
  function get_plane_intersection (line 91) | def get_plane_intersection(plane1: np.ndarray, plane2: np.ndarray) -> li...
  function square_median_average (line 467) | def square_median_average(crude_positions: list[np.ndarray], data: dict)...
  function adjust_angle (line 516) | def adjust_angle(angle: float, avg_angle: float) -> float:

FILE: prototype/core/positioning/locator/methods/matrix_inverse.py
  function get_geo (line 5) | def get_geo(data: dict):

FILE: prototype/core/positioning/locator/utils/math.py
  function vector_angle (line 4) | def vector_angle(vec1: np.ndarray, vec2: np.ndarray) -> np.ndarray:
  function cart2sph (line 12) | def cart2sph(x: float, y: float, z: float) -> tuple:
  function sph2cart (line 20) | def sph2cart(az: float, elev: float, r: float = 1) -> tuple:
  function sph_dist (line 28) | def sph_dist(

FILE: prototype/core/positioning/top_point/benchmark.py
  function generate_lines (line 16) | def generate_lines(args):
  function destort (line 56) | def destort(lines, k1, k2, scope_x, scope_y):
  function print_results (line 78) | def print_results(results):
  function main (line 135) | def main(methods, args):

FILE: prototype/core/positioning/top_point/methods/least_square.py
  function least_squares_fit (line 5) | def least_squares_fit(points):
  function intersection (line 27) | def intersection(lines: list) -> tuple:

FILE: prototype/core/positioning/top_point/methods/matrix_inverse.py
  function intersection (line 4) | def intersection(lines: np.ndarray) -> np.ndarray:

FILE: prototype/core/positioning/top_point/methods/matrix_inverse_normalized.py
  function intersection (line 4) | def intersection(lines: np.ndarray) -> np.ndarray:

FILE: prototype/core/positioning/top_point/methods/median.py
  function intersection (line 5) | def intersection(lines: list) -> tuple:

FILE: prototype/core/positioning/top_point/methods/median2.py
  function intersection (line 5) | def intersection(lines: list) -> tuple:

FILE: prototype/core/positioning/top_point/methods/nearest_l2.py
  function intersection (line 4) | def intersection(lines: list) -> tuple:

FILE: prototype/core/positioning/top_point/methods/optim.py
  function objective_function (line 6) | def objective_function(point: tuple, lines: list) -> float:
  function intersection (line 34) | def intersection(lines: list) -> tuple:

FILE: prototype/core/positioning/top_point/methods/sphere.py
  function intersection (line 4) | def intersection(lines: list) -> tuple:

FILE: prototype/core/positioning/top_point/methods/square_weight.py
  function intersection (line 5) | def intersection(lines: list) -> tuple:

FILE: prototype/core/positioning/top_point/utils/plane.py
  function two_line_intersection_point (line 4) | def two_line_intersection_point(l1, l2):
  function all_points_of_lines_intersection (line 23) | def all_points_of_lines_intersection(lines):

FILE: prototype/core/stellarium/screenshot.py
  function execute_code (line 13) | def execute_code(code):
  function screenshot (line 21) | def screenshot(name, folder="./"):
  function set_location (line 29) | def set_location(lat, lng, alt):
  function set_time (line 35) | def set_time(dt: datetime):
  function set_direction (line 47) | def set_direction(azimuth_from_south, altitude):
  function set_fov (line 55) | def set_fov(fov_degree):
  function sanitize_filename (line 63) | def sanitize_filename(input_str):
  function make_screenshot (line 69) | def make_screenshot():

FILE: prototype/main.py
  function read_root (line 36) | def read_root():

FILE: prototype/routers/astro_coord.py
  function http_astro_coord (line 13) | def http_astro_coord(request: Request, data: astro_coord.AstroTime):

FILE: prototype/routers/astrometry.py
  function http_extract_stars (line 22) | def http_extract_stars(request: Request, data: Annotated[ExtractStarRequ...
  function http_submit (line 65) | def http_submit(request: Request, data: Annotated[SubmitRequest, Form()]):
  function http_jobid_status (line 117) | def http_jobid_status(request: Request, job_id: str):
  function http_recognize (line 134) | def http_recognize(request: Request, data: RecognizeRequest):

FILE: prototype/routers/bmap.py
  function bmap_service_proxy (line 15) | async def bmap_service_proxy(path: str, request: Request, ak: str = Quer...

FILE: prototype/routers/moon_time.py
  function http_time_by_moon (line 13) | def http_time_by_moon(request: Request, data: moon_time.MoonTimeRequest):

FILE: prototype/routers/positioning.py
  function http_geo_by_data (line 13) | def http_geo_by_data(request: Request, data: positioning.PositioningRequ...

FILE: prototype/schemas/astro_coord.py
  class AstroTime (line 5) | class AstroTime(BaseModel):
  class AstroCoord (line 28) | class AstroCoord(BaseModel):

FILE: prototype/schemas/astrometry/extract_stars.py
  class ExtractStarRequest (line 6) | class ExtractStarRequest(BaseModel):
  class ExtractStarResponse (line 14) | class ExtractStarResponse(BaseModel):

FILE: prototype/schemas/astrometry/recognize.py
  class RecognizeRequest (line 6) | class RecognizeRequest(BaseModel):
  class RecognizeResponse (line 20) | class RecognizeResponse(BaseModel):

FILE: prototype/schemas/astrometry/submit.py
  class SubmitRequest (line 7) | class SubmitRequest(BaseModel):
  class SubmitResponse (line 36) | class SubmitResponse(BaseModel):

FILE: prototype/schemas/base.py
  class Stars (line 8) | class Stars(BaseModel):
  class PointLines (line 16) | class PointLines(BaseModel):

FILE: prototype/schemas/moon_time.py
  class MoonPointLines (line 6) | class MoonPointLines(PointLines):
  class MoonTimeRequest (line 13) | class MoonTimeRequest(BaseModel):
  class MoonTimeResponse (line 84) | class MoonTimeResponse(BaseModel):

FILE: prototype/schemas/positioning.py
  class PositioningRequest (line 5) | class PositioningRequest(BaseModel):
  class PositioningResponse (line 65) | class PositioningResponse(BaseModel):

FILE: prototype/tests/test_astro_coord.py
  function test_local (line 25) | def test_local():
  function test_remote (line 41) | def test_remote():

FILE: prototype/tests/test_astrometry/test_extract_stars.py
  function sort_positions (line 12) | def sort_positions(positions: list[list[float]]) -> list:
  function plot (line 19) | def plot(image: Image.Image, objects: list[list[float]]):
  function test_local (line 104) | def test_local():
  function test_remote (line 113) | def test_remote():

FILE: prototype/tests/test_astrometry/test_recognize.py
  function test_local (line 42) | def test_local():
  function test_remote (line 58) | def test_remote():

FILE: prototype/tests/test_astrometry/test_submit.py
  function crop_image (line 6) | def crop_image(image: Image.Image, x: float, y: float, size: float) -> I...
  function test_flux_in_img (line 46) | def test_flux_in_img():
  function log_submit (line 52) | def log_submit():

FILE: prototype/tests/test_moon_time.py
  function test_local (line 64) | def test_local():
  function test_remote (line 71) | def test_remote():

FILE: prototype/tests/test_positioning.py
  function test_local (line 60) | def test_local():
  function test_remote (line 69) | def test_remote():

FILE: prototype/tests/test_utils.py
  function test_two_line_intersection_point (line 6) | def test_two_line_intersection_point():

FILE: src/config.js
  constant BACKEND_API (line 1) | const BACKEND_API = `http://localhost:6975/api`;

FILE: src/interface/classes/EventManager.js
  class EventManager (line 13) | class EventManager {
    method constructor (line 14) | constructor(interactPhoto) {
    method clearAllData (line 40) | clearAllData() {
    method handleMouseDown (line 50) | handleMouseDown(e) {
    method handleMouseUp (line 55) | handleMouseUp(e) {
    method handleMouseMove (line 60) | handleMouseMove(e) {
    method handleMouseOut (line 65) | handleMouseOut(e) {
    method handleMouseWheel (line 70) | handleMouseWheel(opt) {
    method handleResize (line 75) | handleResize() {

FILE: src/interface/classes/TouchEventAdapter.js
  class TouchEventAdapter (line 1) | class TouchEventAdapter {
    method constructor (line 2) | constructor() {
    method adapter (line 8) | adapter(e) {
    method touchStart (line 25) | touchStart(e) {
    method touchEnd (line 38) | touchEnd(e) {
    method touchMove (line 43) | touchMove(e) {
    method touchCancel (line 66) | touchCancel(e) {

FILE: src/interface/classes/interact.js
  class InteractPhoto (line 6) | class InteractPhoto {
    method constructor (line 7) | constructor() {
    method reZoomCanvas (line 39) | reZoomCanvas(rect, alignRect = false, resize = true) {
    method setCanvasCursor (line 51) | setCanvasCursor(cursor) {
    method resetbuttonFunctioner (line 56) | resetbuttonFunctioner() {
    method updateCeleStatus (line 61) | updateCeleStatus() {
    method getCeleStatusText (line 69) | getCeleStatusText(count) {
    method updateRecognizeButton (line 74) | updateRecognizeButton(count) {
    method getTimestamp (line 83) | getTimestamp() {
    method setDatebyTime (line 102) | setDatebyTime(timestamp) {

FILE: src/interface/elements/Baseclass.js
  class ShapeObject (line 3) | class ShapeObject {
    method constructor (line 4) | constructor(x, y, id, canvas, color, label) {
    method setRealXY (line 47) | setRealXY(x, y) {
    method onMove (line 53) | onMove() {
    method onZoom (line 62) | onZoom() {}
    method remove (line 64) | remove() {
    method displayDeleter (line 70) | displayDeleter() {
    method hideDeleter (line 75) | hideDeleter() {
  class LineObject (line 82) | class LineObject {
    method constructor (line 83) | constructor(coordinates, canvas, color) {
    method remove (line 99) | remove() {
  class markerArray (line 105) | class markerArray {
    method constructor (line 106) | constructor(interactPhoto) {
    method num (line 111) | num() {
    method add (line 115) | add(obj) {
    method remove (line 120) | remove(id) {}
    method get (line 122) | get(id) {
    method clear (line 126) | clear() {

FILE: src/interface/elements/CelestialBody.js
  constant MIN_STAR_ROWS (line 4) | const MIN_STAR_ROWS = 3;
  class CelestialBody (line 7) | class CelestialBody extends ShapeObject {
    method constructor (line 8) | constructor(x, y, id, canvas) {
    method round (line 22) | round(num, digits = 0) {
    method addToTable (line 27) | addToTable(x = this.x, y = this.y) {
    method onMove (line 36) | onMove() {
    method onRename (line 46) | onRename() {
    method remove (line 58) | remove() {
    method removeTableData (line 62) | removeTableData() {
  class CeleArray (line 83) | class CeleArray extends markerArray {
    method constructor (line 84) | constructor(interactPhoto) {
    method add (line 88) | add(x, y) {
    method initializeTableRows (line 107) | initializeTableRows() {
    method tableStarRowCount (line 114) | tableStarRowCount() {
    method ensureTableRow (line 119) | ensureTableRow(id) {
    method addEmptyRow (line 125) | addEmptyRow() {
    method createStarRowHTML (line 135) | createStarRowHTML(id) {
    method bindTableRow (line 159) | bindTableRow(id) {
    method clearTableRowData (line 218) | clearTableRowData(id) {
    method copyTableRowData (line 234) | copyTableRowData(fromId, toId) {
    method copyRawValue (line 250) | copyRawValue(fromElementId, toElementId) {
    method removeTableRow (line 260) | removeTableRow(id) {
    method renumberTableRow (line 281) | renumberTableRow(id) {
    method remove (line 299) | remove(id) {
    method clear (line 324) | clear() {

FILE: src/interface/elements/PlumbLine.js
  class PLpoint (line 4) | class PLpoint extends ShapeObject {
    method constructor (line 5) | constructor(coordinate, interactPhoto, canvas, id, color) {
    method onMove (line 11) | onMove() {
  class PLLine (line 18) | class PLLine {
    method constructor (line 19) | constructor(interactPhoto) {
    method addMoveLineEvent (line 26) | addMoveLineEvent() {
    method onMovePoint (line 34) | onMovePoint(PLpoint) {
    method remove (line 49) | remove() {
  class PLArray (line 57) | class PLArray extends markerArray {
    method constructor (line 58) | constructor(interactPhoto) {
    method add (line 62) | add(coordinate) {
    method remove (line 93) | remove(id) {

FILE: src/interface/elements/Rectangle.js
  class Rectangle (line 3) | class Rectangle {
    method constructor (line 4) | constructor(x, y, canvas) {
    method update (line 21) | update(x, y) {
    method getCoordinates (line 26) | getCoordinates() {

FILE: src/interface/functions/AutoComplete.js
  function autoCompleteStarName (line 6) | function autoCompleteStarName(inp) {

FILE: src/interface/functions/Calc.js
  class Calc (line 6) | class Calc extends DefaultbuttonFunctioner {
    method constructor (line 7) | constructor(interactPhoto, celeCoord) {
    method onClick (line 12) | onClick() {
    method clearData (line 31) | clearData() {
    method calc (line 37) | calc() {
    method checkStars (line 86) | checkStars(originalStars) {
    method addZenithtoTable (line 99) | addZenithtoTable(zenith) {
    method showZ (line 105) | showZ(z) {
    method showGeoEstimate (line 115) | showGeoEstimate(geoLon, geoLat) {
    method wrapAngleInDeg (line 167) | wrapAngleInDeg(deg) {

FILE: src/interface/functions/CeleCoord.js
  class CeleCoord (line 5) | class CeleCoord {
    method constructor (line 6) | constructor(interactPhoto) {
    method calc (line 10) | async calc() {
    method getStarNames (line 49) | getStarNames() {

FILE: src/interface/functions/CeleRecognition.js
  class RecognizeStars (line 6) | class RecognizeStars extends DefaultbuttonFunctioner {
    method constructor (line 7) | constructor(interactPhoto) {
    method onClick (line 13) | onClick() {
    method clearData (line 37) | clearData() {
    method submitData (line 43) | async submitData() {
    method inquire (line 70) | inquire(jobid) {
    method recognizeStars (line 99) | recognizeStars(jobid) {
    method getXY (line 119) | getXY() {
    method getSubImages (line 130) | getSubImages(xy) {
    method showStars (line 175) | showStars(results) {

FILE: src/interface/functions/Default.js
  class DefaultbuttonFunctioner (line 4) | class DefaultbuttonFunctioner {
    method constructor (line 5) | constructor(interactPhoto) {
    method onClick (line 11) | onClick() {
    method clearData (line 17) | clearData() {}
    method resetZoom (line 20) | resetZoom() {
    method handleMouseDown (line 26) | handleMouseDown() {
    method handleMouseUp (line 44) | handleMouseUp() {
    method handleMouseMove (line 60) | handleMouseMove(e) {
    method handleMouseOut (line 96) | handleMouseOut(e) {
    method handleMouseWheel (line 104) | handleMouseWheel(opt) {
    method handleResize (line 125) | handleResize() {
    method CancelPicking (line 136) | CancelPicking(e) {

FILE: src/interface/functions/ImageChange.js
  class ImageChange (line 5) | class ImageChange extends DefaultbuttonFunctioner {
    method constructor (line 6) | constructor(interactPhoto, clearAllData) {
    method loadFile (line 11) | loadFile(file) {
    method onClick (line 48) | onClick(e) {

FILE: src/interface/functions/MoonTime.js
  class MoonTime (line 5) | class MoonTime extends DefaultbuttonFunctioner {
    method constructor (line 6) | constructor(interactPhoto, astroCalculator, celeCoord) {
    method onClick (line 12) | onClick() {
    method calc (line 52) | calc(stars, globalPLsPointsCoord) {
    method checkStars (line 95) | checkStars(originalStars) {
    method hasMoon (line 106) | hasMoon(originalStars) {

FILE: src/interface/functions/PickCele.js
  class PickCele (line 4) | class PickCele extends DefaultbuttonFunctioner {
    method constructor (line 5) | constructor(interactPhoto) {
    method onClick (line 10) | onClick() {
    method clearData (line 24) | clearData() {
    method handleMouseUp (line 29) | handleMouseUp(e) {
    method addStarAtPoint (line 50) | addStarAtPoint(x, y) {

FILE: src/interface/functions/PickPL.js
  class PickPL (line 4) | class PickPL extends DefaultbuttonFunctioner {
    method constructor (line 5) | constructor(interactPhoto) {
    method onClick (line 10) | onClick() {
    method clearData (line 24) | clearData() {
    method handleMouseUp (line 32) | handleMouseUp(e) {
    method addPL (line 55) | addPL(coordinate) {

FILE: src/interface/functions/SelectStars.js
  class SelectStars (line 14) | class SelectStars extends DefaultbuttonFunctioner {
    method constructor (line 15) | constructor(interactPhoto) {
    method onClick (line 21) | onClick() {
    method clearData (line 40) | clearData() {
    method handleMouseDown (line 44) | handleMouseDown(e) {
    method handleMouseMove (line 57) | handleMouseMove(e) {
    method handleMouseUp (line 68) | handleMouseUp(e) {
    method locateStars (line 88) | locateStars(img, imgRect, coords) {
    method showStars (line 127) | showStars(x0, y0, stars) {

FILE: src/interface/init.js
  function initializeElements (line 4) | function initializeElements(interactPhoto) {
  function initializeCanvas (line 17) | function initializeCanvas(interactPhoto) {
  function initializeEvents (line 40) | function initializeEvents(eventManager) {
  function initializeMap (line 120) | function initializeMap(interactPhoto) {

FILE: src/interface/utils.js
  function getOriginalStars (line 2) | function getOriginalStars(interactPhoto) {
  function getGlobalPLPointsCoord (line 22) | function getGlobalPLPointsCoord(interactPhoto) {
  function setHADE (line 36) | function setHADE(id, hourAngle, declination) {
  function getHADE (line 62) | function getHADE(id) {
  function roundTo (line 89) | function roundTo(num, digits) {
  function formatHADE (line 94) | function formatHADE(hourAngle, declination) {
  function isDisplayedHADEUnchanged (line 114) | function isDisplayedHADEUnchanged(id, hourAngle, declination) {
  function post (line 127) | async function post(url, data, Type) {
Condensed preview — 126 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (894K chars).
[
  {
    "path": ".gitattributes",
    "chars": 66,
    "preview": "# Auto detect text files and perform LF normalization\n* text=auto\n"
  },
  {
    "path": ".github/workflows/format-check.yml",
    "chars": 705,
    "preview": "name: Format Check\n\non:\n  pull_request: # 在每次提交 PR 时运行\n    branches:\n      - main # 针对 main 分支运行\n      - dev # 针对 dev 分支"
  },
  {
    "path": ".gitignore",
    "chars": 109,
    "preview": "*.code-workspace\n.idea/\n.vscode/\n.DS_Store\nnode_modules/\ndist/\npackage-lock.json\n.pytest_cache/\n__pycache__/\n"
  },
  {
    "path": ".prettierignore",
    "chars": 52,
    "preview": "*.md\n*.json\n*.yml\n*.yaml\n*.html\n*.css\nnode_modules/\n"
  },
  {
    "path": ".prettierrc",
    "chars": 138,
    "preview": "{\n    \"semi\": true,\n    \"trailingComma\": \"es5\",\n    \"singleQuote\": true,\n    \"printWidth\": 120,\n    \"tabWidth\": 4,\n    \""
  },
  {
    "path": ".python-version",
    "chars": 5,
    "preview": "3.12\n"
  },
  {
    "path": "LICENSE",
    "chars": 34566,
    "preview": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C)"
  },
  {
    "path": "NOTICE.md",
    "chars": 1665,
    "preview": "This project uses the following open source projects and follows their respective license terms:\n\nfrontend:\n- [Fabric](h"
  },
  {
    "path": "README.md",
    "chars": 2863,
    "preview": "# StarLocator\n\n💬<a href=\"https://qm.qq.com/q/lmRhILlX0e\">加入StarLocator交流群</a> | 🌎<a href=\"https://caveallegory.cn/StarLo"
  },
  {
    "path": "docs/CONTRIBUTING.md",
    "chars": 800,
    "preview": "# 如何贡献本项目\n\n## 实时交流、闲聊 or 长期贡献\n\n建议加入我们的QQ群:[**StarLocator交流群**](https://qm.qq.com/q/nlFqV4jVfO),在群里你可以得到关于本项目的**最新消息**,参与"
  },
  {
    "path": "docs/INSTALLATION.md",
    "chars": 1038,
    "preview": "# 安装\n1. 克隆仓库,安装Node.js、pnpm和Python(版本尽量较新)。\n2. 前端构建\n\n    自定义前端配置文件[config.js](../src/config.js)。其中,百度地图API key申请见[百度地图开放"
  },
  {
    "path": "eslint.config.mjs",
    "chars": 552,
    "preview": "import globals from 'globals';\nimport pluginJs from '@eslint/js';\nimport prettierPlugin from 'eslint-plugin-prettier';\ni"
  },
  {
    "path": "examples/image_coords.csv",
    "chars": 797,
    "preview": "478.34,269.082\n2346.32,608.375\n2585.44,661.47\n2115.17,1160.88\n1956.64,1741.5\n2926.1,352.348\n1641.82,1688.24\n2656.49,1047"
  },
  {
    "path": "package.json",
    "chars": 1047,
    "preview": "{\n\t\"name\": \"starlocator\",\n\t\"version\": \"2.1.0\",\n\t\"description\": \"\",\n\t\"private\": true,\n\t\"scripts\": {\n\t\t\"test\": \"echo \\\"Err"
  },
  {
    "path": "pnpm-workspace.yaml",
    "chars": 34,
    "preview": "onlyBuiltDependencies:\n  - canvas\n"
  },
  {
    "path": "prototype/README.md",
    "chars": 551,
    "preview": "# 后端\n\n## 安装\n1. 命令行进入本文件夹\n2. 安装依赖\n    ```bash\n    pip install -r requirements.txt\n    ```\n\n## 后端\n\n### 运行\n1. 进入本文件夹\n2. 自定义"
  },
  {
    "path": "prototype/config.py",
    "chars": 902,
    "preview": "# 前端服务的基础URL\nFRONTEND_BASEURL = \"http://localhost:6974\"\n# 后端服务的基础URL\nBACKEND_BASEURL = \"http://localhost:6975\"\nBACKEND_A"
  },
  {
    "path": "prototype/core/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "prototype/core/astro_coord/calc.py",
    "chars": 3090,
    "preview": "import asyncio\nimport astronomy as ast\nfrom .data import starZH2EN, solar_bodies\nfrom .remote import get_RaDecs_by_names"
  },
  {
    "path": "prototype/core/astro_coord/data.py",
    "chars": 183289,
    "preview": "solar_bodies = [\n    \"sun\",\n    \"moon\",\n    \"mercury\",\n    \"venus\",\n    \"mars\",\n    \"jupiter\",\n    \"saturn\",\n    \"uranus"
  },
  {
    "path": "prototype/core/astro_coord/remote.py",
    "chars": 1864,
    "preview": "import re\nimport httpx\nimport asyncio\nfrom .data import solar_bodies\nfrom async_lru import alru_cache\nfrom config import"
  },
  {
    "path": "prototype/core/astro_coord/stellarium.COPYING",
    "chars": 17992,
    "preview": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc."
  },
  {
    "path": "prototype/core/astro_coord/utils.py",
    "chars": 326,
    "preview": "import astronomy as ast\nfrom datetime import datetime\n\n\ndef stamp2ast_time(timestamp: float) -> ast.Time:\n    \"\"\"\n    Co"
  },
  {
    "path": "prototype/core/astrometry/client.py",
    "chars": 19324,
    "preview": "#!/usr/bin/env python3\n\n# This file is part of the Astrometry.net suite.\n# Copyright 2009 Dustin Lang\n# Licensed under a"
  },
  {
    "path": "prototype/core/astrometry/extract.py",
    "chars": 1358,
    "preview": "import numpy as np\nfrom PIL import Image\nimport sep_pjw as sep\n\n\ndef extract_stars(\n    image: Image.Image,\n    thresh: "
  },
  {
    "path": "prototype/core/astrometry/solve.py",
    "chars": 12742,
    "preview": "import httpx\nimport asyncio\nimport numpy as np\nimport sep_pjw as sep\nfrom PIL import Image\nfrom io import BytesIO\nimport"
  },
  {
    "path": "prototype/core/moon_time/calc.py",
    "chars": 2434,
    "preview": "from copy import deepcopy\nimport numpy as np\nfrom .utils import (\n    find_moon_idx,\n    angle_btw_moon_stars,\n    geo_e"
  },
  {
    "path": "prototype/core/moon_time/utils.py",
    "chars": 4156,
    "preview": "import numpy as np\nimport astronomy as ast\nfrom core.positioning.locator.utils.math import vector_angle\nfrom core.positi"
  },
  {
    "path": "prototype/core/positioning/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "prototype/core/positioning/calc.py",
    "chars": 3499,
    "preview": "import numpy as np\nfrom .top_point.methods.matrix_inverse_normalized import intersection\nfrom .find_z.methods import tri"
  },
  {
    "path": "prototype/core/positioning/find_z/README.md",
    "chars": 1422,
    "preview": "# 焦距计算误差测试框架\n\n## 算法原形\n\n使用 python 来测试焦距计算算法的误差。提供Oxy平面点坐标,以及他们两两关于z轴某一焦点的夹角矩阵。每个点由两个坐标表示,含一定噪声,夹角矩阵不含噪声。需要计算真实的焦距。\n\n## 排行"
  },
  {
    "path": "prototype/core/positioning/find_z/benchmark.py",
    "chars": 4644,
    "preview": "import argparse\nfrom copy import deepcopy\n\nimport numpy as np\nimport scipy.stats as st\nfrom .methods.bi_mean import get_"
  },
  {
    "path": "prototype/core/positioning/find_z/methods/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "prototype/core/positioning/find_z/methods/bi_mean.py",
    "chars": 2167,
    "preview": "import numpy as np\n\n\ndef get_z(data: dict) -> float:\n    \"\"\"\n    Find the focal length.\n\n    params:\n        data: (poin"
  },
  {
    "path": "prototype/core/positioning/find_z/methods/fix_refraction.py",
    "chars": 2852,
    "preview": "import numpy as np\nimport astronomy as ast\nfrom ..utils.math import minimize, normalize\nfrom core.positioning.locator.ut"
  },
  {
    "path": "prototype/core/positioning/find_z/methods/north_len.py",
    "chars": 1268,
    "preview": "import numpy as np\n\n\ndef north_len(points: np.ndarray, des: np.ndarray, f: float) -> float:\n    \"\"\"\n    Calculate the le"
  },
  {
    "path": "prototype/core/positioning/find_z/methods/trisect.py",
    "chars": 869,
    "preview": "import numpy as np\nfrom ..utils.math import minimize\n\n\ndef calculate_angle(p1: np.ndarray, p2: np.ndarray, z: float) -> "
  },
  {
    "path": "prototype/core/positioning/find_z/utils/math.py",
    "chars": 1458,
    "preview": "import numpy as np\nfrom typing import Callable\nfrom ...locator.utils.math import sph_dist\n\n\ndef normalize(vec: np.ndarra"
  },
  {
    "path": "prototype/core/positioning/latitude/benchmark.py",
    "chars": 3483,
    "preview": "from . import constants\nimport numpy as np\nfrom matplotlib import pyplot as plt\nfrom .method.bisect_formular import (\n  "
  },
  {
    "path": "prototype/core/positioning/latitude/constants.py",
    "chars": 216,
    "preview": "import numpy as np\n\n## 地球赤道半径\na = 6378137\n## 地球扁率\nf = 1 / 298.257223563\n## 赤道重力加速度\ng_e = 9.7803253359\n## 极地重力加速度\ng_p = 9"
  },
  {
    "path": "prototype/core/positioning/latitude/method/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "prototype/core/positioning/latitude/method/bisect_formular.py",
    "chars": 2188,
    "preview": "from .. import constants\nimport numpy as np\n\n\ndef get_geocentric_latitude(geodetic_latitude_in_rad):\n    tan_theta = (1 "
  },
  {
    "path": "prototype/core/positioning/latitude/method/bisect_tabular.py",
    "chars": 2849,
    "preview": "from .. import constants\nimport numpy as np\n\ngeodetic_latitudes = np.linspace(-90, 90, 100000)\n\n\ndef get_geocentric_lati"
  },
  {
    "path": "prototype/core/positioning/latitude/method/naive.py",
    "chars": 162,
    "preview": "def astronomic_latitude_to_geodetic_latitude(astronomic_latitudes_in_degree):\n    geodetic_latitude = astronomic_latitud"
  },
  {
    "path": "prototype/core/positioning/latitude/method/series.py",
    "chars": 378,
    "preview": "import numpy as np\n\n\ndef astronomic_latitude_to_geodetic_latitude(astronomic_latitudes_in_degree):\n    return astronomic"
  },
  {
    "path": "prototype/core/positioning/latitude/method/series2.py",
    "chars": 522,
    "preview": "import numpy as np\n\n\ndef astronomic_latitude_to_geodetic_latitude(\n    astronomic_latitudes_in_degree: np.ndarray,\n) -> "
  },
  {
    "path": "prototype/core/positioning/latitude/readme.md",
    "chars": 1197,
    "preview": "## 方法评估\n\nseries3 目前最好,原理见 `series_model.py`\n\n## 建模\n\n把地球近似看成是个椭球体\n\n1. 按纬度圈来切,截面是正圆\n1. 按子午圈来切,截面是椭圆\n    1. 长轴 $a$ 为地心到赤道\n "
  },
  {
    "path": "prototype/core/positioning/latitude/series_model.py",
    "chars": 2445,
    "preview": "from . import constants\nimport numpy as np\n\nnp.set_printoptions(precision=15)\n\ncnt = 10001\n\ngeodetic_latitudes = np.lins"
  },
  {
    "path": "prototype/core/positioning/locator/README.md",
    "chars": 1448,
    "preview": "# 定位计算误差测试框架\n\n## 算法原形\n\n使用 python 来测试地理定位算法的误差。提供相机坐标系下的焦距、各星矢量、灭点矢量、各星参考时角&赤纬。各星矢量、灭点矢量含一定噪声,焦距、各星参考时角&赤纬不含噪声。需要计算真实的地理坐"
  },
  {
    "path": "prototype/core/positioning/locator/benchmark.py",
    "chars": 5288,
    "preview": "import argparse\nfrom copy import deepcopy\n\nimport numpy as np\nimport scipy.stats as st\nfrom .methods.bi_median import ge"
  },
  {
    "path": "prototype/core/positioning/locator/methods/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "prototype/core/positioning/locator/methods/bi_median.py",
    "chars": 13879,
    "preview": "import numpy as np\nimport astronomy as ast\nfrom ..utils.math import cart2sph, sph2cart, vector_angle\n\n\ndef get_geo(data:"
  },
  {
    "path": "prototype/core/positioning/locator/methods/matrix_inverse.py",
    "chars": 852,
    "preview": "import numpy as np\nfrom ..utils.math import cart2sph, sph2cart\n\n\ndef get_geo(data: dict):\n    \"\"\"\n    Find the geographi"
  },
  {
    "path": "prototype/core/positioning/locator/utils/math.py",
    "chars": 1215,
    "preview": "import numpy as np\n\n\ndef vector_angle(vec1: np.ndarray, vec2: np.ndarray) -> np.ndarray:\n    cos_theta = np.dot(vec1, ve"
  },
  {
    "path": "prototype/core/positioning/top_point/README.md",
    "chars": 2582,
    "preview": "# 灭点计算误差测试框架\n\n## 算法原形\n\n使用 python 来进行一组直线交点算法的验证。所提供的直线实际上交于一点,每条直线由两个端点坐标表示,含一定噪声,需要计算它们的真实交点。\n\n## 排行榜\n\n### 无畸变\n\n**参数**:"
  },
  {
    "path": "prototype/core/positioning/top_point/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "prototype/core/positioning/top_point/benchmark.py",
    "chars": 6014,
    "preview": "import argparse\n\nimport numpy as np\nimport scipy.stats as st\nfrom .methods.least_square import intersection as least_squ"
  },
  {
    "path": "prototype/core/positioning/top_point/experiment.py",
    "chars": 1240,
    "preview": "import matplotlib.pyplot as plt\nimport numpy as np\nfrom .methods.matrix_inverse import intersection as matrix_inverse_in"
  },
  {
    "path": "prototype/core/positioning/top_point/methods/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "prototype/core/positioning/top_point/methods/least_square.py",
    "chars": 1252,
    "preview": "import numpy as np\nfrom ..utils.plane import all_points_of_lines_intersection\n\n\ndef least_squares_fit(points):\n    # 提取x"
  },
  {
    "path": "prototype/core/positioning/top_point/methods/matrix_inverse.py",
    "chars": 581,
    "preview": "import numpy as np\n\n\ndef intersection(lines: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Find the intersection point of given"
  },
  {
    "path": "prototype/core/positioning/top_point/methods/matrix_inverse_normalized.py",
    "chars": 766,
    "preview": "import numpy as np\n\n\ndef intersection(lines: np.ndarray) -> np.ndarray:\n    \"\"\"\n    在 matrix_inverse 基础上改良:对直线方程的系数进行归一化"
  },
  {
    "path": "prototype/core/positioning/top_point/methods/median.py",
    "chars": 517,
    "preview": "import numpy as np\nfrom ..utils.plane import all_points_of_lines_intersection\n\n\ndef intersection(lines: list) -> tuple:\n"
  },
  {
    "path": "prototype/core/positioning/top_point/methods/median2.py",
    "chars": 750,
    "preview": "import numpy as np\nfrom ..utils.plane import all_points_of_lines_intersection\n\n\ndef intersection(lines: list) -> tuple:\n"
  },
  {
    "path": "prototype/core/positioning/top_point/methods/nearest_l2.py",
    "chars": 917,
    "preview": "import numpy as np\n\n\ndef intersection(lines: list) -> tuple:\n    \"\"\"\n    Find the intersection point of given lines.\n   "
  },
  {
    "path": "prototype/core/positioning/top_point/methods/optim.py",
    "chars": 1526,
    "preview": "import numpy as np\nfrom . import median\nfrom scipy.optimize import minimize\n\n\ndef objective_function(point: tuple, lines"
  },
  {
    "path": "prototype/core/positioning/top_point/methods/sphere.py",
    "chars": 929,
    "preview": "import numpy as np\n\n\ndef intersection(lines: list) -> tuple:\n    \"\"\"\n    Find the intersection point of given lines.\n   "
  },
  {
    "path": "prototype/core/positioning/top_point/methods/square_weight.py",
    "chars": 1277,
    "preview": "import numpy as np\nfrom ..utils.plane import all_points_of_lines_intersection\n\n\ndef intersection(lines: list) -> tuple:\n"
  },
  {
    "path": "prototype/core/positioning/top_point/utils/plane.py",
    "chars": 770,
    "preview": "import numpy as np\n\n\ndef two_line_intersection_point(l1, l2):\n    p1 = np.array(l1[0])\n    p2 = np.array(l1[1])\n    p3 ="
  },
  {
    "path": "prototype/core/stellarium/readme.md",
    "chars": 362,
    "preview": "## 操作 Stellarium 并截图\n\n1. 打开『远程控制』插件\n    1. 按『F2』按键 打开『设置』\n    2. 选择『插件』\n    3. 选择『远程控制』\n        1. 勾选该页面的『启动时加载』\n       "
  },
  {
    "path": "prototype/core/stellarium/screenshot.py",
    "chars": 3003,
    "preview": "import os\nimport re\nfrom datetime import datetime, timezone\n\nimport httpx\n\nHOST = \"http://127.0.0.1\"\nPORT = 8090\n\nBASE_U"
  },
  {
    "path": "prototype/main.py",
    "chars": 1568,
    "preview": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nimport uvicorn.config\nfrom routers import"
  },
  {
    "path": "prototype/requirements-dev.txt",
    "chars": 127,
    "preview": "black\nnumpy\nscipy\npytest\nmatplotlib\nfastapi\nuvicorn[standard]\npython-multipart\nastronomy-engine\nhttpx\nasync_lru\nslowapi\n"
  },
  {
    "path": "prototype/requirements.txt",
    "chars": 111,
    "preview": "numpy\nscipy\nfastapi\nuvicorn[standard]\npython-multipart\nastronomy-engine\nhttpx\nasync_lru\nslowapi\nsep-pjw\nastropy"
  },
  {
    "path": "prototype/routers/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "prototype/routers/astro_coord.py",
    "chars": 808,
    "preview": "from fastapi import APIRouter, Request\nfrom schemas import astro_coord\nfrom core.astro_coord.calc import get_HaDecs_by_n"
  },
  {
    "path": "prototype/routers/astrometry.py",
    "chars": 4536,
    "preview": "from typing import Annotated\nfrom fastapi import APIRouter, Request, Response, Form\nfrom schemas.astrometry.extract_star"
  },
  {
    "path": "prototype/routers/bmap.py",
    "chars": 2023,
    "preview": "import httpx\nfrom fastapi import APIRouter, Query, Request, Response\nimport re\n\nfrom config import BACKEND_API_BASEURL, "
  },
  {
    "path": "prototype/routers/limiter.py",
    "chars": 170,
    "preview": "from slowapi import Limiter\nfrom slowapi.util import get_remote_address\nfrom config import RATE_LIMIT\n\nlimiter = Limiter"
  },
  {
    "path": "prototype/routers/moon_time.py",
    "chars": 1313,
    "preview": "from fastapi import APIRouter, Request\nfrom core.moon_time.calc import calc\nfrom schemas import moon_time\n\nfrom .limiter"
  },
  {
    "path": "prototype/routers/positioning.py",
    "chars": 1310,
    "preview": "from fastapi import APIRouter, Request\nfrom schemas import positioning\nfrom core.positioning.calc import calc_geo\n\nfrom "
  },
  {
    "path": "prototype/schemas/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "prototype/schemas/astro_coord.py",
    "chars": 773,
    "preview": "from pydantic import BaseModel, Field\nfrom config import MAX_NUM_OF_STARS\n\n\nclass AstroTime(BaseModel):\n    starNames: l"
  },
  {
    "path": "prototype/schemas/astrometry/extract_stars.py",
    "chars": 780,
    "preview": "from fastapi import UploadFile\nfrom ..base import Coordinate\nfrom pydantic import BaseModel, Field\n\n\nclass ExtractStarRe"
  },
  {
    "path": "prototype/schemas/astrometry/recognize.py",
    "chars": 976,
    "preview": "from ..base import Coordinate\nfrom pydantic import BaseModel, Field\nfrom config import MAX_NUM_OF_STARS\n\n\nclass Recogniz"
  },
  {
    "path": "prototype/schemas/astrometry/submit.py",
    "chars": 1250,
    "preview": "from fastapi import UploadFile\nfrom ..base import Coordinate\nfrom pydantic import BaseModel, Field\nfrom config import MA"
  },
  {
    "path": "prototype/schemas/base.py",
    "chars": 567,
    "preview": "from pydantic import BaseModel, Field\nfrom config import MAX_NUM_OF_STARS, MAX_NUM_OF_LINES\n\nCoordinate = tuple[float, f"
  },
  {
    "path": "prototype/schemas/moon_time.py",
    "chars": 3170,
    "preview": "from pydantic import BaseModel, Field\nfrom .base import PointLines, Stars\nfrom config import MAX_NUM_OF_STARS, MAX_MOON_"
  },
  {
    "path": "prototype/schemas/positioning.py",
    "chars": 2448,
    "preview": "from pydantic import BaseModel\nfrom .base import PointLines, Coordinate\n\n\nclass PositioningRequest(BaseModel):\n    photo"
  },
  {
    "path": "prototype/tests/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "prototype/tests/test_astro_coord.py",
    "chars": 1901,
    "preview": "import time\nimport httpx\nimport pytest\nimport datetime\nfrom config import BACKEND_API_BASEURL\nfrom core.astro_coord.calc"
  },
  {
    "path": "prototype/tests/test_astrometry/test_extract_stars.py",
    "chars": 3610,
    "preview": "import io\nimport httpx\nimport pytest\nimport numpy as np\nfrom PIL import Image\nimport matplotlib.pyplot as plt\nfrom matpl"
  },
  {
    "path": "prototype/tests/test_astrometry/test_recognize.py",
    "chars": 2134,
    "preview": "import httpx\nimport pytest\nfrom datetime import datetime\nfrom config import BACKEND_API_BASEURL\nfrom core.astrometry.sol"
  },
  {
    "path": "prototype/tests/test_astrometry/test_submit.py",
    "chars": 1085,
    "preview": "import pytest\nfrom PIL import Image\nfrom core.astrometry.solve import flux_in_img, submit\n\n\ndef crop_image(image: Image."
  },
  {
    "path": "prototype/tests/test_moon_time.py",
    "chars": 2159,
    "preview": "import httpx\nimport pytest\nimport datetime\nfrom core.moon_time.calc import calc\nfrom config import BACKEND_API_BASEURL\n\n"
  },
  {
    "path": "prototype/tests/test_positioning.py",
    "chars": 2150,
    "preview": "import httpx\nimport pytest\nimport numpy as np\nfrom config import BACKEND_API_BASEURL\nfrom core.positioning.calc import c"
  },
  {
    "path": "prototype/tests/test_utils.py",
    "chars": 752,
    "preview": "import numpy as np\nimport pytest\nfrom core.positioning.top_point.utils.plane import two_line_intersection_point\n\n\ndef te"
  },
  {
    "path": "pyproject.toml",
    "chars": 604,
    "preview": "[project]\nname = \"starlocator\"\nversion = \"2.1.0\"\ndescription = \"照片测星定位 网页app(地平论吧)\"\nreadme = \"README.md\"\nrequires-python"
  },
  {
    "path": "src/config.js",
    "chars": 56,
    "preview": "export const BACKEND_API = `http://localhost:6975/api`;\n"
  },
  {
    "path": "src/css/site.css",
    "chars": 8050,
    "preview": "body {\n\tbackground-color: #1c355d;\n\tcolor: #dfdfdf;\n}\n\nth {\n\tbackground-color: #1d2430;\n\theight: 25px;\n}\n\ntd {\n\ttext-al"
  },
  {
    "path": "src/help.html",
    "chars": 4791,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <title>帮助</title>\n\t<link rel=\"shortcut icon\" "
  },
  {
    "path": "src/index.html",
    "chars": 17630,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"utf-8\">\n    <title>照片测星定位</title>\n    <link rel=\"shortcut"
  },
  {
    "path": "src/index.js",
    "chars": 295,
    "preview": "import './css/site.css';\nimport { InteractPhoto } from './interface/classes/interact.js';\nimport { EventManager } from '"
  },
  {
    "path": "src/interface/classes/EventManager.js",
    "chars": 2661,
    "preview": "import { initializeElements, initializeCanvas, initializeEvents, initializeMap } from '../init.js';\nimport { TouchEventA"
  },
  {
    "path": "src/interface/classes/TouchEventAdapter.js",
    "chars": 2099,
    "preview": "class TouchEventAdapter {\n    constructor() {\n        this.lastPageX; // 上次触摸点横坐标\n        this.lastPageY; // 上次触摸点纵坐标\n  "
  },
  {
    "path": "src/interface/classes/interact.js",
    "chars": 3833,
    "preview": "import { DefaultbuttonFunctioner } from '../functions/Default.js';\nimport { CeleArray } from '../elements/CelestialBody."
  },
  {
    "path": "src/interface/elements/Baseclass.js",
    "chars": 3217,
    "preview": "import { Path, IText, Line } from 'fabric';\n// 点基类\nclass ShapeObject {\n    constructor(x, y, id, canvas, color, label) {"
  },
  {
    "path": "src/interface/elements/CelestialBody.js",
    "chars": 13122,
    "preview": "import { ShapeObject, markerArray } from './Baseclass.js';\nimport { autoCompleteStarName } from '../functions/AutoComple"
  },
  {
    "path": "src/interface/elements/PlumbLine.js",
    "chars": 3315,
    "preview": "import { ShapeObject, LineObject, markerArray } from './Baseclass.js';\n\n// 线端点类\nclass PLpoint extends ShapeObject {\n    "
  },
  {
    "path": "src/interface/elements/Rectangle.js",
    "chars": 802,
    "preview": "import { Rect } from 'fabric';\n\nclass Rectangle {\n    constructor(x, y, canvas) {\n        this.canvas = canvas;\n        "
  },
  {
    "path": "src/interface/functions/AutoComplete.js",
    "chars": 5111,
    "preview": "import fuzzysort from 'fuzzysort';\nimport { starZH2EN } from '../starZH2EN.js';\n\nconst options = { limit: 100, threshold"
  },
  {
    "path": "src/interface/functions/Calc.js",
    "chars": 5606,
    "preview": "import { DefaultbuttonFunctioner } from './Default.js';\nimport { BACKEND_API } from '../../config.js';\nimport { getOrigi"
  },
  {
    "path": "src/interface/functions/CeleCoord.js",
    "chars": 1713,
    "preview": "import { BACKEND_API } from '../../config.js';\nimport { post, setHADE } from '../utils.js';\n\n// 计算天体坐标功能类\nclass CeleCoor"
  },
  {
    "path": "src/interface/functions/CeleRecognition.js",
    "chars": 6205,
    "preview": "import { DefaultbuttonFunctioner } from './Default.js';\nimport { post, setHADE } from '../utils.js';\nimport { BACKEND_AP"
  },
  {
    "path": "src/interface/functions/Default.js",
    "chars": 4677,
    "preview": "import { Point } from 'fabric';\n\n// 默认按钮功能类,所有按钮功能类的父类\nclass DefaultbuttonFunctioner {\n    constructor(interactPhoto) {\n"
  },
  {
    "path": "src/interface/functions/ImageChange.js",
    "chars": 1844,
    "preview": "import { FabricImage } from 'fabric';\nimport { DefaultbuttonFunctioner } from './Default.js';\n\n// 图片更换功能类\nclass ImageCha"
  },
  {
    "path": "src/interface/functions/MoonTime.js",
    "chars": 3741,
    "preview": "import { DefaultbuttonFunctioner } from './Default.js';\nimport { getOriginalStars, getGlobalPLPointsCoord, post } from '"
  },
  {
    "path": "src/interface/functions/PickCele.js",
    "chars": 1495,
    "preview": "import { DefaultbuttonFunctioner } from './Default.js';\n\n// 选择天体按钮功能类\nclass PickCele extends DefaultbuttonFunctioner {\n "
  },
  {
    "path": "src/interface/functions/PickPL.js",
    "chars": 1665,
    "preview": "import { DefaultbuttonFunctioner } from './Default.js';\n\n// 选择铅垂线按钮功能类\nclass PickPL extends DefaultbuttonFunctioner {\n  "
  },
  {
    "path": "src/interface/functions/SelectStars.js",
    "chars": 4271,
    "preview": "import { DefaultbuttonFunctioner } from './Default.js';\nimport { Rectangle } from '../elements/Rectangle.js';\nimport { p"
  },
  {
    "path": "src/interface/init.js",
    "chars": 5683,
    "preview": "import { Canvas, IText } from 'fabric';\n\n// 初始化页面元素\nfunction initializeElements(interactPhoto) {\n    interactPhoto.conta"
  },
  {
    "path": "src/interface/starZH2EN.js",
    "chars": 176888,
    "preview": "const starZH2EN = {\n    太阳: 'sun',\n    日: 'sun',\n    月球: 'moon',\n    月: 'moon',\n    月亮: 'moon',\n    水星: 'mercury',\n    金"
  },
  {
    "path": "src/interface/utils.js",
    "chars": 6679,
    "preview": "// 获取原始星星数据\nfunction getOriginalStars(interactPhoto) {\n    let stars = [];\n    for (let i = 1; i <= interactPhoto.CeleAr"
  },
  {
    "path": "webpack.common.js",
    "chars": 2276,
    "preview": "/* eslint-disable no-undef */\nconst path = require('path');\nconst HtmlWebpackPlugin = require('html-webpack-plugin');\nco"
  },
  {
    "path": "webpack.dev.js",
    "chars": 289,
    "preview": "/* eslint-disable no-undef */\nconst { merge } = require('webpack-merge');\nconst common = require('./webpack.common.js');"
  },
  {
    "path": "webpack.prod.js",
    "chars": 212,
    "preview": "/* eslint-disable no-undef */\nconst { merge } = require('webpack-merge');\nconst common = require('./webpack.common.js');"
  }
]

About this extraction

This page contains the full source code of the BengbuGuards/StarLocator GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 126 files (677.5 KB), approximately 282.8k tokens, and a symbol index with 326 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!