Рабочий пример совместной работы Visual studio и OL:
Код: Выделить всё
PROCEDURE F3GOROD
SELECT KATPER
XBMPFILE=BMPFILE
XCODEKART=CODEKARTA
TIK7=2
XF3GOROD=0
SCATTER MEMVAR
SET DECIMALS TO 18
pipi=3.141592653589793238462
M.Long = M.Long * 20037508.34/180
M.Lat = log(tan((90 + M.Lat) * pipi / 360)) / (pipi / 180)
M.Lat = M.Lat * 20037508.34 / 180
TEXT TO lcHtml NOSHOW TEXTMERGE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Смоленск</title>
<meta http-equiv='imagetoolbar' content='no'/>
<style type="text/css"> v\:* {behavior:url(#default#VML);}
html, body { overflow: hidden; padding: 0; height: 100%; width: 100%; font-family: 'Lucida Grande',Geneva,Arial,Verdana,sans-serif; }
body { margin: 10px; background: #fff; }
h1 { margin: 0; padding: 6px; border:0; font-size: 20pt; }
#header { height: 43px; padding: 0; background-color: #eee; border: 1px solid #888; }
#subheader { height: 12px; text-align: right; font-size: 10px; color: #555;}
#map { height: 95%; border: 1px solid #888; }
</style>
<script src="file://localhost/c:/_transport/OpenLayers-2.9.1/OpenLayers-2.9.1/lib/OpenLayers.js" type="text/javascript"></script>
<script type="text/javascript">
var map;
var mapBounds = new OpenLayers.Bounds( 3510928.9959, 7298658.69525, 3598060.05994, 7360004.41386);
var mapMinZoom = 0;
var mapMaxZoom = 9;
// avoid pink tiles
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
OpenLayers.Util.onImageLoadErrorColor = "transparent";
function init(){
var options = {
controls: [],
maxExtent: new OpenLayers.Bounds( 3510928.9959, 7298658.69525, 3598060.05994, 7360004.41386 ),
maxResolution: 393.645920,
numZoomLevels: 10
};
map = new OpenLayers.Map('map', options);
var layer = new OpenLayers.Layer.TMS( "TMS Layer","file://localhost/c:/_map2010/sm_mercat84/",
{ url: '', serviceVersion: '.', layername: '.', alpha: true,
type: 'png', getURL: overlay_getTileURL
});
map.addLayer(layer);
map.zoomToExtent( mapBounds );
map.addControl(new OpenLayers.Control.PanZoomBar());
map.addControl(new OpenLayers.Control.MousePosition());
map.addControl(new OpenLayers.Control.MouseDefaults());
map.addControl(new OpenLayers.Control.KeyboardDefaults());
map.setCenter(new OpenLayers.LonLat(<<ALLTRIM(STR(M.Long,12,6))>>,
<<ALLTRIM(STR(M.Lat,12,6))>>),<<TRANSFORM(8)>>);
// allow testing of specific renderers via "?renderer=Canvas", etc
var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
var vectorLayer = new OpenLayers.Layer.Vector("Simple Geometry", {
styleMap: new OpenLayers.StyleMap({'default':{
strokeColor: "#00FF00",
strokeOpacity: 1,
strokeWidth: 3,
fillColor: "#FF5500",
fillOpacity: 0.5,
pointRadius: 4,
pointerEvents: "visiblePainted",
label : " ${nam1}",
fontColor: "${favColor}",
fontSize: "14px",
fontFamily: "Courier New, monospace",
fontWeight: "bold",
labelAlign: "${align}",
labelXOffset: "${xOffset}",
labelYOffset: "${yOffset}"
}}),
renderers: renderer
});
// create a point feature
var point = new OpenLayers.Geometry.Point(<<ALLTRIM(STR(M.Long,12,6))>>,<<ALLTRIM(STR(M.Lat,12,6))>>);
var pointFeature = new OpenLayers.Feature.Vector(point);
pointFeature.attributes = {
nam1: "<<strconv(ALLTRIM(m.name),9,1049)>>",
favColor: 'red',
align: "cm",
// positive value moves the label to the right
xOffset: 60,
// negative value moves the label down
yOffset: -15
};
map.addLayer(vectorLayer);
vectorLayer.addFeatures([pointFeature]);
}
function overlay_getTileURL(bounds) {
var res = this.map.getResolution();
var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
var y = Math.round((bounds.bottom - this.maxExtent.bottom) / (res * this.tileSize.h));
var z = this.map.getZoom();
if (x >= 0 && y >= 0) {
return this.url + z + "/" + x + "/" + y + "." + this.type;
} else {
return "http://www.maptiler.org/img/none.png";
}
}
function getWindowHeight() {
if (self.innerHeight) return self.innerHeight;
if (document.documentElement && document.documentElement.clientHeight)
return document.documentElement.clientHeight;
if (document.body) return document.body.clientHeight;
return 0;
}
function getWindowWidth() {
if (self.innerWidth) return self.innerWidth;
if (document.documentElement && document.documentElement.clientWidth)
return document.documentElement.clientWidth;
if (document.body) return document.body.clientWidth;
return 0;
}
function resize() {
var map = document.getElementById("map");
map.style.height = (getWindowHeight()-10) + "px";
map.style.width = (getWindowWidth()-10) + "px";
if (map.updateSize) { map.updateSize(); };
}
onresize=function(){ resize(); };
</script>
</head>
<body onload="init()">
<div id="map" style="height: 700px; z-index: 1; width: 990px; position: absolute; top: 3px; left: 200px;"></div>
</body>
</html>
ENDTEXT
STRTOFILE(lcHtml,"MiHtml.htm")
THISFORM.oleIE.Navigate2(FULLPATH("MiHtml.htm"))
IF XXSPRAV=3
SELECT katper
ENDIF
RETURN
Тект MiHtml.htm:
Код: Выделить всё
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Смоленск</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<style type="text/css"> v\:* {behavior:url(#default#VML);}
html, body { overflow: hidden; padding: 0; height: 100%; width: 100%; font-family: Arial, Helvetica, sans-serif; }
body { margin: 10px; background: #fff; }
h1 { margin: 0; padding: 6px; border:0; font-size: 20pt; }
#header { height: 43px; padding: 0; background-color: #eee; border: 1px solid #888; }
#subheader { height: 12px; text-align: right; font-size: 10px; color: #555;}
#map { height: 95%; border: 1px solid #888; }
</style>
<script src="file://localhost/c:/_transport/OpenLayers-2.9.1/OpenLayers-2.9.1/lib/OpenLayers.js" type="text/javascript"></script>
<script type="text/javascript">
var map;
var mapBounds = new OpenLayers.Bounds( 3539261.38567, 7269311.58712, 3586037.98224, 7296133.88638 );
var mapMinZoom = 1;
var mapMaxZoom = 9;
// avoid pink tiles
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
OpenLayers.Util.onImageLoadErrorColor = "transparent";
function init(){
var options = {
controls: [],
maxExtent: new OpenLayers.Bounds( 3539261.38567, 7269311.58712, 3586037.98224, 7296133.88638 ),
maxResolution: 225.144348,
numZoomLevels: 10
};
map = new OpenLayers.Map('map', options);
var layer = new OpenLayers.Layer.TMS( "TMS Layer","file://localhost/c:/map2011/",
{ url: '', serviceVersion: '.', layername: '.', alpha: true,
type: 'png', getURL: overlay_getTileURL
});
map.addLayer(layer);
map.zoomToExtent( mapBounds );
map.addControl(new OpenLayers.Control.PanZoomBar());
map.addControl(new OpenLayers.Control.MousePosition());
map.addControl(new OpenLayers.Control.MouseDefaults());
map.addControl(new OpenLayers.Control.KeyboardDefaults());
map.addControl(new OpenLayers.Control.Permalink());
map.addControl(new OpenLayers.Control.Permalink('permalink'));
map.setCenter(new OpenLayers.LonLat(3574015.1106,
7283322.9051),8.000000000000000000);
// allow testing of specific renderers via "?renderer=Canvas", etc
var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
var vectorLayer = new OpenLayers.Layer.Vector("Simple Geometry", {
styleMap: new OpenLayers.StyleMap({'default':{
strokeColor: "#00FF00",
strokeOpacity: 1,
strokeWidth: 3,
fillColor: "#FF5500",
fillOpacity: 0.5,
pointRadius: 4,
pointerEvents: "visiblePainted",
label : " ${nam1}",
// fontColor: "${favColor}",
fontColor: "#FF5500",
fontSize: "14px",
fontFamily: "Times New Roman",
fontWeight: "bold",
labelAlign: "${align}",
labelXOffset: "${xOffset}",
labelYOffset: "${yOffset}"
}}),
renderers: renderer
});
// create a point feature
var point = new OpenLayers.Geometry.Point(3574015.1106,7283322.9051);
var pointFeature = new OpenLayers.Feature.Vector(point);
pointFeature.attributes = {
nam1: "ЭЛИТИС, ООО/3574015.1106/7283322.9051",
favColor: 'red',
align: "cm",
// positive value moves the label to the right
xOffset: 60,
// negative value moves the label down
yOffset: -15
};
map.addLayer(vectorLayer);
vectorLayer.addFeatures([pointFeature]);
}
function overlay_getTileURL(bounds) {
var res = this.map.getResolution();
var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
var y = Math.round((bounds.bottom - this.maxExtent.bottom) / (res * this.tileSize.h));
var z = this.map.getZoom();
if (x >= 0 && y >= 0) {
return this.url + z + "/" + x + "/" + y + "." + this.type;
} else {
return "http://www.maptiler.org/img/none.png";
}
}
function getWindowHeight() {
if (self.innerHeight) return self.innerHeight;
if (document.documentElement && document.documentElement.clientHeight)
return document.documentElement.clientHeight;
if (document.body) return document.body.clientHeight;
return 0;
}
function getWindowWidth() {
if (self.innerWidth) return self.innerWidth;
if (document.documentElement && document.documentElement.clientWidth)
return document.documentElement.clientWidth;
if (document.body) return document.body.clientWidth;
return 0;
}
function resize() {
var map = document.getElementById("map");
map.style.height = (getWindowHeight()-10) + "px";
map.style.width = (getWindowWidth()-10) + "px";
if (map.updateSize) { map.updateSize(); };
}
onresize=function(){ resize(); };
</script>
</head>
<body onload="init()">
<div id="map" style="height: 700px; z-index: 1; width: 990px; position: absolute; top: 3px; left: 200px;"></div>
</body>
</html>