[OSM-ja] BLOG on OSM Japan
Kimiya FUJISAWA
fujisawa @ techstrom.org
2008年 6月 23日 (月) 19:10:25 BST
藤澤です。
#斜めにHTMLとjsファイルを辿っただけですが…
Hiroshi Miura wrote:
>
> あわせて、現在Japanサイトの地図表示
> http://www.openstreetmap.jp/showmap
> ですが、permalinkが正常に動作していません。
>
> これについて、何とかしたいのですが、
> JavaScriptに詳しい方の応援をいただけるとうれしいと
> おもいます。
本家の
http://www.openstreetmap.org/javascripts/site.js/1208610930
に相当するjavascriptファイルが抜けているのではないでしょうか。
中身がupdatelinks()関数で始まっているものです。
updatelinks()関数で、idがpermalinkanchorの中身を書き換えている
ように見えます。
機能すればなんでもよいのであれば、以下のように、showmapで定義されている
init()関数を変更して、3つほど関数を追加すれば機能するかと思います。
あと、permalinkのリンク先は、/ではなく/showmapに変更する必要が
あります。
//ここから
function init() {
map = new OpenLayers.Map("map", {
controls:[ new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.Attribution()],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution:156543.0399, units:'meters', projection:"EPSG:900913"} );
var layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
var layerTah = new OpenLayers.Layer.OSM.Osmarender("Tiles @ Home");
map.addLayers([layerTah,layerMapnik]);
//map.addLayer(layerTah);
map.addControl(new OpenLayers.Control.LayerSwitcher());
var args = getArgs(location.href);
if(args){
lon = args["lon"];
lat = args["lat"];
zoom = args["zoom"];
}
var lonLat = lonLatToMercator(new OpenLayers.LonLat(lon, lat));
map.setCenter (lonLat, zoom);
map.events.register("moveend", map, setPermaLink);
setPermaLink();
}
function setPermaLink(){
var lonlat = map.getCenter();
var zoom = map.getZoom();
node = document.getElementById("permalinkanchor");
if (node) {
var args = getArgs(node.href);
if(!args) args = new Object();
args["lat"] = Math.atan(Math.exp((lonlat.lat*180/20037508.34)*Math.PI/180))*360/Math.PI-90;
args["lon"] = lonlat.lon * 180/20037508.34;
args["zoom"] = zoom;
node.href = setArgs(node.href, args);
}
}
function getArgs(url) {
var args;
var querystart = url.indexOf("?");
if (querystart >= 0) {
args = new Object();
var querystring = url.substring(querystart + 1);
var queryitems = querystring.split("&");
for (var i = 0; i < queryitems.length; i++) {
if (match = queryitems[i].match(/^(.*)=(.*)$/)) {
args[unescape(match[1])] = unescape(match[2]);
} else {
args[unescape(queryitems[i])] = null
}
}
}
return args;
}
function setArgs(url, args) {
var queryitems = new Array();
for (arg in args)
{
if (args[arg] == null) {
queryitems.push(escape(arg));
} else {
queryitems.push(escape(arg) + "=" + escape(args[arg]));
}
}
return url.replace(/\?.*$/, "") + "?" + queryitems.join("&");
}
//ここまで
それと、divタグでid="map"が2箇所にあるので、下の方の
permalinkを囲っている方はとってしまった方がよいかと思います。
>
> OpenLayersをいじってみたい方、いましたら
> 教えてください。管理者権限を付与するので、
> サイトの地図を行けてる風にしていただけると
> うれしいです。
>
いけてる風かどうかわかりませんが、私は試しに手元のgpsdriveでの
mapnikのレンダリングで、trunk/primary/secondaryの道番号アイコンを
日本の形(丸まった逆三角形と六角形)に変えてみています。
アイコンファイルを用意して、osm.xmlを一部
書き換えるだけなので比較的簡単にできました。
--
@@@@@ 藤澤 公也 / Kimiya FUJISAWA
@// @@ mailto:fujisawa @ techstrom.org
@-O-O-@ work:fujisawa @ media.teu.ac.jp
\ ^ / mixi ID:10397871 http://www.techstrom.org/
Talk-ja メーリングリストの案内