我已经使用openlayers和OpenStreetMaps运行管理应用程序运行geodjango .
现在我想写一些视图来显示数据.基本上,我只想在地图中添加一个点列表(在管理员中看到).
Geodjango似乎使用了一个特殊的 openlayers.js文件来管理它.有没有一种很好的方式与此接口?
如何编写视图/模板以在打开的街道地图窗口中显示geodjango数据,如管理员所示?
目前,我正在挖掘openlayers.js文件和api寻找一个"简单"的解决方案.(我没有经验,所以这需要一些时间.)
我可以看到的当前方式是将以下内容添加为模板,并使用django添加显示点所需的代码.(根据这里的例子)
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Draw Feature Example</title>
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">
var map;
function init(){
map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
map.addLayer(layer);
/*
* Layer style
*/
// we want opaque external graphics and non-opaque internal graphics
var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
layer_style.fillOpacity = 0.2;
layer_style.graphicOpacity = 1;
/*
* Blue style
*/
var …
Run Code Online (Sandbox Code Playgroud) 我喜欢OpenStreetMap显示地图的方式.它几乎看起来像谷歌地图.我已经在笔记本上安装了GeoServer和PostGis.我还为我的国家印度尼西亚提供了这个cloudmade osm文件.我下载了indonesia.osm.bz2.
我成功地将它导入我的PostGis并在我的GeoServer上设置了它,但它没有像OpenStreetMap那样显示地图.我选择了planet_osm_polygon作为GeoServer中的图层.最后,我用openlayers显示了这个. 替代文字http://deerawan.com/blogimages/map_polygon.jpg
但我希望像这样一个 alt文本http://deerawan.com/blogimages/map-indo.png
我从Cloudmade使用的OSM文件是错误的吗?
谢谢您的帮助.
我想让用户在地图上添加自定义标记,并附上每个标记的说明.任何提示,指向任何教程的链接都非常有用.
我有一个OpenLayers地图,它有一个光栅基础层,一个矢量图层和一个标记图层.它们以正确的顺序显示,矢量顶部的标记非常好.
但是当我添加一个SelectFeature控件并将其指向矢量图层时,它会突然在标记图层上方绘制,尽管所有努力都会提升标记图层或设置Z索引.似乎SelectFeature控件会覆盖所有绘图顺序设置.这是设计,还是我能以某种方式克服这个问题?
图层定义:
var baselayer = new OpenLayers.Layer.WMS('Norden',
'http://{myarcgisserver}/ArcGIS/services/mylayer/MapServer/WMSServer', {
layers :'1,2',
transparent :false,
width :'auto',
height :'auto',
filter :null
}, {
isBaseLayer: true,
singleTile :true,
ratio :1,
alpha :false,
transitionEffect :'resize'
});
var vectorLayer = new OpenLayers.Layer.Vector("Work orders", {
projection: new OpenLayers.Projection("EPSG:2400"),
strategies: [new OpenLayers.Strategy.Fixed(), refresh],
protocol: new OpenLayers.Protocol.HTTP({
url: "/WorkOrder/WorkOrders.ashx?output=geojson",
format: new OpenLayers.Format.GeoJSON()
})
});
var markerlayer = new OpenLayers.Layer.Markers("Markers", {
projection: new OpenLayers.Projection("EPSG:2400"),
displayInLayerSwitcher: false
}
);
Run Code Online (Sandbox Code Playgroud)
控件定义:
var selectctrl = new OpenLayers.Control.SelectFeature(
vectorLayer,
{
clickout: true, …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个使用OpenLayers的应用程序,使用户能够将文件拖放到一组预定义的功能,这些功能将通过AJAX发送到服务器.文件本身是来自地球物理设备的原始数据,将由服务器呈现为栅格图层.
我为地图拖放工作:
var mapelem = $id("map");
mapelem.addEventListener("dragover", FileDragHover, false);
mapelem.addEventListener("dragleave", FileDragHover, false);
mapelem.addEventListener("drop", FileSelectHandler, false);
Run Code Online (Sandbox Code Playgroud)
我强调悬停使用此代码:
var sf = new OpenLayers.Control.SelectFeature(boxes, {
hover: true,
multiple: false,
highlightOnly: true
});
map.addControl(sf);
sf.activate();
Run Code Online (Sandbox Code Playgroud)
其余代码主要是Boxes Example - Vector.
问题是当将文件拖到地图画布上时,OpenLayers悬停选择不再有效,我希望它给用户提供反馈,以确保他们将文件丢弃到他们期望的位置.
我可以在画布上获取光标的位置:
map.events.register("mousemove", map, function(e) {
lonlat = map.getLonLatFromPixel(e.xy);
});
Run Code Online (Sandbox Code Playgroud)
所以我可以在该函数中进行一个功能点测试,但能够使用现有的功能会很好.
有什么方法可以将拖动消息传播到我的OpenLayers层吗?
我发现了一些奇怪的单词,(有,在这里,图像,对不起),这些单词应该不在我的网站上,被Google的抓取工具当作关键字
在抓取使用Google地图的网页时,Google似乎遇到了错误,因此将错误字符串视为优秀的关键字!
我正在使用openlayers在两个站点中显示地图.代码是这样的
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script src="http://maps.google.com/maps/api/js?v=3&sensor=false"></script>
<script type="text/javascript">
$(function() {
$("#mapOuter").html('<div class="thumbnail"><div id="map" style="height:250px"></div></div>')
map = new OpenLayers.Map("map")
//map.addLayer( new OpenLayers.Layer.OSM ("OpenStreeetMap") )
map.addLayer( new OpenLayers.Layer.Google("Google v3" ) )
vectors = new OpenLayers.Layer.Vector("vector")
map.addLayer( vectors )
map.addControl( new OpenLayers.Control.LayerSwitcher() );
map.addControl( new OpenLayers.Control.Navigation({documentDrag:true}) );
map.addControl( new OpenLayers.Control.PanZoom() );
var in_options = {
'internalProjection': map.baseLayer.projection,
'externalProjection': new OpenLayers.Projection("EPSG:4326")
};
var lon=-57.954900
var lat=-34.917000
map.setCenter(new OpenLayers.LonLat(lon, lat) // Center of the map
.transform(
new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
new …
Run Code Online (Sandbox Code Playgroud) 我负责管理一些用于创作地理数据集的学术网络地图软件的开发.这是一个用于创建历史地图的相当简单的界面.该项目基于谷歌地图v.2,并且因为v.2将在2013年停止,我们认为我们会提前咬紧并升级到第3版.
事实证明,这是一项重要的工作,需要完全重新思考我们的应用程序的地图部分是如何工作的.我们必须重写所有自定义Gmap控件,重组应用程序的几个部分以及一些其他重大更改 - 例如,v.3不与Google Earth以及v.2集成,我们使用Google Earth很多.正因为如此,并且因为我们开始使用Gmap本身不支持的更多功能(如WMS地图),我一直想知道是否值得从Gmap切换到OpenLayers.据我所知,OpenLayers拥有Google Maps的所有功能,对WMS提供原生支持并支持更多数据格式,让我们无论如何都可以使用所有Google图像,并与KML配合使用.
我对社区的问题是对于了解OpenLayers和Google Maps的人:您能否让我了解从Gmap v.2升级到v.3的工作负载与从Gmap v.2到OpenLayers的完整端口的比较?我们应该注意哪些其他缺点?
我们最担心的问题之一是:我们经常使用Google地球.如果我们去OpenLayers,我们必须自己同步Earth和OpenLayers,但听起来这就是我们在Gmap v.3中必须做的事情.据我所知,OpenLayers没有对Google Earth或任何类型的3D geobrowser的原生支持,但有一些项目(如此)试图缩小差距.这会引起多大的麻烦?
我想在地图上放置一个符号.例如
到目前为止,我已经使用OpenLayers OpenLayers.Layer.Markers
.代码如下所示:
map = new OpenLayers.Map('map');
layer = new OpenLayers.Layer.OSM( "Simple OSM Map");
map.addLayer(layer);
map.setCenter(
new OpenLayers.LonLat({{ location.lon }}, {{ location.lat }}).transform(
new OpenLayers.Projection("EPSG:4326"),
map.getProjectionObject()
), 15);
var lonLat = new OpenLayers.LonLat({{ location.lon }}, {{ location.lat }})
.transform(
new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
map.getProjectionObject() // to Spherical Mercator Projection
);
var markers = new OpenLayers.Layer.Markers( "Markers" );
map.addLayer(markers);
markers.addMarker(new OpenLayers.Marker(lonLat));
Run Code Online (Sandbox Code Playgroud)
这可以作为例外,并显示上面的地图.但我无法使用Vector替换最后3行:
vectors = new OpenLayers.Layer.Vector("Vector Layer");
vectors.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(lonLat))]);
map.addLayer(vectors);
Run Code Online (Sandbox Code Playgroud)
是否需要使用特殊魔法OpenLayers.Feature.Vector
?
我目前正将OpenLayers 2 Mapview升级到OpenLayers 3.我非常喜欢新的OpenLayers客户端,但我想停用在移动设备上旋转地图的功能(用2个手指旋转).
但我找不到任何设置.这是不可能的,还是我只是愚蠢地找到设置?
我正在使用openlayers javascript客户端的当前发行版本(3.0.0).(https://github.com/openlayers/ol3/releases/tag/v3.0.0)
我们目前正在为我们公司开发一个新的网络地图解决方案.到目前为止,我们决定使用React
和构建应用程序OpenLayers 4
.由于我们希望将Redux
模式用于我们的体系结构,因此将有一个redux存储保存应用程序状态.
我们在这个堆栈中遇到的问题如下:
map是我们应用程序中的中心元素,它的实例需要传递给许多不同的组件.例如,用于在地图上绘制要素的工具需要对map
实例的引用,以便它可以将其自身添加为交互工具.
我们讨论了如何构建我们的应用程序以最可靠的方式集成OpenLayers
,React
最终得到两种不同的方法:
我们讨论的第一种方法是在应用程序范围的redux存储中保存对map对象的引用,这样它就可以通过@connect
注释函数传递给任何组件react-redux
.虽然这个解决方案提供了一个简单的访问,map
我们想知道这是否是一个易处理的方法,因为存储应保持最小,并且map
对象永远不会在应用程序的整个生命周期中发生变化.
第二种方法将渲染组件(如上面提到的绘制交互)视为反应图组件的子组件.map
然后,可以直接将实例作为a prop
或通过利用模式利用反应context
对象传递给地图组件的子项Provider
.
但是,反应文档明确建议不要使用context
,尽管我们发现了许多使用这种模式的解决方案(react-geo,react-leaflet)以及流行的库,比如react-redux
使用它.
因此,我们考虑使用React.Children.map()
克隆子组件,然后将map
其添加为prop
.
我希望我们面临的问题足够清楚.我们不知道在react
最佳实践方面哪种方式更好.
什么架构更适合设计/管理和应用的"反应方式"?为什么?
openlayers ×10
javascript ×5
google-maps ×2
geodjango ×1
geoserver ×1
mapping ×1
openlayers-3 ×1
postgis ×1
python ×1
react-redux ×1
reactjs ×1
redux ×1
seo ×1