WMS の Plain Openlayes でマップ プロジェクトを行っています。ローカル サーバーは Oracle Virtual Box の Debian_x64 で、マップ サーバーは National Land Survey Finland です。リクエストと投票の例は、http://www.maanmittauslaitos.fi/aineistot-palvelut/rajapintapalvelut/rasteriaineistojen-palvelurajapinta-wms/kayttoonotto/kyselyt-esで入手できます。GetCapabilities リクエストを正常に完了し、XML レスポンスを取得しました。その XML 応答に基づいて、GetMap でマップ レイヤーを取得しようとしました。Map パラメーターは、取得した XML 応答に従って割り当てられます。問題は次のとおりです。
- BoundingBox には「 resx と resy」というパラメーターがあります。私が行っていることのためにそれらを利用する必要がありますか?もしそうなら、どのように?
- Chrome 開発者ツールでコンソールを監視したところ、次のエラーが返されました。
Failed to load resource: the server responded with a status of 401 (Unauthorized) https://ws.nls.fi/rasteriaineistot/image?LAYERS=yleiskartta_12m&VERSION=1.1.1&FORMAT=image%2Fpng&REQUEST=GetMap&TRANSPARENT=FALSE&STYLES=light&SERVICE=WMS&SRS=EPSG%3A4326&BBOX=0,45,45,90&WIDTH=256&HEIGHT=256
...同時にピンクのタイルが読み込まれます。Openlayers.js 、 style.css 、および index.php と同じフォルダーにある、ユーザー名とパスワードを使用した HTTPS 基本認証に Php cURL プロキシ「proxy.php」を使用しました。割り当てているプロキシが正常に機能していない可能性はありますか? または、同じ起源のポリシーの問題がある可能性がありますか?ユーザー名とパスワードは有効です。この問題を解決するにはどうすればよいですか? 誰かがコード例を提供してくれると非常に役に立ちます。
私のproxy.phpファイルは次のとおりです。
$string = $_GET['url'];
$urli = urldecode($string);
$url = $urli;
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD,"user:pass");
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
$type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$im = imagecreatefromstring($data);
if ($type == "image/jpeg") {
header('Content-Type: image/jpeg');
imagejpeg($im);
} else if ($type == "image/png") {
header('Content-Type: image/png');
imagepng($im);
} else if ($type == "image/gif") {
header('Content-Type: image/gif');
imagegif($im);
} else if ($type == "text/xml") {
header('Content-Type: text/xml');
print_r($data);
}
imagedestroy($im);
curl_close($ch);
exit;
and the index.php is as following
function init() {
var map = new OpenLayers.Map('map',options)
var request = OpenLayers.Request.GET({
url:"https://ws.nls.fi/rasteriaineistot/image?",
params: {service:"WMS",
version:"1.1.1",
format:"text/xml",
request:"GetCapabilities"},
proxy: "queryboth.php?url=",
async: false,
callback: handler
} );
function handler(request) {
console.log(request);
// alert(request.responseText);
// alert(request.status);
// alert(request.getAllResponseHeaders());
}
// Here I set my ProxyHost could it be some mistake here
OpenLayers.ProxyHost = "proxy.php?url=";
var layer = new OpenLayers.Layer.WMS("yleiskartta",
"https://ws.nls.fi/rasteriaineistot/image?",
{
layers: "yleiskartta_12m",
version:"1.1.1",
format: "image/png",
request: "GetMap",
transparent: false,
styles:"light"
},
{
isBaseLayer: true,
opacity: 1
}
);
var options = {
sphericalMercator: true,
projection: new OpenLayers.Projection("EPSG:3067"),
maxExtent: new OpenLayers.Bounds(-380688,6247443,1347312,8227443),
minScale: 2121.32,
maxScale: 8485.28,
units: "m",
numZoomLevels: 6
};
map.addLayers([layer]);
map.zoomToMaxExtent();
map.addControl( new OpenLayers.Control.LayerSwitcher() );
}
xml の 1 つのレイヤーの応答は次のとおりです (申し訳ありませんが、タグを削除しました)。
Layer opaque="1"
Name:yleiskartta_12m
Title : Yleiskarttarasteri 1:12 milj
LatLonBoundingBox minx="1.21" miny="55.57" maxx="51.93" maxy="71.79"
BoundingBox SRS="EPSG:3067" minx="-380688" miny="6247443" maxx="1347312" maxy="8227443" resx="1500.0" resy="1500.0"
BoundingBox SRS="EPSG:2393" minx="2619125.63" miny="6250068.42" maxx="4347827.2" maxy="8147483.65" resx="1500.0" resy="1500.0"
ScaleHint min="2121.32" max="8485.28"
</Layer>
</pre>