ホームページ > 記事 > ウェブフロントエンド > OPENLAYERS3 でクリック選択を実装するにはどのような方法がありますか?
WebGIS 開発では、クリック クエリが最も一般的に使用されるクエリ メソッドです。ArcGIS API では、このクエリは IdentifyTask と呼ばれ、その主な機能はフロント デスクでパラメーターを送信し、クエリ分析のために ArcServer に返すことです。この記事では、フロント デスクからサーバー、データベースに至るまで、オープン ソース フレームワークの観点からさまざまな方法でクリック クエリを実装します。乾いた情報は次のとおりです。
1.1 SelectController
ベクトル データの場合、Ol3 の公式 Web サイトのデモでは、マウス選択クエリを実装するための Select コントロールが提供されています。 コードは次のとおりです。
1.2 マップクリックイベントこのメソッドは、マウスクリックの座標を使用して、現在のベクター画像レイヤーとの交差分析クエリを実行し、クエリされた要素とそれらが属するLayerオブジェクトを取得します
//地图单机事件 map.on('singleclick',mapClick); function mapClick(e){ var pixel = map.getEventPixel(e.originalEvent); var featureInfo = map.forEachFeatureAtPixel(pixel, function (feature, layer) { return {feature:feature,layer:layer}; }); if (featureInfo!==undefined&&featureInfo!==null &&featureInfo.layer!==null) { console.log('打印选择要素'); console.log(featureInfo .feature); console.log('打印选择要素所属Layer'); console.log(featureInfo .layer); } }1.4 Geoserver の wfs を介したクエリ
attribute クエリまたは空間クエリを実行するために、フィルターを介して条件またはグラフィックスを送信できます。この段落では、wfs クエリの使用方法を説明するためにドライな情報を使用します。
pg を実装する方法は、最も簡単に使用できるはずです。クリックされた地理座標をバックグラウンドに送信し、実行のためにデータベースに送信します。
map.on('click',mapClick); //点击地图查询 function mapClick(evt) { var coor=evt.coordinate; coor=coor.join(','); //注意这里直接将点坐标提交,与图层做intersrct分析,对于面图层是没关系的。如果是查询,点或者线图形,一定要将coor先设置一个容差,经行buffer之后的图形,再去与图层叠加分析。不设置容差几乎就找不到了 //图层的图形字段是geom,不同图层的图形字段都要自己先看下自己的,有的是the_geom,有的是shape等等,具体分析即可。 var FILTER='<Filter xmlns="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><Intersects><PropertyName>geom</PropertyName><gml:Point><gml:coordinates>'+coor+'</gml:coordinates></gml:Point> </Intersects></Filter>'; getFeature({ typename:'road:road_grid',//查询的服务图层名称 filter:FILTER,//查询条件 callback:'getIdentifyroadGrid'//查询的回调函数 }); } var geojsonFormat=new ol.format.GeoJSON({defaultDataProjection:"EPSG:3857"}); function getIdentifyroadGrid(res) { var features=geojsonFormat.readFeatures(res); console.log('点击查询返回的结果如下:'); console.log(features); } //请求wfs数据 function getFeature(options) { $.ajax(gisserverhost+'geoserver/wfs',{ type: 'GET', data: { service: 'WFS', version: '1.1.0', request: 'GetFeature', typename: options.typename, srsname: options.srid, outputFormat: 'text/javascript', viewparams:options.viewparams, bbox:(options.extent===undefined)?undefined:options.extent.join(',') + ','+options.srid, filter:options.filter }, dataType: 'jsonp', jsonpCallback:'callback:'+options.callback, jsonp:'format_options' }); }
次のように SQL を実行します:
select * from t where ST_Intersect(t.geom,ST_GeomfromText('Point(x y)',3857)); 完了!
まとめ
類推と統合によって、問題を解決する方法はたくさんあるはずです。もちろん、異なる道路は同じ目的を持っており、景色は同じです。もちろん違う。少なくとも 5 つの方法を使用して、クリック クエリの結果を取得することができました。そうなると、ほとんどの人は、5 つの方法のうちどれが優れていてどれが悪いのか疑問に思うでしょう。 実際、方法に良い悪いはなく、単にそれが適切かどうかだけです。
1 1 番目と 2 番目の方法: ベクトル データは、wms レイヤーの場合は使用する前にマップ クライアントに追加する必要があります。 2 3 番目の方法: wms レイヤー。現時点では、最初の 2 つのベクトル方法はこの問題を解決できません。
4 5 番目の方法: 4 番目の方法と同じですが、ビジネス ニーズが異なるため、データが公開されずにデータベースに残るだけで、クエリする必要がある場合があります。この場合、5 番目の方法で十分です。 。もちろん、データベース内のメソッドは一般に、大量のデータや複雑なトランザクション クエリで使用する方が適しています。シングルクリックのクエリは少しやりすぎです。
以上がOPENLAYERS3 でクリック選択を実装するにはどのような方法がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。