2016-07-06 6 views
1

私はテーブルを持っていますurbanpolygonsポリゴンを保持するカラムはpathsです。私はポリゴンに囲まれたポイントを持っていて、ポリゴンを検​​索してどちらが私のポイントに近いのかを知りたいと思います。MySQL:5.6.1より前のバージョンのmysqlで特別な点から最も近いポリゴンを見つける方法は?

グリーンボックス(ポリゴン)はどちらを選択する必要がありますか?

enter image description here

私が管理するには、この操作を行う時点多角形の内側かではありません。

select * FROM urbanpolygons where ST_Contains(urbanpolygons.paths, GeomFromText('POINT(29.632262, 52.497868)')); 

この質問は、私が言及したGet polygons close to a lat,long in MySQLまたはMySQL Find Polygon Nearest to Point

古い質問と重複れていません6年前に上記の質問が寄せられ、その時からmysqlには多くの地理空間的特徴が実装されていました。

それはので、私はここにリッテ例を書くことにした

sqlfiddleが5.6以上MySQLバージョンを提供していないのMySQLの新機能< 5.6.1などST_Containsなどの提供、及び...を考えると答える方が良いでしょう。

CREATE TABLE `urbanpolygons` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`name` varchar(45) NOT NULL, 
`paths` polygon NOT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `id_UNIQUE` (`id`) 
) 
INSERT INTO urbanpolygons (`id`, `name`, `paths`) VALUES ('1', 'area_1', ST_GeomFromText('POLYGON ((29.63383 52.492869,29.63411 52.493942,29.634446 52.494586,29.634837 52.495658,29.635397 52.497289,29.635676 52.49804,29.635919 52.498856,29.636217 52.499778,29.63674 52.501345,29.636889 52.501967,29.637131 52.502847,29.636851 52.503405,29.636497 52.503748,29.635285 52.50495,29.634483 52.505808,29.632804 52.503641,29.631592 52.502053,29.629652 52.499628,29.628496 52.498126,29.629204 52.497783,29.629652 52.497482,29.630361 52.496774,29.631126 52.495594,29.632002 52.494242,29.632655 52.493577,29.633308 52.492912,29.63383 52.492869))')); 
INSERT INTO urbanpolygons (`id`, `name`, `paths`) VALUES ('2', 'area_2', ST_GeomFromText('POLYGON ((29.633084 52.486968,29.632748 52.488384,29.629055 52.489929,29.625176 52.49023,29.625138 52.489328,29.624579 52.487869,29.624467 52.487311,29.627078 52.485809,29.628831 52.484179,29.630249 52.482634,29.631144 52.482419,29.633084 52.486968))')); 
INSERT INTO urbanpolygons (`id`, `name`, `paths`) VALUES ('3', 'area_3', ST_GeomFromText('POLYGON ((29.622564 52.488553,29.624504 52.494046,29.626892 52.498853,29.630622 52.505204,29.632711 52.507436,29.628981 52.509153,29.624653 52.501085,29.620773 52.505376,29.616744 52.49645,29.617192 52.490956,29.622564 52.488553))')); 

私は、この点をしました:

GeomFromText('POINT(29.630528, 52.492461)') 

この時点では提供ポリゴンの外にあるが、私は最も近いポリゴンを取得したいですここまではarea_1です!

+1

表とデータをsqlfiddleで指定します。そして、mysqlのバージョン。 – Drew

+0

@Drew:sqlfiddleはmysql 5.6をサポートしていますが、それ以上ではなく、5.6.1で実装されたST_prefix関数のほとんどを実装しています! –

+1

ok挿入ブロック内の行のある場所のテキストファイルへの参照。 Googleのドライブ、何か。主に、私たちは同じデータについて話しています。 – Drew

答えて

0

最終的に私はそれをこのように扱うことができる:

幸いST_DISTANCE()機能は私たちに他の人に任意のジオメトリオブジェクトからの距離を提供します(私はポリゴンの最も近いエッジまでの点から計算ポイントとポリゴンの間の距離を信じて、テストしました!私が知っている)Googleマップの距離とST_DISTANCEから提供までの距離と

select id 
    from (select st_distance(paths,POINT(29.630528, 52.492461))as polyDistance,id from urbanpolygons)as nearestPoly 
    where polyDistance = (select MIN(st_distance(paths,POINT(29.630528, 52.492461))) from urbanpolygons); 

は少し複雑で、非効率的である、と私は任意のより良い解決策を学ぶこと熱望しています!

関連する問題