// tag for Google Maps with correct geoloc. ///// If LocaPoint is already in tag, it will NOT be converted. ///// If tag has LocaPoint in "href", this will be converted, too. ///// ///// Copyright 2005-2006 Locazing Inc. ///// Commercial use of this file need permission from Locazing Inc. ///// Non-profit purpose usage is free, and no need to contact to Locazing Inc. ///// ///// ///// V2.0 Option for various map site vender Options are following. ///// V2.1 Enable/Disable Switch ///// Avoid Global variable contamination. ///// V2.2 Convert LocaPoint in href attribute odf A tag, into Map URL. ///// V2.3 JavaScript Tuning for high performance. // // To Select Map vendor, set "?mapsite=******" as above // --PARAMETER-- --MAP SITE Name-- --Region-- // "googlemaps" Google Maps (default) World wide // "googlemapsjapan" Google Maps Japan World wide // "googlemapsuk" Google Maps UK World wide // "mapquest" Map Quest USA only // "yahoomap" Yahoo! Map USA onlu // "msnmap" MSN Map and Directions USA only // "mapion" Mapion Japan only // "navitime" Navitime Japan only // "mapfan" MapFan Japan only // "yahoomapjapan" Yahoo! Japan Map Japan only // "itsmoguide" It's-mo Guide (zenrin) Japan only // "goomap" Goo Map Japan only // "livedoormap" Livedoor Map Japan only // "chizumaru" Chizumaru Japan only // "msnmapjapan" MSN Japan Map Japan only /////////////////////////////////////////////////////////////////////////// /////Configuration Constant //if you download this file and use locally, modify following lines. var LPLinkifyObj = new Object(); LPLinkifyObj.AutoLinkify = true; LPLinkifyObj.LinkifyMapSite = ""; //Add Event to onload (not overwrite) if (LPLinkifyObj.AutoLinkify) { //Attach LinkifyLocaPoint to Window.Onload if (window.addEventListener) {// W3C DOM window.addEventListener("load", LinkifyLocaPoint, false); }else if (window.attachEvent) {// Internet Explorer window.attachEvent("onload", LinkifyLocaPoint); } } function LinkifyLocaPoint(){ if(window.LPTB){ //If LocaPoint toolbar is installed, toolbar has priority return; } //Functions for each mapsite. put here for performance var Deg2mapURLfuncs = new Object; var isGoogle = false; switch (LPLinkifyObj.LinkifyMapSite) { case "mapion": //OK Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; // http://www.mapion.co.jp/c/f?uc=1&grp=all&nl=34/37/43.719&el=135/37/08.946&scl=25000&bid=Mlink geoloc = WGS84toTOKYO(geoloc); geoloc = locVariation(geoloc); urlstr += "www.mapion.co.jp/c/f?uc=1&grp=all&"; urlstr += "nl=" + numformat(geoloc.int_latd, 2, 0) + "/" + numformat(geoloc.int_latm, 2, 0) + "/" + numformat(geoloc.float_lats, 2, 3); urlstr += "&el=" + numformat(geoloc.int_lond, 3, 0) + "/" + numformat(geoloc.int_lonm, 2, 0) + "/" + numformat(geoloc.float_lons, 2, 3); urlstr += "&scl=25000&bid=Mlink" return(urlstr); }; break; case "navitime": //OK Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; // http://www.navitime.co.jp/map/index.jsp?datum=1&unit=0&lat=+34.42.8.545&lon=+135.31.17.604 // http://www.navitime.co.jp/map/index.jsp?datum=1&unit=0&lat=+34.37.31.765&lon=+135.36.14.499 geoloc = WGS84toTOKYO(geoloc); geoloc = locVariation(geoloc); urlstr += "www.navitime.co.jp/map/index.jsp?datum=1&unit=0&"; urlstr += "lat=" + (geoloc.int_latd>=0?"+":"-") + Math.abs(geoloc.int_latd) + "." + geoloc.int_latm + "." + numformat(geoloc.float_lats, 0, 3); urlstr += "&lon=" + (geoloc.int_lond>=0?"+":"-") + Math.abs(geoloc.int_lond) + "." + geoloc.int_lonm + "." + numformat(geoloc.float_lons, 0, 3); return(urlstr); }; break; case "mapfan": //OK Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; //http://kokomail.mapfan.com/receivew.cgi?MAP=E135.43.13.6N34.32.3.2&ZM=11&CI=R geoloc = WGS84toTOKYO(geoloc); geoloc = locVariation(geoloc); urlstr += "kokomail.mapfan.com/receivew.cgi?MAP="; urlstr += (geoloc.int_lond >=0 ?"E":"W") + geoloc.int_lond + "." + geoloc.int_lonm + "." + numformat(geoloc.float_lons, 0, 1); urlstr += ((geoloc.int_lond >=0 ?"N":"S")) + geoloc.int_latd + "." + geoloc.int_latm + "." + numformat(geoloc.float_lats, 0, 1); urlstr += "&ZM=11&CI=R"; return(urlstr); }; break; case "yahoomapjapan": //OK Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; //http://map.yahoo.co.jp/pl?nl=34.32.4.798&el=135.43.12.453&CE.x=282&CE.y=300&sc=2&la=1 geoloc = WGS84toTOKYO(geoloc); geoloc = locVariation(geoloc); urlstr += "map.yahoo.co.jp/pl?"; urlstr += "nl=" + geoloc.int_latd + "." + geoloc.int_latm + "." + numformat(geoloc.float_lats, 0, 3); urlstr += "&el=" + geoloc.int_lond + "." + geoloc.int_lonm + "." + numformat(geoloc.float_lons, 0, 3); urlstr += "&CE.x=282&CE.y=300&sc=2"; return(urlstr); }; break; case "yahoomap": //Under R&D Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; //http://maps.yahoo.com/beta/index.php#mvt=m&maxp=search&trf=0&lon=-105.058308&lat=39.849074&mag=5 urlstr += "maps.yahoo.com/beta/index.php#mvt=m&maxp=search&trf=0"; urlstr += "&lon=" + longitude ; urlstr += "&lat=" + latitude ; return(urlstr); }; break; case "itsmoguide": //OK Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; //http://www.its-mo.com/z.htm?m=E135.29.55.355N34.41.57.286&l=10 //http://mobile.its-mo.com/MapToLink/p1?c=6&sid=00320&n=34.534269444444&e=135.72043611111&x=5 <--- From Mobile ONLY geoloc = WGS84toTOKYO(geoloc); geoloc = locVariation(geoloc); urlstr += "www.its-mo.com/z.htm?m="; urlstr += (geoloc.int_lond >=0 ?"E":"W") + geoloc.int_lond + "." + geoloc.int_lonm + "." + numformat(geoloc.float_lons, 0, 3); urlstr += (geoloc.int_lond >=0 ?"N":"S") + geoloc.int_latd + "." + geoloc.int_latm + "." + numformat(geoloc.float_lats, 0, 3); urlstr += "&ZM=11&CI=R"; return(urlstr); }; break; case "goomap": //OK Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; //http://map.goo.ne.jp/map.php?MAP=E135.43.23.560N34.31.55.780&ZM=&SZ=&sw=1&C1=29&C2=210&POSTAL= geoloc = WGS84toTOKYO(geoloc); geoloc = locVariation(geoloc); urlstr += "map.goo.ne.jp/map.php?MAP="; urlstr += (geoloc.int_lond >=0 ?"E":"W") + geoloc.int_lond + "." + geoloc.int_lonm + "." + numformat(geoloc.float_lons, 0, 3); urlstr += (geoloc.int_lond >=0 ?"N":"S") + geoloc.int_latd + "." + geoloc.int_latm + "." + numformat(geoloc.float_lats, 0, 3); urlstr += "&ZM=11&CI=R"; return(urlstr); }; break; case "livedoormap": //OK Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; //http://map.livedoor.com/map/?SZ=500,320&ZM=10&MAP=E135.43.13.7N34.32.3.1 geoloc = WGS84toTOKYO(geoloc); geoloc = locVariation(geoloc); urlstr += "map.livedoor.com/map/?SZ=500,320&ZM=10&MAP="; urlstr += (geoloc.int_lond >=0 ?"E":"W") + geoloc.int_lond + "." + geoloc.int_lonm + "." + numformat(geoloc.float_lons, 0, 1); urlstr += (geoloc.int_lond >=0 ?"N":"S") + geoloc.int_latd + "." + geoloc.int_latm + "." + numformat(geoloc.float_lats, 0, 1); urlstr += "&ZM=11&CI=R"; return(urlstr); }; break; case "chizumaru": //OK Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; //http://www.chizumaru.com/maplink.asp?SER=all&D=all&X=…&Y=…&SCL=… geoloc = WGS84toTOKYO(geoloc); geoloc = locVariation(geoloc); urlstr += "www.chizumaru.com/maplink.asp?SER=all&D=all"; urlstr += "&" + (geoloc.int_lond >=0 ?"E":"W") + "=" + geoloc.int_lond + "." + geoloc.int_lonm + "." + numformat(geoloc.float_lons, 0, 3); urlstr += "&" + (geoloc.int_lond >=0 ?"N":"S") + "=" + geoloc.int_latd + "." + geoloc.int_latm + "." + numformat(geoloc.float_lats, 0, 3); urlstr += "&SCL=500"; return(urlstr); }; break; case "msnmapjapan": //OK ???looks like lat and lon is opposite ?? Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; //http://map.msn.co.jp/mapmarking.armx?mode=1&la=139.44.55.9&lg=35.39.19.2&zm=10&smode=1 geoloc = WGS84toTOKYO(geoloc); geoloc = locVariation(geoloc); urlstr += "map.msn.co.jp/mapmarking.armx?mode=1"; urlstr += "&la=" + geoloc.int_lond + "." + geoloc.int_lonm + "." + numformat(geoloc.float_lons, 0, 1); urlstr += "&lg=" + geoloc.int_latd + "." + geoloc.int_latm + "." + numformat(geoloc.float_lats, 0, 1); urlstr += "&zm=9&smode=1"; return(urlstr); }; break; case "msnmap": //OK Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; //http://maps.msn.com/map.aspx?C=40.689204730670525,-74.04465637740694&L=USA&A=6 urlstr += "maps.msn.com/map.aspx?C="; urlstr += geoloc.latitude + "," + geoloc.longitude; urlstr += "&L=USA&A=6" return(urlstr); }; break; case "mapquest": //OK Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; //http://www.mapquest.com/maps/map.adp?searchtype=address&formtype=latlong&latlongtype=decimal&latitude=45.3569&longitude=-90.5484 urlstr += "www.mapquest.com/maps/map.adp?searchtype=address&formtype=latlong&latlongtype=decimal"; urlstr += "&latitude=" + geoloc.latitude ; urlstr += "&longitude=" + geoloc.longitude ; return(urlstr); }; break; case "googlemapsjapan": //OK isGoogle = true; Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; // http://maps.google.co.jp/?q=+35.123456,+135.123456(SA2.WU4.ZZ9.ZZ9) urlstr += "maps.google.co.jp/?q=" + geoloc.latitude + "," + geoloc.longitude + "(" + comment + ")"; return(urlstr); }; break; case "googlemapsuk": //OK isGoogle = true; Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; // http://maps.google.co.uk/?q=+35.123456,+135.123456(SA2.WU4.ZZ9.ZZ9) urlstr += "maps.google.co.uk/?q=" + geoloc.latitude + "," + geoloc.longitude + "(" + comment + ")"; return(urlstr); }; break; case "googlemaps": //OK //break; same as default default: //default is googleMaps isGoogle = true; Deg2mapURLfuncs.funcs = function(geoloc, comment){ var urlstr = "http://"; // http://maps.google.com/?q=+35.123456,+135.123456(SA2.WU4.ZZ9.ZZ9) urlstr += "maps.google.com/?q=" + geoloc.latitude + "," + geoloc.longitude + "(" + comment + ")"; return(urlstr); }; } //Linkify Main Logic var d = document; d.body.normalize(); F(d.body); //remove onload event for performance if (window.removeEventListener) { window.removeEventListener("load", LinkifyLocaPoint, false); } else if (window.detachEvent) { window.detachEvent("onload", LinkifyLocaPoint); } //end of logic function F(n){ var u,A,M,R,c,x,geoloc, replaceflag, nodetype=n.nodeType, tagname=n.tagName; if(nodetype==3){ u=n.data.search(/([A-Z]{2}\d\.){3}[A-Z]{2}\d/); if(u>=0) { M=n.splitText(u); geoloc = Locapoint2LatLon(M.data); if(M.data.length>15){ //append replaceflag=false; R=M.splitText(15); }else{ replaceflag=true; R = d.createElement("span");//dummy M.parentNode.replaceChild(R, M); } A=d.createElement("A"); A.setAttribute("href", Deg2mapURLfuncs.funcs(geoloc, M.data) ); A.setAttribute("title", "lat,lon= " + geoloc.latitude + "," + geoloc.longitude); A.appendChild(M); if(replaceflag==true){ R.parentNode.replaceChild(A,R) }else{ R.parentNode.insertBefore(A,R); } } }else if(tagname=="A"){ //Version 2.X LocaPoint in Anchor.href --> MapURL var hrefatt = n.getAttribute("href"); var hrefattlen = hrefatt.length; if (hrefatt.match(/([A-Z]{2}\d\.){3}[A-Z]{2}\d$/)){ hrefatt = hrefatt.substr(hrefattlen - 15, 15); var geoloc = Locapoint2LatLon(hrefatt); if(isGoogle){ //GoogleならコメントにTEXTノードの内容を入れる hrefatt = encodeURIComponent(n.firstChild.data); } n.setAttribute("href", Deg2mapURLfuncs.funcs(geoloc, hrefatt) ); n.setAttribute("title", "lat,lon= " + geoloc.latitude + "," + geoloc.longitude); } }else if(tagname!="STYLE" && tagname!="SCRIPT" && tagname!="A"){ for(c=0;x=n.childNodes[c];++c){ F(x); } } } function WGS84toTOKYO(geoloc){ var geolocTokyo = new Object(); geolocTokyo.latitude = geoloc.latitude -0 + 0.00010696 * geoloc.latitude - 0.000017467 * geoloc.longitude - 0.004602; geolocTokyo.longitude = geoloc.longitude -0 + 0.000046047 * geoloc.latitude -0 + 0.000083049 * geoloc.longitude - 0.010041; return(geolocTokyo); } function numformat(floatnum, zerofilldigit, underdecidigit){ var intpart, underdecipart, retstr; if (floatnum == ""){floatnum = "0";} //prevent error floatnum = floatnum + ""; //to string var decipos = floatnum.indexOf("."); if (decipos > 0) { var part = floatnum.split("."); intpart = part[0]; underdecipart = part[1]; }else{ intpart = floatnum; underdecipart = ""; } //left zerofill if(zerofilldigit > 0){ intpart = "" + intpart; //string if(zerofilldigit == ""){zerofilldigit = 0;}; for(var n=0; n < zerofilldigit; n++){ intpart = "0" + intpart; } intpart = intpart.substr(intpart.length - zerofilldigit, zerofilldigit); } retstr = intpart; //under decimal digit if(underdecidigit > 0){ for(var n=0; n < underdecidigit; n++){ underdecipart += "0"; } underdecipart = underdecipart.substr(0, underdecidigit); retstr += "." + underdecipart; } return(retstr); } function locVariation(geoloc){ var lat = geoloc.latitude; var latabs = Math.abs(lat); var int_latd = Math.floor(latabs); var float_latm = (latabs - int_latd) * 60; var int_latm = Math.floor(float_latm); var float_lats = (float_latm - int_latm) * 60; if(lat < 0){ int_latd = int_latd * (-1); } var lon = geoloc.longitude; var lonabs = Math.abs(lon); var int_lond = Math.floor(lonabs); var float_lonm = (lonabs - int_lond) * 60; var int_lonm = Math.floor(float_lonm); var float_lons = (float_lonm - int_lonm) * 60; if(lon < 0){ int_lond = int_lond * (-1); } geoloc.latabs = latabs; geoloc.int_latd = int_latd; geoloc.float_latm = float_latm; geoloc.int_latm = int_latm; geoloc.float_lats = float_lats; geoloc.lonabs = lonabs; geoloc.int_lond = int_lond; geoloc.float_lonm = float_lonm; geoloc.int_lonm = int_lonm; geoloc.float_lons = float_lons; return(geoloc); } //common functions function Locapoint2LatLon(locapoint){ var geoloc = new Object(); geoloc.latitude =( ((locapoint.charCodeAt(0)-65)*1757600 +(locapoint.charCodeAt(1)-65)*67600 +(locapoint.charCodeAt(2)-48)*6760 +(locapoint.charCodeAt(8)-65)*260 +(locapoint.charCodeAt(9)-65)*10 +(locapoint.charCodeAt(10)-48)) *180/45697600-90).toFixed(6); geoloc.longitude = ( ((locapoint.charCodeAt(4)-65)*1757600 +(locapoint.charCodeAt(5)-65)*67600 +(locapoint.charCodeAt(6)-48)*6760 +(locapoint.charCodeAt(12)-65)*260 +(locapoint.charCodeAt(13)-65)*10 +(locapoint.charCodeAt(14)-48) ) *360/45697600-180).toFixed(6); return(geoloc); } function LatLon2Locapoint(lat, lon){ var latstep=Math.floor(((lat-(-90))*45697600/180)); var lngstep=Math.floor(((lon-(-180))*45697600/360)); var locapoint=String.fromCharCode( Math.floor(latstep/1757600%26)+65, Math.floor(latstep/67600%26)+65, Math.floor(latstep/6760%10)+48, 46, Math.floor(lngstep/1757600%26)+65, Math.floor(lngstep/67600%26)+65, Math.floor(lngstep/6760%10)+48, 46, Math.floor(latstep/260%26)+65, Math.floor(latstep/10%26)+65, Math.floor(latstep%10)+48, 46, Math.floor(lngstep/260%26)+65, Math.floor(lngstep/10%26)+65, Math.floor(lngstep%10)+48 ); return(locapoint); } } //]]>