我正在使用JGraphModelAdapter将Jgraph转换为JGrapht。它的工作正常,我的顶点显示在gui上。
在编辑GUI上顶点的位置时,我已经获得了一些基本代码。 (见下文)
private void positionVertices() {
for (MapLocation aVertex : this.graphContents.vertexSet()) {
double xPostion = (?);
double yPostion = (?);
this.positionAVertex(aVertex, xPostion, yPostion);
}
}
private void positionAVertex(Object vertex, double x, double y) {
DefaultGraphCell vertexDisplayCell = this.theModelAdapter
.getVertexCell(vertex);
AttributeMap cellAttributes = vertexDisplayCell.getAttributes();
Rectangle2D bounds = GraphConstants.getBounds(cellAttributes);
Rectangle2D newBounds = new Rectangle2D.Double(x, y, bounds.getWidth(),
bounds.getHeight());
GraphConstants.setBounds(cellAttributes, newBounds);
HashMap<DefaultGraphCell, AttributeMap> cellAttributeMap = new HashMap<>();
cellAttributeMap.put(vertexDisplayCell, cellAttributes);
this.theModelAdapter.edit(cellAttributeMap, null, null, null);
}
每个MapLocation(Vertex)对象代表美国某个地方的邮政编码,它可以访问精确的纬度和经度吸气剂。 使用它们我应该能够将顶点定位在我的gui上按比例逼真的位置。但是我很难确定在这种情况下哪种公式(由(?)表示)会很好。
框架设置为MAXIMIZED_BOTH,但必须适用于任何显示器尺寸。
感谢您提前获得任何帮助。
答案 0 :(得分:1)
根据您的意见,我将做出以下假设。
(left, top)
到(left + width, top + height)
鉴于这些假设,以下是将longitude
和latitude
转换为(x,y)
的方式。
x = left + width * ( 125 - longitude ) / 60;
y = top + height * ( 50 - latitude ) / 25;
请注意,如果您的经度实际上对西方度数为负,则可以在-
的表达式中将+
替换为x
。
答案 1 :(得分:0)
这是可行的代码
double xPostion = (124 - Math.abs(aVertex.getLongitude()));
xPostion = xPostion / 57;
xPostion = xPostion * this.myWidth;
double yPostion = 49 - aVertex.getLatitude();
yPostion = yPostion / 25;
yPostion = yPostion * this.myHeight ;
57美国东部最东部和西部地区的经度差异很大。
25是纬度与美国大陆最北部和最南部的差异
124是美国西部最西部的经度。 49是美国大陆最北部的纬度。