私は現在、星と惑星系に関する情報を提供し、その情報をシミュレートする「星の検索と並べ替え」データベースで GeoDjango を使用しています。
私が GeoDjango を使用しているのは、1) 気に入って他の場所で使用しているからです。2) 最終的に、距離/ライン/ポリゴン変換などのさまざまな「地理」検索機能を使用して、見つけられない複雑でクールなボリューム クエリを実行したいからです。他の場所。
私はシステムを稼働させており ( https://github.com/jaycrossler/procyon )、現在、星の銀河座標を使用しています (すでに赤経/赤経から変換されています)。データベースには現在 15 万個のスターがあり、数百万個まで増やすことを検討しています。
星がデータベースに登録されたら、GeoDjango PointField を持つ新しいテーブルを作成し、銀河の X、Y、Z 座標 (パーセク単位で、ほとんどが -500 から 500 の範囲) を入力します。 . 現在、SRID を 900913 に設定しています (これにより、世界線の周りをロールオーバーしない適切な範囲の座標が得られます)...しかし、近くの星を検索して距離で並べ替えると、 X、Y、Z の距離に基づいて本当に近くにいるのではなく、一列に並んでいるリターンしか得られません。
location = models.PointField(dim=3, blank=True, null=True, srid=900913)
objects = models.GeoManager()
これは、私が行うすべての検索が最終的に球体の表面にラップされるためであり、それは非効率的であり、結果を台無しにするためだと思います (ただし、検索に 1 行のコードしかかからない場合は、それで問題ありません)。
私がDjangoで使用している現在の検索は次のとおりです。
origin = self.location
distance = 1000
close_by_stars = StarModel.objects.filter(location__distance_lte=(origin, D(m=distance))).distance(origin).order_by('distance')
for s in close_by_stars[:200]:
#export results
しかし、返された結果は私が期待したものではありません (一列に並んでいるのではなく、1 つの星の周りに集まっていると思います)。
したがって、大きな問題は次のとおりです。1) 900913 (Spherical Mercator) などの SRID を使用する必要があるか、または 2) X、Y で検索できるように、惑星の表面にマッピングされていない SRID はありますか? 、-180 を +180 (または投影システムに基づいた同等のもの) にロールオーバーせずに Z 距離を移動しますか? SRID=0 を使用してみましたが、吐くよりもジオジャンゴであり、許可されていません。