| 基本的な JavaScript と HTML の例 |
function countLayers()
{
var map = getMap();
var layers = map.getMapLayersEx();
var cnt = layers.size();
alert(cnt);
}
function listLayers()
{
var map = getMap();
var layers = map.getMapLayersEx();
var cnt = layers.size();
var i;
var msg = "";
for (i = 0; i<cnt; i++)
{
var layer = layers.item(i);
msg = msg + layer.getName() + "\n";
}
alert(msg);
}
function doAddLayer()
{
var map = getMap();
map.addMapLayer("hydro.mlf", document.obs);
}
Autodesk MapGuide Author を使用して、特定の縮尺に対するマップ画層属性プロパティを設定することができます (『Autodesk MapGuide ユーザ ガイド』の「画層の属性プロパティを指定する」を参照)。 たとえば、ユーザが表示を縮小したときに、画層を非表示にすることができます。 Viewer API を使用すると、画層を複数の制御画層にリンクすることにより、機能を拡張することができます。 表示を縮小すると制御画層が非表示になるような場合、API を使用して、リンクされた画層も一緒に非表示にすることができます。 これを実現するには、この処理を行うコードを onViewChanging イベントに追加します。
function onViewChanging(map)
// States、Countries、ZIP Codes は、制御画層です。
// それらの 1 つが表示されると、他の画層も表示されます。
// それらの 1 つが非表示になると、他の画層も非表示になります。
{
var states = map.getMapLayer ("States");
var countries = map.getMapLayer("Countries");
var zipCodes = map.getMapLayer("ZIP Codes");
var vis = (states.getVisibility()||counties.getVisibility() || zipCodes.getVisibility());
var layers = map.getMapLayersEx();
for (var i=0; i<.size(); i++)
{
var layer = layers.item(i);
if (!layer.equals(states) && !layer.equals(counties) && !layer.equals(zipCodes))
{
layer.setVisibility(vis);
}
}
}
この例では、選択されたマップ フィーチャーのキーを表示するダイアログ ボックスを、doGetKey() 関数によって表示します。 フィーチャーが選択されていない場合は、警告が表示されます。
function doGetKey()
{
var map = getMap();
if (map.getSelection().getNumObjects() == 0)
{
alert ("Make selection first!");
return;
}
var sel = map.getSelection();
var objs = sel.getMapObjectsEx(null);
var cntObjects = objs.size();
var msg = "Keys of selected features are:\n";
for (i=0;i<cntObjects;i++)
{
var obj=objs.item(i);
var key=obj.getKey();
msg=msg + obj.getMapLayer().getName() + " " + key + "\n";
}
alert(msg);
}
この関数は、選択されたフィーチャーが特定のタイプ(次の例では、区画フィーチャー)の場合に、その座標を取得するコードの例です。
function doGetCoordinates()
{
var map=getMap();
// 選択されたオブジェクトを取得します
var sel=map.getSelection();
// 区画画層を取得します
var layer=map.getMapLayer("Parcels");
if (layer== null)
{
alert("No Parcels layer found in this map!");
return;
}
// 1 つの区画のみが選択されているか?
if ((sel.getNumObjects()> 1) || (sel.getNumObjects() == 0) || (sel.getMapObjectsEx(layer).size() == 0))
{
alert("Select only one parcel!");
return;
}
// 区画オブジェクトを取得します
var obj = sel.getMapObjectsEx(layer).item(0);
// 頂点のコレクションを取得します
var vertices = map.createObject("MGCollection");
var cntVertices = map.createObject("MGCollection");
var res = obj.getVertices(vertices, cntVertices);
if (res == 0)
{
alert("No access to coordinate information!");
return;
}
// 区画の座標を取得します
msg = "Parcel:" + obj.getKey() + "\n";
msg = msg + "Coordinates in MCS unit\n";
for(var i=0; i<cntVertices.item(0); i++)
{
var pnt=vertices.item(i);
msg=msg + pnt.getX() + "," + pnt.getY() + "\n";
}
alert(msg);
}
doSelectRadius() 関数は、マップのインスタンスを取得し、そのインスタンスを使用して、selectRadiusMode API メソッドを呼び出します。
function doSelectRadius()
{
var map = getMap();
map.selectRadiusMode();
}
function layerToggle(name)
{
var map = getMap();
var layer = map.getMapLayer(name);
if (layer == null)
alert("layer not found.");
else
layer.setVisibility(!layer.getVisibility());
map.refresh();
}
function zoomSelected()
{
var map = getMap();
var selected = map.getSelection().getMapObjectsEx(null);
if (selected.size()>0)
map.zoomSelected();
else
alert("nothing selected!");
}
function showObjectCount()
{
if (legendSet)
return;
var map = getMap();
if (!map.isBusy())
{
var layers = map.getMapLayersEx();
var cnt = layers.size();
var i;
var msg = "";
for (i = 0; i<cnt; i++)
{
var layer = layers.item(i);
var objectCount = layer.getMapObjectsEx().size();
var label = layer.getLegendLabel();
label = label + " " + objectCount + " features";
layer.setLegendLabel(label);
}
}
legendSet = true;
}
この例では、Autodesk MapGuide のバージョンをチェックし、Autodesk MapGuide Viewer Plug-In または Autodesk MapGuide Viewer, Java Edition に対応した適切なイベント オブザーバ アプレットをインストールする方法を示します。 Plug-In/Java Edition Downloads から MGDetectClass.zip ファイルをダウンロードすることができます。
<SCRIPT LANGUAGE="JavaScript">
// 検出アプレットを埋め込んで、Java Edition がインストールされているかどうかを調べます
document.write('<APPLET');
document.write(' CODEBASE="detect_class"');
document.write(' ARCHIVE="MGDetectClass.zip"');
document.write(' CODE=MGDetectClass');
// 検出結果を取得します
tempurl = document.URL;
index = tempurl.indexOf("DETECTED=");
result = tempurl.substring(index, tempurl.length);
if (result == "DETECTED=true")
{
// Java Edition がインストールされているので、Java Edition のオブザーバ アプレットを埋め込み、
// その名前を obsJava にします
document.write("<Applet CODE=\"MapGuideObserver6J.class\" WIDTH=2 HEIGHT=2 NAME=\"obsJava\" MAYSCRIPT>");
document.write("</Applet>");
// ページをロードしたら、ブラウザから onLoad 関数を自動的に呼び出します
// onLoad は MGMap から setSelectionChangedObserver メソッドを呼び出し、Java Edition に
// 選択変更イベントを処理するオブザーバ オブジェクトを渡します
function onLoad()
{
if (navigator.appName() == "Netscape")
getMap().setSelectionChangedObserver(document.obsJava);
}
function onSelectionChanged(map)
{
alert("Selection Changed");
}
}
// Java Edition はインストールされていないため、ブラウザが Netscape であるかどうかを確認します
else if (navigator.appName() == "Netscape")
{
// ブラウザは Netscape なので、Plug-In オブザーバ アプレットを埋め込みます
document.write("<Java Applet CODE=\"MapGuideObserver6.class\" WIDTH=2 HEIGHT=2 NAME=\"obs\" MAYSCRIPT>");
document.write("</Java Applet>");
function onLoad()
{
if (navigator.appName() == "Netscape")
getMap().setSelectionChangedObserver(document.obs);
}
function onSelectionChanged(map)
{
alert("Selection Changed");
}
}
</SCRIPT>
次の例では、HTML ページで Autodesk MapGuide Viewer, Java Edition を表示する <APPLET> タグの使用方法を示します。
<HTML>
<HEAD>
<TITLE>MapGuide Java Client Example</TITLE>
</HEAD>
<BODY>
<H2>Simple Invokation of Installed MapGuide Applet</H2>
<APPLET
WIDTH=500
HEIGHT=300
ALIGN="baseline"
CODE="com/autodesk/mgjava/MGMapApplet.class">
<PARAM
NAME="mwfUrl"
VALUE="http://www.mapguide.com/maps/usa.mwf">
</APPLET>