-1

私はすでに、lat、lng、placeIdをデータベースに保存することで、ユーザーが指定した場所のリストを保存するGoogleマップjavascript apiを実装しました。したがって、ユーザーはkm /マイル単位で場所の半径内にある場所を見つけることができます。州/都道府県/市区町村内の座標をフィルタでフィルタリングする方法はありますか?

私はこのGoogleマップのチュートリアルに基づいてhttps://developers.google.com/maps/solutions/store-locator/clothing-store-locator

を半正矢式を使用して私の問題は、私はあまりにも状態(あるいは都市や地区)内に制限されているSQLクエリから返された座標を制限したいです、なぜならいますユーザーが州境の近くにポイントを置くと、Haversine式は他の州の座標も返す可能性がありますが、これは私が望むものではありません。私はいつかこのことについて研究してきました。これを達成する方法は、状態情報をデータベースにも格納することです。正しいのですか?

Googleマップのjavascript API経由でこれを達成する方法があれば教えてください。あなたは、データベース内のユーザーの場所を格納しているよう

答えて

1

同じ

おかげで、また、あなたの管理部門を持つテーブルを持っている必要があります。 (たとえば、州は自由にESRI OpenDataに取得できます)。あなたが言及したチュートリアルに従った場合

そう、私はあなたがMySQLを使っている推測する必要があるだろう、とあなたはあなたのポイントはlatlngフィールドを持つレコードとして保存されています。それらを地図上に表示するのには十分ですが、空間的な交差点を使用するには十分ではありません。

店舗のジオメトリは、ST_GeomFromText()を使用して構成する必要があります。次に例

SELECT 
    ST_GeomFromText(CONCAT('POINT(', lng, ' ', lat, ')')) as markerposition 
FROM markers; 

について、あなたは「us_states」という名前のアメリカの州のテーブルを、持っていたし、このテーブルはタイプgeometrygeomフィールドを持っていた、あなたがAに含まれるすべてのマーカーを取得するにはST_Contains関数を使用することができれば与えられた状態ジオメトリ(次の例では、カリフォルニアに含まれています):

SELECT * FROM markers 
JOIN us_states ON ST_Contains(us_states.geom, ST_GeomFromText(CONCAT('POINT(', markers.lng, ' ', markers.lat, ')'))) 
WHERE us_states.name='California'; 

これは正しい方法です。しかし、達成しようとしていることをあまりにも遠くに取っている場合は、これを正面から行うこともできます。状態のジオメトリを表すgoogle.maps.Polygonがある場合は、 google.maps.geometry.poly.containsLocationメソッドを使用して、表示するマーカーをフィルタリングするか、またはそれらが前記ポリゴンの外側にある場合に非表示にするマーカーをフィルタすることができます。何かのように

if (!google.maps.geometry.poly.containsLocation(marker.getPosition(), statePolygon)) { 
    marker.setMap(null); 
} 
+0

こんにちは、すばらしい答えをありがとう。以前は、GoogleマップのApi関数があるかどうかはわかりませんでしたが、それは私が複数の座標と州/国を投げて、その州/国の座標を返すことを許可しています私は自分自身でその州/国を追跡しなければならないことを知っています。したがって、私はこれを実装する前に尋ねました。ありがとう。 – William

+0

ええ、あなたは、あなたがバックまたはフロントエンドのいずれかで、あなた自身の管理下位区分を提供しなければならない – amenadiel

+0

こんにちは私は米国のジオメトリのリストを取得するつもりですか? –

関連する問題