我一直在尝试生成一张Latitude&经度,我拿这些拉特& amp;来自MYSQL DB。 我有一个java类,它将连接到数据库&检索lat,lon,所以我需要将这些值传递给一个JavaScript,它有一个生成map的代码。
在Java Script中我有一个名为addmarker()的函数,它有lat& lon。实际要求是我必须将lat,lon从java类传递给Java脚本。
这是我的java代码:
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
String url = "jdbc:mysql://localhost:3306/";
String dbName = "db5";
String driver = "com.mysql.jdbc.Driver";
String userName = "root";
String password = "root";
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url + dbName, userName, password);
pst = conn.prepareStatement("select latitude,longitude from nidgis where nidevid=?");
pst.setString(1, n);
rs = pst.executeQuery();
while(rs.next())
{
rs.getInt("latitude");
rs.getInt("longitude");
}
}
catch (Exception e)
{
System.out.println(e);
}
这是我的JS代码:
<script>
function addMarker()
{
var vehicle = new MQA.Poi({
lat: vehicle_lat,
lng: vehicle_lng,
});
var icon = new MQA.Icon(
'https://cdn2.iconfinder.com/data/icons/gpsmapicons /blue/gpsmapicons07.png',
35, 42);
vehicle.setIcon(icon);
vehicle.setKey("abc");
map.addShape(vehicle);
vehicle.setRolloverContent("Vehicle # KA05 9999");
}
MQA.EventUtil.observe(window, 'load', function() {
/*Create an object for options*/
var options={
elt:document.getElementById('map'), /*ID of element on the page where you want the map added*/
zoom:10, /*initial zoom level of map*/
latLng:{lat:39.743943, lng:-105.020089}, /*center of map in latitude/longitude*/
mtype:'map' /*map type (map)*/
};
/*Construct an instance of MQA.TileMap with the options object*/
window.map = new MQA.TileMap(options);
MQA.withModule('geocoder', function() {
/*Executes a geocode and adds result to the map*/
map.geocodeAndAddLocations("Denver CO");
});
});
</script>
<body>
<div id='map' style='width:1560px; height:730px;'></div>
<button id="getBasicSample" onclick="addMarker();">show veh1</button>
</body>
答案 0 :(得分:1)
您的Java代码应该在servlet中,然后您应该将lat/lng
结果添加到容器并序列化为JSON,例如GSON:
class Result {
double lat;
double lng;
Result(double l, double ll) {
this.lat = l;
this.lng = ll;
}
}
List<Result> results = new ArrayList<>();
while (rs.next()) {
results.add(new Result(rs.getInt("latitude"), rs.getInt("longitude")));
}
final TypeToken<List<Result>> resultsType = new TypeToken<List<Result>>() {};
response.getWriter().write(new Gson().toJson(results, resultsType.getType()))
然后在你的javascript中,假设这是用Ajax调用的,你可以使用json:
var markers = [];
for (var i = 0; i < responseJSON.length) {
markers.push(responseJSON[i].lat + ', ' + responseJSON[i].lng)
}
答案 1 :(得分:0)
有了您的问题,您似乎正在尝试在地图中添加标记。无论如何,这是步骤中的解决方案:
步骤1:在控制器中,设置字符串:
String data = "{\"lat\":" + Lattitude + ",\"Longitude\":" + Longitude+ "}";
request.getSession(false).setAttribute("latLong", data);
步骤2:在JSP页面中,您可以获得与
相同的字符串<script>
var latLon = <%=session.getAttribute("latLong") %>;
//你已经完成了。
如果您在加载JSP时尝试获取lat-long。然后你必须使用Ajax调用请求并获取上面的&#34; latLong&#34;作为JSON的回应。 更新:如果你想添加标记,那么下面将是逻辑。
假设用户在地图上的某个位置点击了您已经有相同的地图和图层。在以下示例中,有 map ,它是 OpenLayers.Map 的对象。
map.events.register("click", map, function(e) {
var positionN = this.events.getMousePosition(e);
var lonlat = map.getLonLatFromPixel(positionN);
var TempPoint = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat);
var iconAnnotation = new OpenLayers.Icon(OpenLayers.ImgPath + '../../css/img/icon.png');
var feature = new OpenLayers.Feature.Vector(TempPoint,{icon:iconAnnotation,labelText: "",markerId:"r", labelColor:"red"});
AnnotationLayer.addFeatures([feature]);
});